[pulseaudio] 01/05: New upstream version 10.99.1

Felipe Sateler fsateler at moszumanska.debian.org
Wed Jul 26 14:28:08 UTC 2017


This is an automated email from the git hooks/post-receive script.

fsateler pushed a commit to branch master
in repository pulseaudio.

commit aafa305f5f4ddaf6ed627d3f68c8925e54e18508
Author: Felipe Sateler <fsateler at debian.org>
Date:   Wed Jul 26 09:14:01 2017 -0400

    New upstream version 10.99.1
---
 .tarball-version                                   |    2 +-
 .version                                           |    2 +-
 Makefile.am                                        |    1 +
 Makefile.in                                        |   14 +-
 aclocal.m4                                         |   46 +-
 bootstrap.sh                                       |    7 -
 build-aux/depcomp                                  |    6 +-
 config.h.in                                        |    3 +
 configure                                          | 2743 ++++++-------
 configure.ac                                       |   42 +-
 coverity/model.c                                   |   18 +
 doxygen/Makefile.in                                |    5 +-
 man/Makefile.in                                    |    5 +-
 man/pactl.1                                        |    6 +-
 man/pactl.1.xml.in                                 |    6 +-
 man/pulse-daemon.conf.5                            |    4 +
 man/pulse-daemon.conf.5.xml.in                     |   17 +
 man/pulseaudio.1                                   |    2 +-
 man/pulseaudio.1.xml.in                            |    2 +-
 po/LINGUAS                                         |    1 +
 po/fr.po                                           | 4278 ++++++++++----------
 po/{tr.po => hr.po}                                | 2218 +++++-----
 po/it.po                                           |  462 +--
 po/ko.po                                           |  416 +-
 po/pt_BR.po                                        | 1861 +++++----
 po/sv.po                                           | 1437 ++++---
 po/tr.po                                           |  616 +--
 po/uk.po                                           |  875 ++--
 shell-completion/zsh/_pulseaudio                   |   24 +-
 src/Makefile.am                                    |   12 +-
 src/Makefile.in                                    |  404 +-
 src/daemon/daemon-conf.c                           |    7 +
 src/daemon/daemon-conf.h                           |    2 +
 src/daemon/daemon.conf.in                          |    2 +
 src/daemon/main.c                                  |    2 +
 src/modules/alsa/alsa-mixer.c                      |    4 +-
 src/modules/alsa/alsa-sink.c                       |   33 +-
 src/modules/alsa/alsa-source.c                     |    8 +-
 src/modules/alsa/alsa-util.c                       |   12 +-
 .../alsa/mixer/paths/analog-input-headset-mic.conf |    2 +-
 src/modules/alsa/mixer/profile-sets/default.conf   |    8 +-
 src/modules/bluetooth/backend-native.c             |  326 +-
 src/modules/bluetooth/backend-ofono.c              |   42 +-
 src/modules/bluetooth/bluez4-util.c                |   47 +-
 src/modules/bluetooth/bluez4-util.h                |    2 -
 src/modules/bluetooth/bluez5-util.c                |  100 +-
 src/modules/bluetooth/bluez5-util.h                |    7 +-
 src/modules/bluetooth/module-bluetooth-discover.c  |    1 +
 src/modules/bluetooth/module-bluetooth-policy.c    |   60 +-
 src/modules/bluetooth/module-bluez4-device.c       |   19 +-
 src/modules/bluetooth/module-bluez5-device.c       |  193 +-
 src/modules/bluetooth/module-bluez5-discover.c     |   14 +-
 src/modules/dbus/iface-card.c                      |   16 +-
 src/modules/dbus/iface-core.c                      |  114 +-
 src/modules/dbus/iface-sample.c                    |   10 +-
 src/modules/dbus/module-dbus-protocol.c            |    4 +-
 src/modules/echo-cancel/module-echo-cancel.c       |  168 +-
 src/modules/jack/module-jack-sink.c                |   16 +-
 src/modules/jack/module-jack-source.c              |    2 +-
 src/modules/macosx/module-coreaudio-device.c       |   12 +-
 src/modules/module-allow-passthrough.c             |   18 +-
 src/modules/module-combine-sink.c                  |   10 +-
 src/modules/module-default-device-restore.c        |   36 +-
 src/modules/module-equalizer-sink.c                |   70 +-
 src/modules/module-esound-sink.c                   |    2 +-
 src/modules/module-filter-apply.c                  |   61 +-
 src/modules/module-intended-roles.c                |   37 +-
 src/modules/module-ladspa-sink.c                   |  102 +-
 src/modules/module-loopback.c                      |  689 +++-
 src/modules/module-null-sink.c                     |    2 +-
 src/modules/module-null-source.c                   |    2 +-
 src/modules/module-pipe-sink.c                     |   11 +-
 src/modules/module-pipe-source.c                   |    2 +-
 src/modules/module-remap-sink.c                    |   71 +-
 src/modules/module-remap-source.c                  |   45 +-
 src/modules/module-rescue-streams.c                |   20 +-
 src/modules/module-sine-source.c                   |    2 +-
 src/modules/module-sine.c                          |    2 +-
 src/modules/module-solaris.c                       |   11 +-
 src/modules/module-stream-restore.c                |   44 +
 src/modules/module-suspend-on-idle.c               |   18 +-
 src/modules/module-switch-on-connect.c             |   42 +-
 src/modules/module-tunnel-sink-new.c               |   10 +-
 src/modules/module-tunnel-source-new.c             |   12 +-
 src/modules/module-tunnel.c                        |   10 +-
 src/modules/module-udev-detect.c                   |   22 +-
 src/modules/module-virtual-sink.c                  |   72 +-
 src/modules/module-virtual-source.c                |   46 +-
 src/modules/module-virtual-surround-sink.c         |  101 +-
 src/modules/module-waveout.c                       |  105 +-
 src/modules/oss/module-oss.c                       |    6 +-
 src/modules/raop/base64.c                          |  124 -
 src/modules/raop/module-raop-discover.c            |  270 +-
 src/modules/raop/module-raop-sink.c                |  641 +--
 src/modules/raop/raop-client.c                     | 1785 ++++++++
 src/modules/raop/raop-client.h                     |   83 +
 src/modules/raop/raop-crypto.c                     |  164 +
 src/modules/raop/{base64.h => raop-crypto.h}       |   25 +-
 src/modules/raop/raop-packet-buffer.c              |  161 +
 src/modules/raop/raop-packet-buffer.h              |   40 +
 src/modules/raop/raop-sink.c                       |  675 +++
 src/modules/raop/{base64.h => raop-sink.h}         |   23 +-
 src/modules/raop/raop-util.c                       |  211 +
 src/modules/raop/{base64.h => raop-util.h}         |   21 +-
 src/modules/raop/raop_client.c                     |  581 ---
 src/modules/raop/raop_client.h                     |   42 -
 src/modules/reserve.c                              |    6 +
 src/modules/rtp/module-rtp-recv.c                  |    2 +-
 src/modules/rtp/rtsp_client.c                      |  173 +-
 src/modules/rtp/rtsp_client.h                      |   60 +-
 src/modules/x11/module-x11-bell.c                  |    5 +-
 src/pulse/context.c                                |    2 +-
 src/pulse/sample.c                                 |    5 +-
 src/pulse/simple.c                                 |   40 +-
 src/pulse/thread-mainloop.c                        |    2 +-
 src/pulse/thread-mainloop.h                        |    2 +-
 src/pulse/version.h                                |    4 +-
 src/pulse/volume.c                                 |   22 +-
 src/pulsecore/cli-command.c                        |   20 +-
 src/pulsecore/cli-text.c                           |   12 +-
 src/pulsecore/core-util.c                          |   46 +-
 src/pulsecore/core-util.h                          |    7 +-
 src/pulsecore/core.c                               |  197 +
 src/pulsecore/core.h                               |   35 +-
 src/pulsecore/dbus-shared.c                        |    4 +-
 src/pulsecore/dbus-util.c                          |    4 +-
 src/pulsecore/device-port.c                        |    8 +
 src/pulsecore/iochannel.c                          |   10 +-
 src/pulsecore/macro.h                              |    9 +
 src/pulsecore/memblock.c                           |    2 +-
 src/pulsecore/namereg.c                            |  115 +-
 src/pulsecore/namereg.h                            |    6 -
 src/pulsecore/parseaddr.c                          |   11 +
 src/pulsecore/parseaddr.h                          |    2 +
 src/pulsecore/play-memblockq.c                     |    2 +-
 src/pulsecore/protocol-native.c                    |   32 +-
 src/pulsecore/resampler.c                          |   82 +-
 src/pulsecore/resampler.h                          |    3 +-
 src/pulsecore/shared.c                             |    2 +-
 src/pulsecore/shared.h                             |    4 +-
 src/pulsecore/shm.c                                |    2 +-
 src/pulsecore/sink-input.c                         |   75 +-
 src/pulsecore/sink.c                               |   88 +-
 src/pulsecore/sink.h                               |    2 +-
 src/pulsecore/socket-client.c                      |   21 +-
 src/pulsecore/sound-file-stream.c                  |    2 +-
 src/pulsecore/source-output.c                      |   57 +-
 src/pulsecore/source.c                             |   72 +-
 src/pulsecore/source.h                             |    2 +-
 src/tests/alsa-time-test.c                         |    3 -
 src/tests/remix-test.c                             |   39 +-
 src/tests/thread-test.c                            |    5 +-
 src/utils/padsp.c                                  |   26 +-
 src/utils/padsp.in                                 |    4 +-
 vala/libpulse.vapi                                 |  136 +-
 155 files changed, 14342 insertions(+), 10423 deletions(-)

diff --git a/.tarball-version b/.tarball-version
index 2f52450..df7b9ee 100644
--- a/.tarball-version
+++ b/.tarball-version
@@ -1 +1 @@
-10.0
+10.99.1
diff --git a/.version b/.version
index 2f52450..df7b9ee 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-10.0
+10.99.1
diff --git a/Makefile.am b/Makefile.am
index 14054ac..1f460a9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,6 +18,7 @@ ACLOCAL_AMFLAGS = -I m4
 EXTRA_DIST = \
 	AGPL \
 	bootstrap.sh \
+	coverity/model.c \
 	git-version-gen \
 	LICENSE \
 	pulseaudio.supp \
diff --git a/Makefile.in b/Makefile.in
index a653e93..044917b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -474,6 +474,7 @@ PREOPEN_MODS = @PREOPEN_MODS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+PULSEDSP_LOCATION = @PULSEDSP_LOCATION@
 RANLIB = @RANLIB@
 SBC_CFLAGS = @SBC_CFLAGS@
 SBC_LIBS = @SBC_LIBS@
@@ -571,6 +572,7 @@ ACLOCAL_AMFLAGS = -I m4
 EXTRA_DIST = \
 	AGPL \
 	bootstrap.sh \
+	coverity/model.c \
 	git-version-gen \
 	LICENSE \
 	pulseaudio.supp \
@@ -970,7 +972,7 @@ distdir: $(DISTFILES)
 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
 	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
 	$(am__post_remove_distdir)
 
 dist-bzip2: distdir
@@ -995,7 +997,7 @@ 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
+	shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
 	$(am__post_remove_distdir)
 
 dist-zip: distdir
@@ -1013,7 +1015,7 @@ dist dist-all:
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lz*) \
@@ -1023,7 +1025,7 @@ distcheck: dist
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
diff --git a/aclocal.m4 b/aclocal.m4
index 6bf6efb..d0ab60a 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
 
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -296,7 +296,7 @@ AS_VAR_COPY([$1], [pkg_cv_][$1])
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
 ])dnl PKG_CHECK_VAR
 
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+# Copyright (C) 2002-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -311,7 +311,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [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.15], [],
+m4_if([$1], [1.15.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -327,14 +327,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.15])dnl
+[AM_AUTOMAKE_VERSION([1.15.1])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-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -386,7 +386,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -417,7 +417,7 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -608,7 +608,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -684,7 +684,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -881,7 +881,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-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -902,7 +902,7 @@ if test x"${install_sh+set}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -923,7 +923,7 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -973,7 +973,7 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Copyright (C) 1997-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1010,7 +1010,7 @@ else
 fi
 ])
 
-# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 2003-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1044,7 +1044,7 @@ esac
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1073,7 +1073,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1120,7 +1120,7 @@ AC_LANG_POP([C])])
 # For backward compatibility.
 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1139,7 +1139,7 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1220,7 +1220,7 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Copyright (C) 2009-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1280,7 +1280,7 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Copyright (C) 2001-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1308,7 +1308,7 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2017 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1327,7 +1327,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004-2017 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/bootstrap.sh b/bootstrap.sh
index 187abaa..57494fc 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -15,13 +15,6 @@
 # You should have received a copy of the GNU Lesser General Public License
 # along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
 
-case $(uname) in
-	*Darwin*)
-		LIBTOOLIZE="glibtoolize"
-		;;
-esac
-test "x$LIBTOOLIZE" = "x" && LIBTOOLIZE=libtoolize
-
 if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then
     cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \
     chmod +x .git/hooks/pre-commit && \
diff --git a/build-aux/depcomp b/build-aux/depcomp
index fc98710..b39f98f 100755
--- a/build-aux/depcomp
+++ b/build-aux/depcomp
@@ -1,9 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2013-05-30.07; # UTC
+scriptversion=2016-01-11.22; # UTC
 
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2017 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
@@ -786,6 +786,6 @@ exit 0
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff --git a/config.h.in b/config.h.in
index a869113..75e601a 100644
--- a/config.h.in
+++ b/config.h.in
@@ -465,6 +465,9 @@
 /* Define to 1 if you have the <sys/capability.h> header file. */
 #undef HAVE_SYS_CAPABILITY_H
 
+/* Define to 1 if you have the <sys/conf.h> header file. */
+#undef HAVE_SYS_CONF_H
+
 /* Define to 1 if you have the <sys/dl.h> header file. */
 #undef HAVE_SYS_DL_H
 
diff --git a/configure b/configure
index 572dc1a..a9f2b30 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 pulseaudio 10.0.
+# Generated by GNU Autoconf 2.69 for pulseaudio 10.99.1.
 #
 # Report bugs to <pulseaudio-discuss (at) lists (dot) freedesktop (dot) org>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='pulseaudio'
 PACKAGE_TARNAME='pulseaudio'
-PACKAGE_VERSION='10.0'
-PACKAGE_STRING='pulseaudio 10.0'
+PACKAGE_VERSION='10.99.1'
+PACKAGE_STRING='pulseaudio 10.99.1'
 PACKAGE_BUGREPORT='pulseaudio-discuss (at) lists (dot) freedesktop (dot) org'
 PACKAGE_URL='http://pulseaudio.org/'
 
@@ -655,6 +655,10 @@ STATIC_BINS_FALSE
 STATIC_BINS_TRUE
 BUILD_TESTS_DEFAULT_FALSE
 BUILD_TESTS_DEFAULT_TRUE
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
 HAVE_ADRIAN_EC_FALSE
 HAVE_ADRIAN_EC_TRUE
 HAVE_WEBRTC_FALSE
@@ -803,6 +807,7 @@ HAVE_OSS_WRAPPER_FALSE
 HAVE_OSS_WRAPPER_TRUE
 HAVE_OSS_OUTPUT_FALSE
 HAVE_OSS_OUTPUT_TRUE
+PULSEDSP_LOCATION
 HAVE_OSS_OUTPUT
 HAVE_SIMPLEDB_FALSE
 HAVE_SIMPLEDB_TRUE
@@ -840,10 +845,6 @@ HAVE_MKFIFO_TRUE
 HAVE_MKFIFO
 HAVE_BONJOUR_FALSE
 HAVE_BONJOUR_TRUE
-PTHREAD_CFLAGS
-PTHREAD_LIBS
-PTHREAD_CC
-ax_pthread_config
 HAVE_SIGXCPU_FALSE
 HAVE_SIGXCPU_TRUE
 HAVE_SYS_EVENTFD_H_FALSE
@@ -1081,6 +1082,7 @@ enable_samplerate
 with_database
 enable_oss_output
 enable_oss_wrapper
+with_pulsedsp_location
 enable_coreaudio_output
 enable_alsa
 enable_esound
@@ -1751,7 +1753,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 pulseaudio 10.0 to adapt to many kinds of systems.
+\`configure' configures pulseaudio 10.99.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1822,7 +1824,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of pulseaudio 10.0:";;
+     short | recursive ) echo "Configuration of pulseaudio 10.99.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1925,6 +1927,8 @@ Optional Packages:
   --without-caps          Omit support for dropping capabilities.
   --with-database=auto|tdb|gdbm|simple
                           Choose database backend.
+  --with-pulsedsp-location
+                          Specify location where OSS wrapper will be installed
   --without-fftw          Omit FFTW-using modules (equalizer)
   --without-speex         Omit speex (resampling, AEC)
   --without-soxr          Omit soxr (resampling)
@@ -2125,7 +2129,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-pulseaudio configure 10.0
+pulseaudio configure 10.99.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2898,7 +2902,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 pulseaudio $as_me 10.0, which was
+It was created by pulseaudio $as_me 10.99.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3199,6 +3203,7 @@ as_fn_append ac_header_list " sys/dl.h"
 as_fn_append ac_header_list " dlfcn.h"
 as_fn_append ac_header_list " linux/sockios.h"
 as_fn_append ac_header_list " sys/prctl.h"
+as_fn_append ac_header_list " sys/conf.h"
 as_fn_append ac_header_list " sys/filio.h"
 as_fn_append ac_header_list " windows.h"
 as_fn_append ac_header_list " winsock2.h"
@@ -3853,7 +3858,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='pulseaudio'
- VERSION='10.0'
+ VERSION='10.99.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4086,12 +4091,12 @@ PA_PROTOCOL_VERSION=32
 
 # The stable ABI for client applications, for the version info x:y:z
 # always will hold y=z
-LIBPULSE_VERSION_INFO=20:1:20
+LIBPULSE_VERSION_INFO=20:2:20
 
 
 # A simplified, synchronous, ABI-stable interface for client
 # applications, for the version info x:y:z always will hold y=z
-LIBPULSE_SIMPLE_VERSION_INFO=1:0:1
+LIBPULSE_SIMPLE_VERSION_INFO=1:1:1
 
 
 # The ABI-stable GLib adapter for client applications, for the version
@@ -21889,6 +21894,8 @@ fi
 
 
 
+
+
 # Windows
 
 
@@ -22557,94 +22564,186 @@ $as_echo "#define HAVE_STD_BOOL 1" >>confdefs.h
 fi
 
 
-#### Thread support ####
-
+#### Check for libs ####
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5
-$as_echo_n "checking for thread local storage (TLS) class... " >&6; }
-  if ${ac_cv_tls+:} false; then :
+# ISO
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5
+$as_echo_n "checking for library containing pow... " >&6; }
+if ${ac_cv_search_pow+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-
-    ax_tls_keywords="__thread __declspec(thread) none"
-    for ax_tls_keyword in $ax_tls_keywords; do
-       case $ax_tls_keyword in #(
-  none) :
-    ac_cv_tls=none ; break ;; #(
-  *) :
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdlib.h>
-               static void
-               foo(void) {
-               static  $ax_tls_keyword  int bar;
-               exit(1);
-               }
+
+/* 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 pow ();
 int
 main ()
 {
-
+return pow ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_tls=$ax_tls_keyword ; break
-else
-  ac_cv_tls=none
+for ac_lib in '' m; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_pow=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_pow+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_pow+:} false; then :
 
+else
+  ac_cv_search_pow=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;;
-esac
-    done
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5
+$as_echo "$ac_cv_search_pow" >&6; }
+ac_res=$ac_cv_search_pow
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
-$as_echo "$ac_cv_tls" >&6; }
 
-  if test "$ac_cv_tls" != "none"; then :
+# POSIX
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sched_setscheduler" >&5
+$as_echo_n "checking for library containing sched_setscheduler... " >&6; }
+if ${ac_cv_search_sched_setscheduler+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-cat >>confdefs.h <<_ACEOF
-#define TLS $ac_cv_tls
+/* 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 sched_setscheduler ();
+int
+main ()
+{
+return sched_setscheduler ();
+  ;
+  return 0;
+}
 _ACEOF
-
-
+for ac_lib in '' rt; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_sched_setscheduler=$ac_res
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_sched_setscheduler+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_sched_setscheduler+:} false; then :
 
-if test "$ac_cv_tls" = "__thread"; then :
-
-$as_echo "#define SUPPORT_TLS___THREAD 1" >>confdefs.h
-
+else
+  ac_cv_search_sched_setscheduler=no
 fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sched_setscheduler" >&5
+$as_echo "$ac_cv_search_sched_setscheduler" >&6; }
+ac_res=$ac_cv_search_sched_setscheduler
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-# Win32 build breaks with win32 pthread installed
-if test "x$os_is_win32" != "x1"; then :
+fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+$as_echo_n "checking for library containing dlopen... " >&6; }
+if ${ac_cv_search_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-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
+/* 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 dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' dl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_dlopen=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_dlopen+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_dlopen+:} false; then :
 
-ax_pthread_ok=no
+else
+  ac_cv_search_dlopen=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+$as_echo "$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
+fi
 
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
-$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shm_open" >&5
+$as_echo_n "checking for library containing shm_open... " >&6; }
+if ${ac_cv_search_shm_open+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -22653,399 +22752,162 @@ $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD
 #ifdef __cplusplus
 extern "C"
 #endif
-char pthread_join ();
+char shm_open ();
 int
 main ()
 {
-return pthread_join ();
+return shm_open ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_pthread_ok=yes
+for ac_lib in '' rt; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_shm_open=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
-$as_echo "$ax_pthread_ok" >&6; }
-        if test x"$ax_pthread_ok" = xno; then
-                PTHREAD_LIBS=""
-                PTHREAD_CFLAGS=""
-        fi
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
+    conftest$ac_exeext
+  if ${ac_cv_search_shm_open+:} false; then :
+  break
 fi
+done
+if ${ac_cv_search_shm_open+:} false; then :
 
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try.  Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important.  Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-#       other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads too;
-#      also defines -D_REENTRANT)
-#      ... -mt is also the pthreads flag for HP/aCC
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case ${host_os} in
-        solaris*)
-
-        # On Solaris (at least, for some versions), libc contains stubbed
-        # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
-        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
-        # a function called by this macro, so we could check for that, but
-        # who knows whether they'll stub that too in a future libc.)  So,
-        # we'll just look for -pthreads and -lpthread first:
-
-        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
-        ;;
-
-        darwin*)
-        ax_pthread_flags="-pthread $ax_pthread_flags"
-        ;;
-esac
-
-if test x"$ax_pthread_ok" = xno; then
-for flag in $ax_pthread_flags; do
-
-        case $flag in
-                none)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
-$as_echo_n "checking whether pthreads work without any flags... " >&6; }
-                ;;
-
-                -*)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
-$as_echo_n "checking whether pthreads work with $flag... " >&6; }
-                PTHREAD_CFLAGS="$flag"
-                ;;
-
-                pthread-config)
-                # Extract the first word of "pthread-config", so it can be a program name with args.
-set dummy pthread-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ax_pthread_config+:} false; then :
-  $as_echo_n "(cached) " >&6
 else
-  if test -n "$ax_pthread_config"; then
-  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ax_pthread_config="yes"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
-fi
+  ac_cv_search_shm_open=no
 fi
-ax_pthread_config=$ac_cv_prog_ax_pthread_config
-if test -n "$ax_pthread_config"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
-$as_echo "$ax_pthread_config" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shm_open" >&5
+$as_echo "$ac_cv_search_shm_open" >&6; }
+ac_res=$ac_cv_search_shm_open
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
+fi
 
-                if test x"$ax_pthread_config" = xno; then continue; fi
-                PTHREAD_CFLAGS="`pthread-config --cflags`"
-                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-                ;;
-
-                *)
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
-$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
-                PTHREAD_LIBS="-l$flag"
-                ;;
-        esac
-
-        save_LIBS="$LIBS"
-        save_CFLAGS="$CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-        # Check for various functions.  We must include pthread.h,
-        # since some functions may be macros.  (On the Sequent, we
-        # need a special flag -Kthread to make this header compile.)
-        # We check for pthread_join because it is in -lpthread on IRIX
-        # while pthread_create is in libc.  We check for pthread_attr_init
-        # due to DEC craziness with -lpthreads.  We check for
-        # pthread_cleanup_push because it is one of the few pthread
-        # functions on Solaris that doesn't have a non-functional libc stub.
-        # We try pthread_create on general principles.
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop" >&5
+$as_echo_n "checking for library containing inet_ntop... " >&6; }
+if ${ac_cv_search_inet_ntop+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <pthread.h>
-                        static void routine(void *a) { a = 0; }
-                        static void *start_routine(void *a) { return a; }
+
+/* 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 inet_ntop ();
 int
 main ()
 {
-pthread_t th; pthread_attr_t attr;
-                        pthread_create(&th, 0, start_routine, 0);
-                        pthread_join(th, 0);
-                        pthread_attr_init(&attr);
-                        pthread_cleanup_push(routine, 0);
-                        pthread_cleanup_pop(0) /* ; */
+return inet_ntop ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_pthread_ok=yes
+for ac_lib in '' nsl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_inet_ntop=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
-$as_echo "$ax_pthread_ok" >&6; }
-        if test "x$ax_pthread_ok" = xyes; then
-                break;
-        fi
-
-        PTHREAD_LIBS=""
-        PTHREAD_CFLAGS=""
+    conftest$ac_exeext
+  if ${ac_cv_search_inet_ntop+:} false; then :
+  break
+fi
 done
+if ${ac_cv_search_inet_ntop+:} false; then :
+
+else
+  ac_cv_search_inet_ntop=no
 fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntop" >&5
+$as_echo "$ac_cv_search_inet_ntop" >&6; }
+ac_res=$ac_cv_search_inet_ntop
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-# Various other checks:
-if test "x$ax_pthread_ok" = xyes; then
-        save_LIBS="$LIBS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+fi
 
-        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
-$as_echo_n "checking for joinable pthread attribute... " >&6; }
-        attr_name=unknown
-        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing timer_create" >&5
+$as_echo_n "checking for library containing timer_create... " >&6; }
+if ${ac_cv_search_timer_create+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <pthread.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 timer_create ();
 int
 main ()
 {
-int attr = $attr; return attr /* ; */
+return timer_create ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  attr_name=$attr; break
+for ac_lib in '' rt; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_timer_create=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-        done
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
-$as_echo "$attr_name" >&6; }
-        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-
-cat >>confdefs.h <<_ACEOF
-#define PTHREAD_CREATE_JOINABLE $attr_name
-_ACEOF
-
-        fi
+    conftest$ac_exeext
+  if ${ac_cv_search_timer_create+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_timer_create+:} false; then :
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
-$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
-        flag=no
-        case ${host_os} in
-            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
-            osf* | hpux*) flag="-D_REENTRANT";;
-            solaris*)
-            if test "$GCC" = "yes"; then
-                flag="-D_REENTRANT"
-            else
-                flag="-mt -D_REENTRANT"
-            fi
-            ;;
-        esac
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
-$as_echo "${flag}" >&6; }
-        if test "x$flag" != xno; then
-            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
-        fi
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
-$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
-if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-                    #include <pthread.h>
-int
-main ()
-{
-int i = PTHREAD_PRIO_INHERIT;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ax_cv_PTHREAD_PRIO_INHERIT=yes
-else
-  ax_cv_PTHREAD_PRIO_INHERIT=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
-$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
-        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
-
-$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
-
-fi
-
-        LIBS="$save_LIBS"
-        CFLAGS="$save_CFLAGS"
-
-        # More AIX lossage: compile with *_r variant
-        if test "x$GCC" != xyes; then
-            case $host_os in
-                aix*)
-                case "x/$CC" in #(
-  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
-    #handle absolute path differently from PATH based program lookup
-                   case "x$CC" in #(
-  x/*) :
-    if as_fn_executable_p ${CC}_r; then :
-  PTHREAD_CC="${CC}_r"
-fi ;; #(
-  *) :
-    for ac_prog in ${CC}_r
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PTHREAD_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$PTHREAD_CC"; then
-  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_PTHREAD_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
-if test -n "$PTHREAD_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
-$as_echo "$PTHREAD_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$PTHREAD_CC" && break
-done
-test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
- ;;
-esac ;; #(
-  *) :
-     ;;
-esac
-                ;;
-            esac
-        fi
-fi
-
-test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
-
-
-
-
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$ax_pthread_ok" = xyes; then
-
-$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-
-        :
 else
-        ax_pthread_ok=no
-
+  ac_cv_search_timer_create=no
 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
-
-
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
 fi
-
-if test "x$ax_pthread_ok" = "xyes"; then :
-
-$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_timer_create" >&5
+$as_echo "$ac_cv_search_timer_create" >&6; }
+ac_res=$ac_cv_search_timer_create
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-
-#### Check for libs ####
-
-# ISO
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5
-$as_echo_n "checking for library containing pow... " >&6; }
-if ${ac_cv_search_pow+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_setaffinity_np" >&5
+$as_echo_n "checking for library containing pthread_setaffinity_np... " >&6; }
+if ${ac_cv_search_pthread_setaffinity_np+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -23058,16 +22920,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char pow ();
+char pthread_setaffinity_np ();
 int
 main ()
 {
-return pow ();
+return pthread_setaffinity_np ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' m; do
+for ac_lib in '' pthread; do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
@@ -23075,35 +22937,33 @@ for ac_lib in '' m; do
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_pow=$ac_res
+  ac_cv_search_pthread_setaffinity_np=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if ${ac_cv_search_pow+:} false; then :
+  if ${ac_cv_search_pthread_setaffinity_np+:} false; then :
   break
 fi
 done
-if ${ac_cv_search_pow+:} false; then :
+if ${ac_cv_search_pthread_setaffinity_np+:} false; then :
 
 else
-  ac_cv_search_pow=no
+  ac_cv_search_pthread_setaffinity_np=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5
-$as_echo "$ac_cv_search_pow" >&6; }
-ac_res=$ac_cv_search_pow
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_setaffinity_np" >&5
+$as_echo "$ac_cv_search_pthread_setaffinity_np" >&6; }
+ac_res=$ac_cv_search_pthread_setaffinity_np
 if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-
-# POSIX
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sched_setscheduler" >&5
-$as_echo_n "checking for library containing sched_setscheduler... " >&6; }
-if ${ac_cv_search_sched_setscheduler+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_getname_np" >&5
+$as_echo_n "checking for library containing pthread_getname_np... " >&6; }
+if ${ac_cv_search_pthread_getname_np+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -23116,16 +22976,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char sched_setscheduler ();
+char pthread_getname_np ();
 int
 main ()
 {
-return sched_setscheduler ();
+return pthread_getname_np ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' rt; do
+for ac_lib in '' pthread; do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
@@ -23133,33 +22993,33 @@ for ac_lib in '' rt; do
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_sched_setscheduler=$ac_res
+  ac_cv_search_pthread_getname_np=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if ${ac_cv_search_sched_setscheduler+:} false; then :
+  if ${ac_cv_search_pthread_getname_np+:} false; then :
   break
 fi
 done
-if ${ac_cv_search_sched_setscheduler+:} false; then :
+if ${ac_cv_search_pthread_getname_np+:} false; then :
 
 else
-  ac_cv_search_sched_setscheduler=no
+  ac_cv_search_pthread_getname_np=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sched_setscheduler" >&5
-$as_echo "$ac_cv_search_sched_setscheduler" >&6; }
-ac_res=$ac_cv_search_sched_setscheduler
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_getname_np" >&5
+$as_echo "$ac_cv_search_pthread_getname_np" >&6; }
+ac_res=$ac_cv_search_pthread_getname_np
 if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
-$as_echo_n "checking for library containing dlopen... " >&6; }
-if ${ac_cv_search_dlopen+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_setname_np" >&5
+$as_echo_n "checking for library containing pthread_setname_np... " >&6; }
+if ${ac_cv_search_pthread_setname_np+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -23172,16 +23032,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char dlopen ();
+char pthread_setname_np ();
 int
 main ()
 {
-return dlopen ();
+return pthread_setname_np ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' dl; do
+for ac_lib in '' pthread; do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
@@ -23189,33 +23049,35 @@ for ac_lib in '' dl; do
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_dlopen=$ac_res
+  ac_cv_search_pthread_setname_np=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if ${ac_cv_search_dlopen+:} false; then :
+  if ${ac_cv_search_pthread_setname_np+:} false; then :
   break
 fi
 done
-if ${ac_cv_search_dlopen+:} false; then :
+if ${ac_cv_search_pthread_setname_np+:} false; then :
 
 else
-  ac_cv_search_dlopen=no
+  ac_cv_search_pthread_setname_np=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
-$as_echo "$ac_cv_search_dlopen" >&6; }
-ac_res=$ac_cv_search_dlopen
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_setname_np" >&5
+$as_echo "$ac_cv_search_pthread_setname_np" >&6; }
+ac_res=$ac_cv_search_pthread_setname_np
 if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shm_open" >&5
-$as_echo_n "checking for library containing shm_open... " >&6; }
-if ${ac_cv_search_shm_open+:} false; then :
+
+# BSD
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing connect" >&5
+$as_echo_n "checking for library containing connect... " >&6; }
+if ${ac_cv_search_connect+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -23228,16 +23090,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char shm_open ();
+char connect ();
 int
 main ()
 {
-return shm_open ();
+return connect ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' rt; do
+for ac_lib in '' socket; do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
@@ -23245,33 +23107,33 @@ for ac_lib in '' rt; do
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_shm_open=$ac_res
+  ac_cv_search_connect=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if ${ac_cv_search_shm_open+:} false; then :
+  if ${ac_cv_search_connect+:} false; then :
   break
 fi
 done
-if ${ac_cv_search_shm_open+:} false; then :
+if ${ac_cv_search_connect+:} false; then :
 
 else
-  ac_cv_search_shm_open=no
+  ac_cv_search_connect=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shm_open" >&5
-$as_echo "$ac_cv_search_shm_open" >&6; }
-ac_res=$ac_cv_search_shm_open
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_connect" >&5
+$as_echo "$ac_cv_search_connect" >&6; }
+ac_res=$ac_cv_search_connect
 if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop" >&5
-$as_echo_n "checking for library containing inet_ntop... " >&6; }
-if ${ac_cv_search_inet_ntop+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing backtrace" >&5
+$as_echo_n "checking for library containing backtrace... " >&6; }
+if ${ac_cv_search_backtrace+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -23284,16 +23146,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char inet_ntop ();
+char backtrace ();
 int
 main ()
 {
-return inet_ntop ();
+return backtrace ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' nsl; do
+for ac_lib in '' execinfo ubacktrace; do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
@@ -23301,33 +23163,66 @@ for ac_lib in '' nsl; do
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_inet_ntop=$ac_res
+  ac_cv_search_backtrace=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if ${ac_cv_search_inet_ntop+:} false; then :
+  if ${ac_cv_search_backtrace+:} false; then :
   break
 fi
 done
-if ${ac_cv_search_inet_ntop+:} false; then :
+if ${ac_cv_search_backtrace+:} false; then :
 
 else
-  ac_cv_search_inet_ntop=no
+  ac_cv_search_backtrace=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntop" >&5
-$as_echo "$ac_cv_search_inet_ntop" >&6; }
-ac_res=$ac_cv_search_inet_ntop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_backtrace" >&5
+$as_echo "$ac_cv_search_backtrace" >&6; }
+ac_res=$ac_cv_search_backtrace
 if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing timer_create" >&5
-$as_echo_n "checking for library containing timer_create... " >&6; }
-if ${ac_cv_search_timer_create+:} false; then :
+
+# Darwin/OS X
+if test "x$os_is_darwin" = "x1" ; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking looking for Apple CoreService Framework" >&5
+$as_echo_n "checking looking for Apple CoreService Framework... " >&6; }
+    ac_fn_c_check_header_mongrel "$LINENO" "CoreServices/CoreServices.h" "ac_cv_header_CoreServices_CoreServices_h" "$ac_includes_default"
+if test "x$ac_cv_header_CoreServices_CoreServices_h" = xyes; then :
+  LIBS="$LIBS -framework CoreServices"
+else
+  as_fn_error $? "CoreServices.h header file not found" "$LINENO" 5
+
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+
+$as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
+
+    HAVE_BONJOUR=1
+fi
+
+ if test "x$HAVE_BONJOUR" = x1; then
+  HAVE_BONJOUR_TRUE=
+  HAVE_BONJOUR_FALSE='#'
+else
+  HAVE_BONJOUR_TRUE='#'
+  HAVE_BONJOUR_FALSE=
+fi
+
+
+# Windows
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing regexec" >&5
+$as_echo_n "checking for library containing regexec... " >&6; }
+if ${ac_cv_search_regexec+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -23340,16 +23235,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char timer_create ();
+char regexec ();
 int
 main ()
 {
-return timer_create ();
+return regexec ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' rt; do
+for ac_lib in '' pcreposix; do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
@@ -23357,36 +23252,47 @@ for ac_lib in '' rt; do
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_timer_create=$ac_res
+  ac_cv_search_regexec=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if ${ac_cv_search_timer_create+:} false; then :
+  if ${ac_cv_search_regexec+:} false; then :
   break
 fi
 done
-if ${ac_cv_search_timer_create+:} false; then :
+if ${ac_cv_search_regexec+:} false; then :
 
 else
-  ac_cv_search_timer_create=no
+  ac_cv_search_regexec=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_timer_create" >&5
-$as_echo "$ac_cv_search_timer_create" >&6; }
-ac_res=$ac_cv_search_timer_create
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_regexec" >&5
+$as_echo "$ac_cv_search_regexec" >&6; }
+ac_res=$ac_cv_search_regexec
 if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_setaffinity_np" >&5
-$as_echo_n "checking for library containing pthread_setaffinity_np... " >&6; }
-if ${ac_cv_search_pthread_setaffinity_np+:} false; then :
+# This magic is needed so we do not needlessly add static libs to the win32  build, disabling its ability to make dlls.
+for ac_func in getopt_long
+do :
+  ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long"
+if test "x$ac_cv_func_getopt_long" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETOPT_LONG 1
+_ACEOF
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getopt_long in -liberty" >&5
+$as_echo_n "checking for getopt_long in -liberty... " >&6; }
+if ${ac_cv_lib_iberty_getopt_long+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-liberty  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -23396,312 +23302,362 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char pthread_setaffinity_np ();
+char getopt_long ();
 int
 main ()
 {
-return pthread_setaffinity_np ();
+return getopt_long ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' pthread; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_pthread_setaffinity_np=$ac_res
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_iberty_getopt_long=yes
+else
+  ac_cv_lib_iberty_getopt_long=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_pthread_setaffinity_np+:} false; then :
-  break
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iberty_getopt_long" >&5
+$as_echo "$ac_cv_lib_iberty_getopt_long" >&6; }
+if test "x$ac_cv_lib_iberty_getopt_long" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBIBERTY 1
+_ACEOF
+
+  LIBS="-liberty $LIBS"
+
+fi
+
 fi
 done
-if ${ac_cv_search_pthread_setaffinity_np+:} false; then :
 
-else
-  ac_cv_search_pthread_setaffinity_np=no
+
+
+#### Check for functions ####
+
+# ISO
+
+
+
+  for ac_func in $ac_func_list
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+done
+
+
+
+
+
+
+
+# POSIX
+for ac_header in vfork.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
+if test "x$ac_cv_header_vfork_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VFORK_H 1
+_ACEOF
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_setaffinity_np" >&5
-$as_echo "$ac_cv_search_pthread_setaffinity_np" >&6; }
-ac_res=$ac_cv_search_pthread_setaffinity_np
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+done
+
+for ac_func in fork vfork
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
 
 fi
+done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_getname_np" >&5
-$as_echo_n "checking for library containing pthread_getname_np... " >&6; }
-if ${ac_cv_search_pthread_getname_np+:} false; then :
+if test "x$ac_cv_func_fork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
+$as_echo_n "checking for working fork... " >&6; }
+if ${ac_cv_func_fork_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_fork_works=cross
+else
+  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 pthread_getname_np ();
+$ac_includes_default
 int
 main ()
 {
-return pthread_getname_np ();
+
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' pthread; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_pthread_getname_np=$ac_res
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_fork_works=yes
+else
+  ac_cv_func_fork_works=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_pthread_getname_np+:} false; then :
-  break
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-done
-if ${ac_cv_search_pthread_getname_np+:} false; then :
 
-else
-  ac_cv_search_pthread_getname_np=no
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_getname_np" >&5
-$as_echo "$ac_cv_search_pthread_getname_np" >&6; }
-ac_res=$ac_cv_search_pthread_getname_np
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
+$as_echo "$ac_cv_func_fork_works" >&6; }
 
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
 fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_setname_np" >&5
-$as_echo_n "checking for library containing pthread_setname_np... " >&6; }
-if ${ac_cv_search_pthread_setname_np+:} false; then :
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
+$as_echo_n "checking for working vfork... " >&6; }
+if ${ac_cv_func_vfork_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_vfork_works=cross
+else
+  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.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
 #ifdef __cplusplus
-extern "C"
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
 #endif
-char pthread_setname_np ();
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
 int
 main ()
 {
-return pthread_setname_np ();
-  ;
-  return 0;
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
 }
 _ACEOF
-for ac_lib in '' pthread; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_pthread_setname_np=$ac_res
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_vfork_works=yes
+else
+  ac_cv_func_vfork_works=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_pthread_setname_np+:} false; then :
-  break
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-done
-if ${ac_cv_search_pthread_setname_np+:} false; then :
 
-else
-  ac_cv_search_pthread_setname_np=no
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
+$as_echo "$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_setname_np" >&5
-$as_echo "$ac_cv_search_pthread_setname_np" >&6; }
-ac_res=$ac_cv_search_pthread_setname_np
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
+
+else
+
+$as_echo "#define vfork fork" >>confdefs.h
 
 fi
+if test "x$ac_cv_func_fork_works" = xyes; then
 
+$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
 
-# BSD
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing connect" >&5
-$as_echo_n "checking for library containing connect... " >&6; }
-if ${ac_cv_search_connect+:} false; then :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5
+$as_echo_n "checking type of array argument to getgroups... " >&6; }
+if ${ac_cv_type_getgroups+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test "$cross_compiling" = yes; then :
+  ac_cv_type_getgroups=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+/* Thanks to Mike Rendell for this test.  */
+$ac_includes_default
+#define NGID 256
+#undef MAX
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
 
-/* 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 connect ();
 int
 main ()
 {
-return connect ();
-  ;
-  return 0;
+  gid_t gidset[NGID];
+  int i, n;
+  union { gid_t gval; long int lval; }  val;
+
+  val.lval = -1;
+  for (i = 0; i < NGID; i++)
+    gidset[i] = val.gval;
+  n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
+		 gidset);
+  /* Exit non-zero if getgroups seems to require an array of ints.  This
+     happens when gid_t is short int but getgroups modifies an array
+     of ints.  */
+  return n > 0 && gidset[n] != val.gval;
 }
 _ACEOF
-for ac_lib in '' socket; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_connect=$ac_res
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_type_getgroups=gid_t
+else
+  ac_cv_type_getgroups=int
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_connect+:} false; then :
-  break
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-done
-if ${ac_cv_search_connect+:} false; then :
 
+if test $ac_cv_type_getgroups = cross; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then :
+  ac_cv_type_getgroups=gid_t
 else
-  ac_cv_search_connect=no
+  ac_cv_type_getgroups=int
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_connect" >&5
-$as_echo "$ac_cv_search_connect" >&6; }
-ac_res=$ac_cv_search_connect
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing backtrace" >&5
-$as_echo_n "checking for library containing backtrace... " >&6; }
-if ${ac_cv_search_backtrace+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$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 backtrace ();
-int
-main ()
-{
-return backtrace ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' execinfo ubacktrace; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_backtrace=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_backtrace+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_backtrace+:} false; then :
-
-else
-  ac_cv_search_backtrace=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_backtrace" >&5
-$as_echo "$ac_cv_search_backtrace" >&6; }
-ac_res=$ac_cv_search_backtrace
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+rm -f conftest*
 
 fi
-
-
-# Darwin/OS X
-if test "x$os_is_darwin" = "x1" ; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking looking for Apple CoreService Framework" >&5
-$as_echo_n "checking looking for Apple CoreService Framework... " >&6; }
-    ac_fn_c_check_header_mongrel "$LINENO" "CoreServices/CoreServices.h" "ac_cv_header_CoreServices_CoreServices_h" "$ac_includes_default"
-if test "x$ac_cv_header_CoreServices_CoreServices_h" = xyes; then :
-  LIBS="$LIBS -framework CoreServices"
-else
-  as_fn_error $? "CoreServices.h header file not found" "$LINENO" 5
-
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5
+$as_echo "$ac_cv_type_getgroups" >&6; }
 
+cat >>confdefs.h <<_ACEOF
+#define GETGROUPS_T $ac_cv_type_getgroups
+_ACEOF
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-
-$as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
-
-    HAVE_BONJOUR=1
-fi
+ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups"
+if test "x$ac_cv_func_getgroups" = xyes; then :
 
- if test "x$HAVE_BONJOUR" = x1; then
-  HAVE_BONJOUR_TRUE=
-  HAVE_BONJOUR_FALSE='#'
-else
-  HAVE_BONJOUR_TRUE='#'
-  HAVE_BONJOUR_FALSE=
 fi
 
 
-# Windows
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing regexec" >&5
-$as_echo_n "checking for library containing regexec... " >&6; }
-if ${ac_cv_search_regexec+:} false; then :
+# If we don't yet have getgroups, see if it's in -lbsd.
+# This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1.
+ac_save_LIBS=$LIBS
+if test $ac_cv_func_getgroups = no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5
+$as_echo_n "checking for getgroups in -lbsd... " >&6; }
+if ${ac_cv_lib_bsd_getgroups+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_func_search_save_LIBS=$LIBS
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -23711,124 +23667,85 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char regexec ();
+char getgroups ();
 int
 main ()
 {
-return regexec ();
+return getgroups ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' pcreposix; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_regexec=$ac_res
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bsd_getgroups=yes
+else
+  ac_cv_lib_bsd_getgroups=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_regexec+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_regexec+:} false; then :
-
-else
-  ac_cv_search_regexec=no
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_getgroups" >&5
+$as_echo "$ac_cv_lib_bsd_getgroups" >&6; }
+if test "x$ac_cv_lib_bsd_getgroups" = xyes; then :
+  GETGROUPS_LIB=-lbsd
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_regexec" >&5
-$as_echo "$ac_cv_search_regexec" >&6; }
-ac_res=$ac_cv_search_regexec
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-# This magic is needed so we do not needlessly add static libs to the win32  build, disabling its ability to make dlls.
-for ac_func in getopt_long
-do :
-  ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long"
-if test "x$ac_cv_func_getopt_long" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETOPT_LONG 1
-_ACEOF
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getopt_long in -liberty" >&5
-$as_echo_n "checking for getopt_long in -liberty... " >&6; }
-if ${ac_cv_lib_iberty_getopt_long+:} false; then :
+# Run the program to test the functionality of the system-supplied
+# getgroups function only if there is such a function.
+if test $ac_cv_func_getgroups = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5
+$as_echo_n "checking for working getgroups... " >&6; }
+if ${ac_cv_func_getgroups_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-liberty  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_getgroups_works=no
+else
+  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 getopt_long ();
+$ac_includes_default
 int
 main ()
 {
-return getopt_long ();
+/* On Ultrix 4.3, getgroups (0, 0) always fails.  */
+       return getgroups (0, 0) == -1;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_iberty_getopt_long=yes
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_getgroups_works=yes
 else
-  ac_cv_lib_iberty_getopt_long=no
+  ac_cv_func_getgroups_works=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iberty_getopt_long" >&5
-$as_echo "$ac_cv_lib_iberty_getopt_long" >&6; }
-if test "x$ac_cv_lib_iberty_getopt_long" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBIBERTY 1
-_ACEOF
 
-  LIBS="-liberty $LIBS"
 
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getgroups_works" >&5
+$as_echo "$ac_cv_func_getgroups_works" >&6; }
+else
+  ac_cv_func_getgroups_works=no
+fi
+if test $ac_cv_func_getgroups_works = yes; then
+
+$as_echo "#define HAVE_GETGROUPS 1" >>confdefs.h
 
 fi
-done
+LIBS=$ac_save_LIBS
 
 
 
-#### Check for functions ####
 
-# ISO
 
 
 
-  for ac_func in $ac_func_list
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
-done
 
 
 
@@ -23836,475 +23753,82 @@ done
 
 
 
-# POSIX
-for ac_header in vfork.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
-if test "x$ac_cv_header_vfork_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_VFORK_H 1
-_ACEOF
 
-fi
 
-done
 
-for ac_func in fork vfork
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
-done
 
-if test "x$ac_cv_func_fork" = xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
-$as_echo_n "checking for working fork... " >&6; }
-if ${ac_cv_func_fork_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_fork_works=cross
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
 
-	  /* By Ruediger Kuhlmann. */
-	  return fork () < 0;
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_fork_works=yes
-else
-  ac_cv_func_fork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
-$as_echo "$ac_cv_func_fork_works" >&6; }
 
-else
-  ac_cv_func_fork_works=$ac_cv_func_fork
-fi
-if test "x$ac_cv_func_fork_works" = xcross; then
-  case $host in
-    *-*-amigaos* | *-*-msdosdjgpp*)
-      # Override, as these systems have only a dummy fork() stub
-      ac_cv_func_fork_works=no
-      ;;
-    *)
-      ac_cv_func_fork_works=yes
-      ;;
-  esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
-fi
-ac_cv_func_vfork_works=$ac_cv_func_vfork
-if test "x$ac_cv_func_vfork" = xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
-$as_echo_n "checking for working vfork... " >&6; }
-if ${ac_cv_func_vfork_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_vfork_works=cross
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Thanks to Paul Eggert for this test.  */
-$ac_includes_default
-#include <sys/wait.h>
-#ifdef HAVE_VFORK_H
-# include <vfork.h>
-#endif
-/* On some sparc systems, changes by the child to local and incoming
-   argument registers are propagated back to the parent.  The compiler
-   is told about this with #include <vfork.h>, but some compilers
-   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
-   static variable whose address is put into a register that is
-   clobbered by the vfork.  */
-static void
-#ifdef __cplusplus
-sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
-#endif
-{
-  static pid_t child;
-  if (!child) {
-    child = vfork ();
-    if (child < 0) {
-      perror ("vfork");
-      _exit(2);
-    }
-    if (!child) {
-      arg = getpid();
-      write(-1, "", 0);
-      _exit (arg);
-    }
-  }
-}
 
-int
-main ()
-{
-  pid_t parent = getpid ();
-  pid_t child;
 
-  sparc_address_test (0);
 
-  child = vfork ();
 
-  if (child == 0) {
-    /* Here is another test for sparc vfork register problems.  This
-       test uses lots of local variables, at least as many local
-       variables as main has allocated so far including compiler
-       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
-       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
-       reuse the register of parent for one of the local variables,
-       since it will think that parent can't possibly be used any more
-       in this routine.  Assigning to the local variable will thus
-       munge parent in the parent process.  */
-    pid_t
-      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
-      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
-    /* Convince the compiler that p..p7 are live; otherwise, it might
-       use the same hardware register for all 8 local variables.  */
-    if (p != p1 || p != p2 || p != p3 || p != p4
-	|| p != p5 || p != p6 || p != p7)
-      _exit(1);
 
-    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
-       from child file descriptors.  If the child closes a descriptor
-       before it execs or exits, this munges the parent's descriptor
-       as well.  Test for this by closing stdout in the child.  */
-    _exit(close(fileno(stdout)) != 0);
-  } else {
-    int status;
-    struct stat st;
 
-    while (wait(&status) != child)
-      ;
-    return (
-	 /* Was there some problem with vforking?  */
-	 child < 0
 
-	 /* Did the child fail?  (This shouldn't happen.)  */
-	 || status
 
-	 /* Did the vfork/compiler bug occur?  */
-	 || parent != getpid()
 
-	 /* Did the file descriptor bug occur?  */
-	 || fstat(fileno(stdout), &st) != 0
-	 );
-  }
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_vfork_works=yes
-else
-  ac_cv_func_vfork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
-$as_echo "$ac_cv_func_vfork_works" >&6; }
 
-fi;
-if test "x$ac_cv_func_fork_works" = xcross; then
-  ac_cv_func_vfork_works=$ac_cv_func_vfork
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
-fi
 
-if test "x$ac_cv_func_vfork_works" = xyes; then
 
-$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
 
-else
 
-$as_echo "#define vfork fork" >>confdefs.h
 
-fi
-if test "x$ac_cv_func_fork_works" = xyes; then
 
-$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
 
-fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5
-$as_echo_n "checking type of array argument to getgroups... " >&6; }
-if ${ac_cv_type_getgroups+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_type_getgroups=cross
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Thanks to Mike Rendell for this test.  */
-$ac_includes_default
-#define NGID 256
-#undef MAX
-#define MAX(x, y) ((x) > (y) ? (x) : (y))
 
-int
-main ()
-{
-  gid_t gidset[NGID];
-  int i, n;
-  union { gid_t gval; long int lval; }  val;
 
-  val.lval = -1;
-  for (i = 0; i < NGID; i++)
-    gidset[i] = val.gval;
-  n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
-		 gidset);
-  /* Exit non-zero if getgroups seems to require an array of ints.  This
-     happens when gid_t is short int but getgroups modifies an array
-     of ints.  */
-  return n > 0 && gidset[n] != val.gval;
-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in mkfifo
+do :
+  ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo"
+if test "x$ac_cv_func_mkfifo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MKFIFO 1
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_type_getgroups=gid_t
+ HAVE_MKFIFO=1
 else
-  ac_cv_type_getgroups=int
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+  HAVE_MKFIFO=0
 fi
+done
 
-if test $ac_cv_type_getgroups = cross; then
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <unistd.h>
 
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then :
-  ac_cv_type_getgroups=gid_t
+ if test "x$HAVE_MKFIFO" = "x1"; then
+  HAVE_MKFIFO_TRUE=
+  HAVE_MKFIFO_FALSE='#'
 else
-  ac_cv_type_getgroups=int
+  HAVE_MKFIFO_TRUE='#'
+  HAVE_MKFIFO_FALSE=
 fi
-rm -f conftest*
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5
-$as_echo "$ac_cv_type_getgroups" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define GETGROUPS_T $ac_cv_type_getgroups
-_ACEOF
-
-
-ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups"
-if test "x$ac_cv_func_getgroups" = xyes; then :
-
-fi
-
-
-# If we don't yet have getgroups, see if it's in -lbsd.
-# This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1.
-ac_save_LIBS=$LIBS
-if test $ac_cv_func_getgroups = no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5
-$as_echo_n "checking for getgroups in -lbsd... " >&6; }
-if ${ac_cv_lib_bsd_getgroups+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd  $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 getgroups ();
-int
-main ()
-{
-return getgroups ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_bsd_getgroups=yes
-else
-  ac_cv_lib_bsd_getgroups=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_bsd_getgroups" >&5
-$as_echo "$ac_cv_lib_bsd_getgroups" >&6; }
-if test "x$ac_cv_lib_bsd_getgroups" = xyes; then :
-  GETGROUPS_LIB=-lbsd
-fi
-
-fi
-
-# Run the program to test the functionality of the system-supplied
-# getgroups function only if there is such a function.
-if test $ac_cv_func_getgroups = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5
-$as_echo_n "checking for working getgroups... " >&6; }
-if ${ac_cv_func_getgroups_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_getgroups_works=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-/* On Ultrix 4.3, getgroups (0, 0) always fails.  */
-       return getgroups (0, 0) == -1;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_func_getgroups_works=yes
-else
-  ac_cv_func_getgroups_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getgroups_works" >&5
-$as_echo "$ac_cv_func_getgroups_works" >&6; }
-else
-  ac_cv_func_getgroups_works=no
-fi
-if test $ac_cv_func_getgroups_works = yes; then
-
-$as_echo "#define HAVE_GETGROUPS 1" >>confdefs.h
-
-fi
-LIBS=$ac_save_LIBS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 
 
+# X/OPEN
 
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_func in mkfifo
-do :
-  ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo"
-if test "x$ac_cv_func_mkfifo" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_MKFIFO 1
-_ACEOF
- HAVE_MKFIFO=1
-else
-  HAVE_MKFIFO=0
-fi
-done
-
-
- if test "x$HAVE_MKFIFO" = "x1"; then
-  HAVE_MKFIFO_TRUE=
-  HAVE_MKFIFO_FALSE='#'
-else
-  HAVE_MKFIFO_TRUE='#'
-  HAVE_MKFIFO_FALSE=
-fi
-
-
-# X/OPEN
-
-
-
-
-# SUSv2
+# SUSv2
 
 
 
@@ -25923,6 +25447,13 @@ if test "${enable_oss_wrapper+set}" = set; then :
 fi
 
 
+
+# Check whether --with-pulsedsp-location was given.
+if test "${with_pulsedsp_location+set}" = set; then :
+  withval=$with_pulsedsp_location;
+fi
+
+
 if test "x$enable_oss_output" != "xno" -o "x$enable_oss_wrapper" != "xno"; then :
   for ac_header in sys/soundcard.h
 do :
@@ -25966,6 +25497,13 @@ else
   HAVE_OSS_WRAPPER=0
 fi
 
+if test "x$with_pulsedsp_location" != "x"; then :
+  PULSEDSP_LOCATION="$with_pulsedsp_location"
+else
+  PULSEDSP_LOCATION="\$(pkglibdir)"
+fi
+
+
 
  if test "x$HAVE_OSS_OUTPUT" = "x1"; then
   HAVE_OSS_OUTPUT_TRUE=
@@ -28868,170 +28406,653 @@ pulseconfdir="${sysconfdir}/pulse"
 
 
 cat >>confdefs.h <<_ACEOF
-#define PA_DEFAULT_CONFIG_DIR "$ax_define_dir"
+#define PA_DEFAULT_CONFIG_DIR "$ax_define_dir"
+_ACEOF
+
+  test "$prefix_NONE" && prefix=NONE
+  test "$exec_prefix_NONE" && exec_prefix=NONE
+
+
+#### Mac OSX specific stuff #####
+
+# Check whether --enable-mac-universal was given.
+if test "${enable_mac_universal+set}" = set; then :
+  enableval=$enable_mac_universal; enable_mac_universal=$enableval
+else
+  enable_mac_universal="no"
+fi
+
+
+
+# Check whether --with-mac-version-min was given.
+if test "${with_mac_version_min+set}" = set; then :
+  withval=$with_mac_version_min; mac_version_min=$withval
+else
+  mac_version_min="10.5"
+fi
+
+
+
+# Check whether --with-mac-sysroot was given.
+if test "${with_mac_sysroot+set}" = set; then :
+  withval=$with_mac_sysroot; mac_sysroot=$withval
+fi
+
+
+if test "x$os_is_darwin" = "x1" ; then
+    LDFLAGS="$LDFLAGS -mmacosx-version-min=$mac_version_min"
+    CFLAGS="$CFLAGS -mmacosx-version-min=$mac_version_min"
+
+    if test "x$mac_sysroot" != "x" ; then
+        LDFLAGS="$LDFLAGS -isysroot $mac_sysroot"
+        CFLAGS="$CFLAGS -isysroot $mac_sysroot"
+    fi
+
+    if test "x$enable_mac_universal" = "xyes" ; then
+        mac_arches="-arch i386 -arch x86_64"
+        LDFLAGS="$LDFLAGS $mac_arches"
+        CFLAGS="$CFLAGS $mac_arches"
+    fi
+fi
+
+# Check whether --enable-webrtc-aec was given.
+if test "${enable_webrtc_aec+set}" = set; then :
+  enableval=$enable_webrtc_aec;
+fi
+
+
+if test "x$enable_webrtc_aec" = "xyes" && test "$HAVE_CXX11" = "0"; then :
+  as_fn_error $? "*** webrtc-audio-processing needs C++11 support" "$LINENO" 5
+fi
+
+if test "x$enable_webrtc_aec" != "xno"; then :
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WEBRTC" >&5
+$as_echo_n "checking for WEBRTC... " >&6; }
+
+if test -n "$WEBRTC_CFLAGS"; then
+    pkg_cv_WEBRTC_CFLAGS="$WEBRTC_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" webrtc-audio-processing >= 0.2 \""; } >&5
+  ($PKG_CONFIG --exists --print-errors " webrtc-audio-processing >= 0.2 ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_WEBRTC_CFLAGS=`$PKG_CONFIG --cflags " webrtc-audio-processing >= 0.2 " 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$WEBRTC_LIBS"; then
+    pkg_cv_WEBRTC_LIBS="$WEBRTC_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" webrtc-audio-processing >= 0.2 \""; } >&5
+  ($PKG_CONFIG --exists --print-errors " webrtc-audio-processing >= 0.2 ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_WEBRTC_LIBS=`$PKG_CONFIG --libs " webrtc-audio-processing >= 0.2 " 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        WEBRTC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " webrtc-audio-processing >= 0.2 " 2>&1`
+        else
+	        WEBRTC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " webrtc-audio-processing >= 0.2 " 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$WEBRTC_PKG_ERRORS" >&5
+
+	HAVE_WEBRTC=0
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	HAVE_WEBRTC=0
+else
+	WEBRTC_CFLAGS=$pkg_cv_WEBRTC_CFLAGS
+	WEBRTC_LIBS=$pkg_cv_WEBRTC_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_WEBRTC=1
+fi
+else
+  HAVE_WEBRTC=0
+fi
+
+if test "x$enable_webrtc_aec" = "xyes" && test "x$HAVE_WEBRTC" = "x0"; then :
+  as_fn_error $? "*** webrtc-audio-processing library not found" "$LINENO" 5
+fi
+
+ if test "x$HAVE_WEBRTC" = "x1"; then
+  HAVE_WEBRTC_TRUE=
+  HAVE_WEBRTC_FALSE='#'
+else
+  HAVE_WEBRTC_TRUE='#'
+  HAVE_WEBRTC_FALSE=
+fi
+
+
+# Check whether --enable-adrian-aec was given.
+if test "${enable_adrian_aec+set}" = set; then :
+  enableval=$enable_adrian_aec;
+fi
+
+if test "x$enable_adrian_aec" != "xno"; then :
+  HAVE_ADRIAN_EC=1
+fi
+ if test "x$HAVE_ADRIAN_EC" = "x1"; then
+  HAVE_ADRIAN_EC_TRUE=
+  HAVE_ADRIAN_EC_FALSE='#'
+else
+  HAVE_ADRIAN_EC_TRUE='#'
+  HAVE_ADRIAN_EC_FALSE=
+fi
+
+
+
+#### Thread support ####
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5
+$as_echo_n "checking for thread local storage (TLS) class... " >&6; }
+  if ${ac_cv_tls+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    ax_tls_keywords="__thread __declspec(thread) none"
+    for ax_tls_keyword in $ax_tls_keywords; do
+       case $ax_tls_keyword in #(
+  none) :
+    ac_cv_tls=none ; break ;; #(
+  *) :
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+               static void
+               foo(void) {
+               static  $ax_tls_keyword  int bar;
+               exit(1);
+               }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_tls=$ax_tls_keyword ; break
+else
+  ac_cv_tls=none
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;;
+esac
+    done
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5
+$as_echo "$ac_cv_tls" >&6; }
+
+  if test "$ac_cv_tls" != "none"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define TLS $ac_cv_tls
+_ACEOF
+
+
+fi
+
+if test "$ac_cv_tls" = "__thread"; then :
+
+$as_echo "#define SUPPORT_TLS___THREAD 1" >>confdefs.h
+
+fi
+
+# Win32 build breaks with win32 pthread installed
+if test "x$os_is_win32" != "x1"; then :
+
+
+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
+
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
+$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
+        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 pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test x"$ax_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case ${host_os} in
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
+
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ;;
+esac
+
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
+
+        case $flag in
+                none)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+                ;;
+
+                -*)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
+$as_echo_n "checking whether pthreads work with $flag... " >&6; }
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+                pthread-config)
+                # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ax_pthread_config"; then
+  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ax_pthread_config="yes"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
+fi
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
+$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $attr; return attr /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  attr_name=$attr; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        done
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
+$as_echo "$attr_name" >&6; }
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $attr_name
 _ACEOF
 
-  test "$prefix_NONE" && prefix=NONE
-  test "$exec_prefix_NONE" && exec_prefix=NONE
-
+        fi
 
-#### Mac OSX specific stuff #####
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
+$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
+        flag=no
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
+        esac
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
+$as_echo "${flag}" >&6; }
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
 
-# Check whether --enable-mac-universal was given.
-if test "${enable_mac_universal+set}" = set; then :
-  enableval=$enable_mac_universal; enable_mac_universal=$enableval
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  enable_mac_universal="no"
-fi
-
 
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-# Check whether --with-mac-version-min was given.
-if test "${with_mac_version_min+set}" = set; then :
-  withval=$with_mac_version_min; mac_version_min=$withval
+                    #include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_PRIO_INHERIT=yes
 else
-  mac_version_min="10.5"
+  ax_cv_PTHREAD_PRIO_INHERIT=no
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
 
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
 
-# Check whether --with-mac-sysroot was given.
-if test "${with_mac_sysroot+set}" = set; then :
-  withval=$with_mac_sysroot; mac_sysroot=$withval
 fi
 
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
 
-if test "x$os_is_darwin" = "x1" ; then
-    LDFLAGS="$LDFLAGS -mmacosx-version-min=$mac_version_min"
-    CFLAGS="$CFLAGS -mmacosx-version-min=$mac_version_min"
-
-    if test "x$mac_sysroot" != "x" ; then
-        LDFLAGS="$LDFLAGS -isysroot $mac_sysroot"
-        CFLAGS="$CFLAGS -isysroot $mac_sysroot"
-    fi
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != xyes; then
+            case $host_os in
+                aix*)
+                case "x/$CC" in #(
+  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+    #handle absolute path differently from PATH based program lookup
+                   case "x$CC" in #(
+  x/*) :
+    if as_fn_executable_p ${CC}_r; then :
+  PTHREAD_CC="${CC}_r"
+fi ;; #(
+  *) :
+    for ac_prog in ${CC}_r
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PTHREAD_CC"; then
+  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PTHREAD_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-    if test "x$enable_mac_universal" = "xyes" ; then
-        mac_arches="-arch i386 -arch x86_64"
-        LDFLAGS="$LDFLAGS $mac_arches"
-        CFLAGS="$CFLAGS $mac_arches"
-    fi
 fi
-
-# Check whether --enable-webrtc-aec was given.
-if test "${enable_webrtc_aec+set}" = set; then :
-  enableval=$enable_webrtc_aec;
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-if test "x$enable_webrtc_aec" = "xyes" && test "$HAVE_CXX11" = "0"; then :
-  as_fn_error $? "*** webrtc-audio-processing needs C++11 support" "$LINENO" 5
+  test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+                ;;
+            esac
+        fi
 fi
 
-if test "x$enable_webrtc_aec" != "xno"; then :
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
 
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WEBRTC" >&5
-$as_echo_n "checking for WEBRTC... " >&6; }
 
-if test -n "$WEBRTC_CFLAGS"; then
-    pkg_cv_WEBRTC_CFLAGS="$WEBRTC_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" webrtc-audio-processing >= 0.2 \""; } >&5
-  ($PKG_CONFIG --exists --print-errors " webrtc-audio-processing >= 0.2 ") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_WEBRTC_CFLAGS=`$PKG_CONFIG --cflags " webrtc-audio-processing >= 0.2 " 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$WEBRTC_LIBS"; then
-    pkg_cv_WEBRTC_LIBS="$WEBRTC_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" webrtc-audio-processing >= 0.2 \""; } >&5
-  ($PKG_CONFIG --exists --print-errors " webrtc-audio-processing >= 0.2 ") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_WEBRTC_LIBS=`$PKG_CONFIG --libs " webrtc-audio-processing >= 0.2 " 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
 
 
 
-if test $pkg_failed = yes; then
-   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
 
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        WEBRTC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " webrtc-audio-processing >= 0.2 " 2>&1`
-        else
-	        WEBRTC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " webrtc-audio-processing >= 0.2 " 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$WEBRTC_PKG_ERRORS" >&5
+$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
 
-	HAVE_WEBRTC=0
-elif test $pkg_failed = untried; then
-     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	HAVE_WEBRTC=0
-else
-	WEBRTC_CFLAGS=$pkg_cv_WEBRTC_CFLAGS
-	WEBRTC_LIBS=$pkg_cv_WEBRTC_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	HAVE_WEBRTC=1
-fi
+        :
 else
-  HAVE_WEBRTC=0
-fi
+        ax_pthread_ok=no
 
-if test "x$enable_webrtc_aec" = "xyes" && test "x$HAVE_WEBRTC" = "x0"; then :
-  as_fn_error $? "*** webrtc-audio-processing library not found" "$LINENO" 5
 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
+
 
- if test "x$HAVE_WEBRTC" = "x1"; then
-  HAVE_WEBRTC_TRUE=
-  HAVE_WEBRTC_FALSE='#'
-else
-  HAVE_WEBRTC_TRUE='#'
-  HAVE_WEBRTC_FALSE=
 fi
 
+if test "x$ax_pthread_ok" = "xyes"; then :
 
-# Check whether --enable-adrian-aec was given.
-if test "${enable_adrian_aec+set}" = set; then :
-  enableval=$enable_adrian_aec;
-fi
+$as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
 
-if test "x$enable_adrian_aec" != "xno"; then :
-  HAVE_ADRIAN_EC=1
 fi
- if test "x$HAVE_ADRIAN_EC" = "x1"; then
-  HAVE_ADRIAN_EC_TRUE=
-  HAVE_ADRIAN_EC_FALSE='#'
-else
-  HAVE_ADRIAN_EC_TRUE='#'
-  HAVE_ADRIAN_EC_FALSE=
-fi
-
 
 
 
@@ -30023,7 +30044,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 pulseaudio $as_me 10.0, which was
+This file was extended by pulseaudio $as_me 10.99.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -30090,7 +30111,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="\\
-pulseaudio config.status 10.0
+pulseaudio config.status 10.99.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 65a9eba..77b5ff5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,11 +44,11 @@ AC_SUBST(PA_PROTOCOL_VERSION, 32)
 
 # The stable ABI for client applications, for the version info x:y:z
 # always will hold y=z
-AC_SUBST(LIBPULSE_VERSION_INFO, [20:1:20])
+AC_SUBST(LIBPULSE_VERSION_INFO, [20:2:20])
 
 # A simplified, synchronous, ABI-stable interface for client
 # applications, for the version info x:y:z always will hold y=z
-AC_SUBST(LIBPULSE_SIMPLE_VERSION_INFO, [1:0:1])
+AC_SUBST(LIBPULSE_SIMPLE_VERSION_INFO, [1:1:1])
 
 # The ABI-stable GLib adapter for client applications, for the version
 # info x:y:z always will hold y=z
@@ -436,7 +436,7 @@ AM_CONDITIONAL([HAVE_EVDEV], [test "x$HAVE_EVDEV" = "x1"])
 AC_CHECK_HEADERS_ONCE([sys/prctl.h])
 
 # Solaris
-AC_CHECK_HEADERS_ONCE([sys/filio.h])
+AC_CHECK_HEADERS_ONCE([sys/conf.h sys/filio.h])
 
 # Windows
 AC_CHECK_HEADERS_ONCE([windows.h winsock2.h ws2tcpip.h])
@@ -502,20 +502,6 @@ AC_CACHE_CHECK([whether $CC knows _Bool],
 AS_IF([test "$pulseaudio_cv__Bool" = "yes"], AC_DEFINE([HAVE_STD_BOOL], 1, [Have _Bool.]))
 
 
-#### Thread support ####
-
-AX_TLS
-AS_IF([test "$ac_cv_tls" = "__thread"],
-    AC_DEFINE([SUPPORT_TLS___THREAD], 1, [Define this if the compiler supports __thread for Thread-Local Storage]))
-
-# Win32 build breaks with win32 pthread installed
-AS_IF([test "x$os_is_win32" != "x1"],
-  [AX_PTHREAD])
-
-AS_IF([test "x$ax_pthread_ok" = "xyes"],
-    AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], 1, [Needed on Solaris]))
-
-
 #### Check for libs ####
 
 # ISO
@@ -773,6 +759,9 @@ AC_ARG_ENABLE([oss-output],
 AC_ARG_ENABLE([oss-wrapper],
     AS_HELP_STRING([--disable-oss-wrapper],[Disable optional OSS wrapper support]))
 
+AC_ARG_WITH([pulsedsp-location],
+    AS_HELP_STRING([--with-pulsedsp-location],[Specify location where OSS wrapper will be installed]))
+
 AS_IF([test "x$enable_oss_output" != "xno" -o "x$enable_oss_wrapper" != "xno"],
     [AC_CHECK_HEADERS([sys/soundcard.h], HAVE_OSS=1, HAVE_OSS=0)],
     HAVE_OSS=0)
@@ -788,7 +777,12 @@ AS_IF([test "x$enable_oss_wrapper" != "xno"],
     [AS_IF([test "x$HAVE_OSS" = "x1"], HAVE_OSS_WRAPPER=1, HAVE_OSS_WRAPPER=0)],
     HAVE_OSS_WRAPPER=0)
 
+AS_IF([test "x$with_pulsedsp_location" != "x"],
+    [PULSEDSP_LOCATION="$with_pulsedsp_location"],
+    [PULSEDSP_LOCATION="\$(pkglibdir)"])
+
 AC_SUBST(HAVE_OSS_OUTPUT)
+AC_SUBST(PULSEDSP_LOCATION)
 AM_CONDITIONAL([HAVE_OSS_OUTPUT], [test "x$HAVE_OSS_OUTPUT" = "x1"])
 AM_CONDITIONAL([HAVE_OSS_WRAPPER], [test "x$HAVE_OSS_WRAPPER" = "x1"])
 AS_IF([test "x$HAVE_OSS_OUTPUT" = "x1"], AC_DEFINE([HAVE_OSS_OUTPUT], 1, [Have OSS output?]))
@@ -1405,6 +1399,20 @@ AS_IF([test "x$enable_adrian_aec" != "xno"],
 AM_CONDITIONAL([HAVE_ADRIAN_EC], [test "x$HAVE_ADRIAN_EC" = "x1"])
 
 
+#### Thread support ####
+
+AX_TLS
+AS_IF([test "$ac_cv_tls" = "__thread"],
+    AC_DEFINE([SUPPORT_TLS___THREAD], 1, [Define this if the compiler supports __thread for Thread-Local Storage]))
+
+# Win32 build breaks with win32 pthread installed
+AS_IF([test "x$os_is_win32" != "x1"],
+  [AX_PTHREAD])
+
+AS_IF([test "x$ax_pthread_ok" = "xyes"],
+    AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], 1, [Needed on Solaris]))
+
+
 
 ###################################
 #            Output               #
diff --git a/coverity/model.c b/coverity/model.c
new file mode 100644
index 0000000..afe7ca5
--- /dev/null
+++ b/coverity/model.c
@@ -0,0 +1,18 @@
+/* Coverity Scan model
+ * Copyright (C) 2017 Peter Meerwald-Stadler <pmeerw at pmeerw.net>
+ *
+ * This is a modeling file for Coverity Scan which helps to avoid false
+ * positives and increase scanning accuracy by explaining code Coverity
+ * can't see (out of tree libraries); the model file must be uploaded by
+ * an admin to:
+ * https://scan.coverity.com/projects/pulseaudio?tab=analysis_settings
+ */
+
+void fail(void) {
+    __coverity_panic__();
+}
+
+void fail_unless(int x) {
+    if (!x)
+        __coverity_panic__();
+}
diff --git a/doxygen/Makefile.in b/doxygen/Makefile.in
index 08762f9..1d71779 100644
--- a/doxygen/Makefile.in
+++ b/doxygen/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -338,6 +338,7 @@ PREOPEN_MODS = @PREOPEN_MODS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+PULSEDSP_LOCATION = @PULSEDSP_LOCATION@
 RANLIB = @RANLIB@
 SBC_CFLAGS = @SBC_CFLAGS@
 SBC_LIBS = @SBC_LIBS@
diff --git a/man/Makefile.in b/man/Makefile.in
index 1590fcd..f6824be 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -385,6 +385,7 @@ PREOPEN_MODS = @PREOPEN_MODS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+PULSEDSP_LOCATION = @PULSEDSP_LOCATION@
 RANLIB = @RANLIB@
 SBC_CFLAGS = @SBC_CFLAGS@
 SBC_LIBS = @SBC_LIBS@
diff --git a/man/pactl.1 b/man/pactl.1
index 76783ef..1f024db 100644
--- a/man/pactl.1
+++ b/man/pactl.1
@@ -61,10 +61,10 @@ Move the specified playback stream (identified by its numerical index) to the sp
 Move the specified recording stream (identified by its numerical index) to the specified source (identified by its symbolic name or numerical index).
 .TP
 \fBsuspend-sink\f1 \fISINK\f1 \fI1|0\f1
-Suspend or resume the specified sink (which my be specified either by its symbolic name, or by its numeric index), depending whether 1 (suspend) or 0 (resume) is passed as last argument. Suspending a sink will pause all playback. Depending on the module implementing the sink this might have the effect that the underlying device is closed, making it available for other applications to use. The exact behaviour depends on the module.
+Suspend or resume the specified sink (which may be specified either by its symbolic name, or by its numeric index), depending whether 1 (suspend) or 0 (resume) is passed as last argument. Suspending a sink will pause all playback. Depending on the module implementing the sink this might have the effect that the underlying device is closed, making it available for other applications to use. The exact behaviour depends on the module.
 .TP
 \fBsuspend-source\f1 \fISOURCE\f1 \fI1|0\f1
-Suspend or resume the specified source (which my be specified either by its symbolic name, or by its numeric index), depending whether 1 (suspend) or 0 (resume) is passed as last argument. Suspending a source will pause all capturing. Depending on the module implementing the source this might have the effect that the underlying device is closed, making it available for other applications to use. The exact behaviour depends on the module.
+Suspend or resume the specified source (which may be specified either by its symbolic name, or by its numeric index), depending whether 1 (suspend) or 0 (resume) is passed as last argument. Suspending a source will pause all capturing. Depending on the module implementing the source this might have the effect that the underlying device is closed, making it available for other applications to use. The exact behaviour depends on the module.
 .TP
 \fBset-card-profile\f1 \fICARD\f1 \fIPROFILE\f1
 Set the specified card (identified by its symbolic name or numerical index) to the specified profile (identified by its symbolic name).
@@ -105,7 +105,7 @@ Set the mute status of the specified source (identified by its symbolic name or
 \fBset-sink-input-mute\f1 \fIINPUT\f1 \fI1|0|toggle\f1
 Set the mute status of the specified sink input (identified by its numerical index).
 .TP
-\fBset-source-output-mute\f1 \fIINPUT\f1 \fI1|0|toggle\f1
+\fBset-source-output-mute\f1 \fIOUTPUT\f1 \fI1|0|toggle\f1
 Set the mute status of the specified source output (identified by its numerical index).
 .TP
 \fBset-sink-formats\f1 \fISINK\f1 \fIFORMATS\f1
diff --git a/man/pactl.1.xml.in b/man/pactl.1.xml.in
index c2064ca..39569b6 100644
--- a/man/pactl.1.xml.in
+++ b/man/pactl.1.xml.in
@@ -130,7 +130,7 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
 
     <option>
       <p><opt>suspend-sink</opt> <arg>SINK</arg> <arg>1|0</arg></p>
-      <optdesc><p>Suspend or resume the specified sink (which my be
+      <optdesc><p>Suspend or resume the specified sink (which may be
       specified either by its symbolic name, or by its numeric index),
       depending whether 1 (suspend) or 0 (resume) is passed as last
       argument. Suspending a sink will pause all playback. Depending
@@ -142,7 +142,7 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
 
     <option>
       <p><opt>suspend-source</opt> <arg>SOURCE</arg> <arg>1|0</arg></p>
-      <optdesc><p>Suspend or resume the specified source (which my be
+      <optdesc><p>Suspend or resume the specified source (which may be
       specified either by its symbolic name, or by its numeric index),
       depending whether 1 (suspend) or 0 (resume) is passed as last
       argument. Suspending a source will pause all
@@ -233,7 +233,7 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
     </option>
 
     <option>
-      <p><opt>set-source-output-mute</opt> <arg>INPUT</arg> <arg>1|0|toggle</arg></p>
+      <p><opt>set-source-output-mute</opt> <arg>OUTPUT</arg> <arg>1|0|toggle</arg></p>
       <optdesc><p>Set the mute status of the specified source output (identified by its numerical index).</p></optdesc>
     </option>
 
diff --git a/man/pulse-daemon.conf.5 b/man/pulse-daemon.conf.5
index 98bc312..acc7a0e 100644
--- a/man/pulse-daemon.conf.5
+++ b/man/pulse-daemon.conf.5
@@ -30,8 +30,12 @@ For the settings that take a boolean argument the values \fBtrue\f1, \fByes\f1,
 .TP
 \fBresample-method=\f1 The resampling algorithm to use. Use one of \fBsrc-sinc-best-quality\f1, \fBsrc-sinc-medium-quality\f1, \fBsrc-sinc-fastest\f1, \fBsrc-zero-order-hold\f1, \fBsrc-linear\f1, \fBtrivial\f1, \fBspeex-float-N\f1, \fBspeex-fixed-N\f1, \fBffmpeg\f1, \fBsoxr-mq\f1, \fBsoxr-hq\f1, \fBsoxr-vhq\f1. See the documentation of libsamplerate and speex for explanations of the different src- and speex- methods, respectively. The method \fBtrivial\f1 is the most basic algorithm impl [...]
 .TP
+\fBavoid-resampling=\f1 If set, try to configure the device to avoid resampling. This only works on devices which support reconfiguring their rate, and when no other streams are already playing or capturing audio. The device will also not be configured to a rate less than the default and alternate sample rates.
+.TP
 \fBenable-remixing=\f1 If disabled never upmix or downmix channels to different channel maps. Instead, do a simple name-based matching only. Defaults to \fByes.\f1
 .TP
+\fBremixing-use-all-sink-channels=\f1 If enabled, use all sink channels when remixing. Otherwise, remix to the minimal set of sink channels needed to reproduce all of the source channels. (This has no effect on LFE remixing.) Defaults to \fByes\f1.
+.TP
 \fBenable-lfe-remixing=\f1 If disabled when upmixing or downmixing ignore LFE channels. When this option is disabled the output LFE channel will only get a signal when an input LFE channel is available as well. If no input LFE channel is available the output LFE channel will always be 0. If no output LFE channel is available the signal on the input LFE channel will be ignored. Defaults to \fBno\f1.
 .TP
 \fBlfe-crossover-freq=\f1 The crossover frequency (in Hz) for the LFE filter. Set it to 0 to disable the LFE filter. Defaults to 0.
diff --git a/man/pulse-daemon.conf.5.xml.in b/man/pulse-daemon.conf.5.xml.in
index 1c0de9e..f0550f3 100644
--- a/man/pulse-daemon.conf.5.xml.in
+++ b/man/pulse-daemon.conf.5.xml.in
@@ -124,12 +124,29 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
     </option>
 
     <option>
+      <p><opt>avoid-resampling=</opt> If set, try to configure the
+      device to avoid resampling. This only works on devices which
+      support reconfiguring their rate, and when no other streams are
+      already playing or capturing audio. The device will also not be
+      configured to a rate less than the default and alternate sample
+      rates.</p>
+    </option>
+
+    <option>
       <p><opt>enable-remixing=</opt> If disabled never upmix or
       downmix channels to different channel maps. Instead, do a simple
       name-based matching only. Defaults to <opt>yes.</opt></p>
     </option>
 
     <option>
+      <p><opt>remixing-use-all-sink-channels=</opt> If enabled, use
+      all sink channels when remixing. Otherwise, remix to the minimal
+      set of sink channels needed to reproduce all of the source
+      channels. (This has no effect on LFE remixing.) Defaults to
+      <opt>yes</opt>.</p>
+    </option>
+
+    <option>
       <p><opt>enable-lfe-remixing=</opt> If disabled when upmixing or
       downmixing ignore LFE channels. When this option is disabled the
       output LFE channel will only get a signal when an input LFE
diff --git a/man/pulseaudio.1 b/man/pulseaudio.1
index 4ca5431..57100ae 100644
--- a/man/pulseaudio.1
+++ b/man/pulseaudio.1
@@ -78,7 +78,7 @@ Disallow user requested exit
 Terminate the daemon when idle and the specified number of seconds passed.
 .TP
 \fB--scache-idle-time\f1\fI=SECS\f1
-Unload autoloaded samples from the cache when the haven't been used for the specified number of seconds.
+Unload autoloaded samples from the cache when they haven't been used for the specified number of seconds.
 .TP
 \fB--log-level\f1\fI[=LEVEL]\f1
 If an argument is passed, set the log level to the specified value, otherwise increase the configured verbosity level by one. The log levels are numerical from 0 to 4, corresponding to \fIerror\f1, \fIwarn\f1, \fInotice\f1, \fIinfo\f1, \fIdebug\f1. Default log level is \fInotice\f1, i.e. all log messages with lower log levels are printed: \fIerror\f1, \fIwarn\f1, \fInotice\f1.
diff --git a/man/pulseaudio.1.xml.in b/man/pulseaudio.1.xml.in
index 3187ef5..f732b8a 100644
--- a/man/pulseaudio.1.xml.in
+++ b/man/pulseaudio.1.xml.in
@@ -196,7 +196,7 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
     <option>
       <p><opt>--scache-idle-time</opt><arg>=SECS</arg></p>
 
-      <optdesc><p>Unload autoloaded samples from the cache when the
+      <optdesc><p>Unload autoloaded samples from the cache when they
       haven't been used for the specified number of
       seconds.</p></optdesc>
     </option>
diff --git a/po/LINGUAS b/po/LINGUAS
index e4eca60..5f0cb03 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -13,6 +13,7 @@ gl
 gu
 he
 hi
+hr
 hu
 id
 it
diff --git a/po/fr.po b/po/fr.po
index 4c0eac9..e859d65 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,415 +1,549 @@
 # French translation of pulseaudio.
 # Copyright (C) 2006-2008 Lennart Poettering
 # This file is distributed under the same license as the pulseaudio package.
-#
-#
+# 
+# 
 # Robert-André Mauchin <zebob.m at pengzone.org>, 2008.
 # Michaël Ughetto <telimektar esraonline com>, 2008.
 # Pablo Martin-Gomez <pablo.martin-gomez at laposte.net>, 2008.
 # Corentin Perard <corentin.perard at gmail.com>, 2009.
 # Thomas Canniot <mrtom at fedoraproject.org>, 2009, 2012.
-#
+# Sam Friedmann <sfriedma at redhat.com>, 2016. #zanata
+# Wim Taymans <wim.taymans at gmail.com>, 2016. #zanata
+# Edouard Duliege <edouard.duliege at gmail.com>, 2017. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: pulseaudio trunk\n"
+"Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-30 10:10+0000\n"
-"PO-Revision-Date: 2012-01-30 09:53+0000\n"
-"Last-Translator: Thomas Canniot <mrtom at fedoraproject.org>\n"
-"Language-Team: French <fedora-trans-fr at redhat.com>\n"
-"Language: fr\n"
+"POT-Creation-Date: 2015-10-06 16:57+0200\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2017-05-10 04:42-0400\n"
+"Last-Translator: Edouard Duliege <edouard.duliege at gmail.com>\n"
+"Language-Team: French <fedora-trans-fr at redhat.com>\n"
+"Language: fr\n"
 "Plural-Forms: nplurals=2; plural=n>1;\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Zanata 3.9.6\n"
 
-#: ../src/modules/alsa/alsa-util.c:1136 ../src/modules/alsa/alsa-util.c:1204
+#: ../src/daemon/cmdline.c:111
 #, c-format
 msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"%s [options]\n"
+"\n"
+"COMMANDS:\n"
+"  -h, --help                            Show this help\n"
+"      --version                         Show version\n"
+"      --dump-conf                       Dump default configuration\n"
+"      --dump-modules                    Dump list of available modules\n"
+"      --dump-resample-methods           Dump available resample methods\n"
+"      --cleanup-shm                     Cleanup stale shared memory segments\n"
+"      --start                           Start the daemon if it is not "
+"running\n"
+"  -k  --kill                            Kill a running daemon\n"
+"      --check                           Check for a running daemon (only "
+"returns exit code)\n"
+"\n"
+"OPTIONS:\n"
+"      --system[=BOOL]                   Run as system-wide instance\n"
+"  -D, --daemonize[=BOOL]                Daemonize after startup\n"
+"      --fail[=BOOL]                     Quit when startup fails\n"
+"      --high-priority[=BOOL]            Try to set high nice level\n"
+"                                        (only available as root, when SUID "
+"or\n"
+"                                        with elevated RLIMIT_NICE)\n"
+"      --realtime[=BOOL]                 Try to enable realtime scheduling\n"
+"                                        (only available as root, when SUID "
+"or\n"
+"                                        with elevated RLIMIT_RTPRIO)\n"
+"      --disallow-module-loading[=BOOL]  Disallow module user requested "
+"module\n"
+"                                        loading/unloading after startup\n"
+"      --disallow-exit[=BOOL]            Disallow user requested exit\n"
+"      --exit-idle-time=SECS             Terminate the daemon when idle and "
+"this\n"
+"                                        time passed\n"
+"      --scache-idle-time=SECS           Unload autoloaded samples when idle "
+"and\n"
+"                                        this time passed\n"
+"      --log-level[=LEVEL]               Increase or set verbosity level\n"
+"  -v  --verbose                         Increase the verbosity level\n"
+"      --log-target={auto,syslog,stderr,file:PATH,newfile:PATH}\n"
+"                                        Specify the log target\n"
+"      --log-meta[=BOOL]                 Include code location in log "
+"messages\n"
+"      --log-time[=BOOL]                 Include timestamps in log messages\n"
+"      --log-backtrace=FRAMES            Include a backtrace in log messages\n"
+"  -p, --dl-search-path=PATH             Set the search path for dynamic "
+"shared\n"
+"                                        objects (plugins)\n"
+"      --resample-method=METHOD          Use the specified resampling method\n"
+"                                        (See --dump-resample-methods for\n"
+"                                        possible values)\n"
+"      --use-pid-file[=BOOL]             Create a PID file\n"
+"      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
+"                                        platforms that support it.\n"
+"      --disable-shm[=BOOL]              Disable shared memory support.\n"
+"\n"
+"STARTUP SCRIPT:\n"
+"  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
+"with\n"
+"                                        the specified argument\n"
+"  -F, --file=FILENAME                   Run the specified script\n"
+"  -C                                    Open a command line on the running "
+"TTY\n"
+"                                        after startup\n"
+"\n"
+"  -n                                    Don't load default script file\n"
 msgstr ""
-"snd_pcm_avail() a retourné une valeur qui est exceptionnellement large : %lu "
-"octets (%lu ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA."
+"%s [options]\n"
+"\n"
+"COMMANDES :\n"
+"  -h, --help                            Afficher cette aide\n"
+"      --version                         Afficher la version\n"
+"      --dump-conf                       Vider la configuration par défaut\n"
+"      --dump-modules                    Vider la liste des modules "
+"disponibles\n"
+"      --dump-resample-methods           Vider les méthodes resample "
+"disponibles\n"
+"      --cleanup-shm                     Effacer les segments usés de la "
+"mémoire partagée\n"
+"      --start                           Lancer le démon s'il n'est pas en "
+"cours d'exécution\n"
+"  -k  --kill                            Kill un démon en cours d'exécution\n"
+"      --check                           Rechercher un démon en cours "
+"d'exécution (retourne uniquement un code de sortie)\n"
+"\n"
+"OPTIONS :\n"
+"      --system[=BOOL]                   Exécuter en tant qu'instance globale\n"
+"  -D, --daemonize[=BOOL]                Démoniser après le lancement\n"
+"      --fail[=BOOL]                     Quitter si le lancement échoue\n"
+"      --high-priority[=BOOL]            Tenter de définir un niveau nice "
+"élevé\n"
+"                                        (uniquement disponible en tant que "
+"root, lorsque SUID ou\n"
+"                                        avec RLIMIT_NICE élevé)\n"
+"      --realtime[=BOOL]                 Tenter d'activer la planification "
+"realtime\n"
+"                                        (uniquement disponible en tant que "
+"root, lorsque SUID ou\n"
+"                                        avec RLIMIT_RTPRIO élevé)\n"
+"      --disallow-module-loading[=BOOL]   Interdire le chargement ou "
+"déchargement de modules\n"
+"                                        requis par l'utilisateur de module "
+"après le lancement\n"
+"      --disallow-exit[=BOOL]            Interdire la sortie requise par "
+"l'utilisateur\n"
+"      --exit-idle-time=SECS             Quitter le démon lorsqu'inactif et "
+"que cette\n"
+"                                        période s'est écoulée\n"
+"      --scache-idle-time=SECS           Décharger les samples chargés "
+"automatiquement lorsqu'inactif et que cette\n"
+"                                        période s'est écoulée\n"
+"      --log-level[=LEVEL]               Augmenter ou définir le niveau de "
+"détail\n"
+"  -v  --verbose                         Augmenter le niveau de détail\n"
+"      --log-target={auto,syslog,stderr,file:PATH,newfile:PATH}\n"
+"                                        Indiquer la cible du journal\n"
+"      --log-meta[=BOOL]                 Inclure l'emplacement du code dans "
+"les messages journaux\n"
+"      --log-time[=BOOL]                 Inclure l'horodatage dans les "
+"messages journaux\n"
+"      --log-backtrace=FRAMES            Inclure un backtrace dans les "
+"messages journaux\n"
+"  -p, --dl-search-path=PATH             Définir le chemin de recherche pour "
+"les objets dynamiques\n"
+"                                        partagés (greffons)\n"
+"      --resample-method=METHOD          Utiliser la méthode resample "
+"spécifiée\n"
+"                                        (Voir --dump-resample-methods pour\n"
+"                                        les valeurs possibles)\n"
+"      --use-pid-file[=BOOL]             Créer un fichier PID\n"
+"      --no-cpu-limit[=BOOL]             Ne pas installer de limiteur de "
+"charge CPU sur\n"
+"                                        les platformes qui le prenne en "
+"charge\n"
+"      --disable-shm[=BOOL]              Désactiver la prise en charge de "
+"mémoire partagée.\n"
+"\n"
+"SCRIPT DE LANCEMENT :\n"
+"  -L, --load=\"MODULE ARGUMENTS\"         Charger le module du greffon "
+"spécifié avec\n"
+"                                        l'argument spécifié\n"
+"  -F, --file=FILENAME                   Lancer le script spécifié\n"
+"  -C                                    Ouvrir une ligne de commande sur le "
+"TTY en cours d'exécution\n"
+"                                        après le lancement\n"
+"\n"
+"  -n                                    Ne pas charger le fichier du script "
+"par défaut\n"
 
-#: ../src/modules/alsa/alsa-util.c:1179
-#, c-format
-msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s"
-"%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
-msgstr ""
-"snd_pcm_delay() a retourné une valeur qui est exceptionnellement large : %li "
-"octets (%s%lu ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA."
+#: ../src/daemon/cmdline.c:243
+msgid "--daemonize expects boolean argument"
+msgstr "--daemonize requiert un paramètre booléen"
 
-#: ../src/modules/alsa/alsa-util.c:1220
-#, fuzzy, c-format
-msgid ""
-"snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
-"%lu.\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
-msgstr ""
-"snd_pcm_avail() a retourné une valeur qui est exceptionnellement large : %lu "
-"octets (%lu ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA."
+#: ../src/daemon/cmdline.c:251
+msgid "--fail expects boolean argument"
+msgstr "--fail requiert un paramètre booléen"
 
-#: ../src/modules/alsa/alsa-util.c:1263
-#, c-format
+#: ../src/daemon/cmdline.c:262
 msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"--log-level expects log level argument (either numeric in range 0..4 or one "
+"of debug, info, notice, warn, error)."
 msgstr ""
-"snd_pcm_mmap_begin() a retourné une valeur qui est exceptionnellement "
-"large : %lu octets (%lu·ms).\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA."
+"--log-level requiert un paramètre de niveau de journal (soit numérique entre "
+"0 et 4, soit de débogage : info, notice, warn , error)."
 
-#: ../src/modules/module-always-sink.c:38
-msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "Garde toujours au moins une destination même si elle est vide"
+#: ../src/daemon/cmdline.c:274
+msgid "--high-priority expects boolean argument"
+msgstr "--high-priority requiert un paramètre booléen"
 
-#: ../src/modules/module-always-sink.c:82
-msgid "Dummy Output"
-msgstr "Sortie factice"
+#: ../src/daemon/cmdline.c:282
+msgid "--realtime expects boolean argument"
+msgstr "--realtime requiert un paramètre booléen"
 
-#: ../src/modules/module-ladspa-sink.c:48
-msgid "Virtual LADSPA sink"
-msgstr "Destination virtuelle LADSPA"
+#: ../src/daemon/cmdline.c:290
+msgid "--disallow-module-loading expects boolean argument"
+msgstr "--disallow-module-loading requiert un paramètre booléen"
+
+#: ../src/daemon/cmdline.c:298
+msgid "--disallow-exit expects boolean argument"
+msgstr "--disallow-exit requiert un paramètre booléen"
+
+#: ../src/daemon/cmdline.c:306
+msgid "--use-pid-file expects boolean argument"
+msgstr "--use-pid-file requiert un paramètre booléen"
 
-#: ../src/modules/module-ladspa-sink.c:52
-#, fuzzy
+#: ../src/daemon/cmdline.c:325
 msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma separated list of "
-"input control values> input_ladspaport_map=<comma separated list of input "
-"LADSPA port names> output_ladspaport_map=<comma separated list of output "
-"LADSPA port names> "
+"Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a "
+"valid file name 'file:<path>', 'newfile:<path>'."
 msgstr ""
-"sink_name=<nom de la destination> sink_properties=<propriétés de la "
-"destination> master=<nom de la destination à filter> format=<format de "
-"l'échantillon> rate=<taux d'échantillonage> channels=<nombre de canaux> "
-"channel_map=<plan des canaux> plugin=<nom de l'extension ladspa> "
-"label=<étiquette de l'extension ladspa> control=<liste des valeurs de "
-"contrôle de l'entrée séparées par des virgules>"
+"Cible du journal invalide : veuillez utiliser «  syslog », "
+"« journal »,« stderr » ou « auto », ou un nom de fichier valide « file:"
+"<path> », « newfile:<path> »."
 
-#: ../src/modules/module-null-sink.c:49
-msgid "Clocked NULL sink"
-msgstr "Horloge de la destination vide"
+#: ../src/daemon/cmdline.c:327
+msgid ""
+"Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
+"name 'file:<path>', 'newfile:<path>'."
+msgstr ""
+"Cible du journal invalide : veuillez utiliser «  syslog »,« stderr » ou "
+"« auto », ou un nom de fichier valide « file:<path> », « newfile:<path> »."
 
-#: ../src/modules/module-null-sink.c:284
-msgid "Null Output"
-msgstr "Sortie vide"
+#: ../src/daemon/cmdline.c:335
+msgid "--log-time expects boolean argument"
+msgstr "--log-time requiert un paramètre booléen"
 
-#: ../src/pulsecore/sink.c:3349
-msgid "Built-in Audio"
-msgstr "Audio interne"
+#: ../src/daemon/cmdline.c:343
+msgid "--log-meta expects boolean argument"
+msgstr "--log-meta requiert un paramètre booléen"
 
-#: ../src/pulsecore/sink.c:3354
-msgid "Modem"
-msgstr "Modem"
+#: ../src/daemon/cmdline.c:363
+#, c-format
+msgid "Invalid resample method '%s'."
+msgstr "Méthode de rééchantillonnage invalide « %s »."
 
-#: ../src/daemon/ltdl-bind-now.c:127
-msgid "Failed to find original lt_dlopen loader."
-msgstr "Échec lors de la recherche du chargeur lt_dlopen original."
+#: ../src/daemon/cmdline.c:370
+msgid "--system expects boolean argument"
+msgstr "--system requiert un paramètre booléen"
 
-#: ../src/daemon/ltdl-bind-now.c:132
-msgid "Failed to allocate new dl loader."
-msgstr "Échec lors de l'allocation du nouveau chargeur dl."
+#: ../src/daemon/cmdline.c:378
+msgid "--no-cpu-limit expects boolean argument"
+msgstr "--no-cpu-limit requiert un paramètre booléen"
 
-#: ../src/daemon/ltdl-bind-now.c:145
-msgid "Failed to add bind-now-loader."
-msgstr "Échec lors de l'ajout du chargeur bind-now."
+#: ../src/daemon/cmdline.c:386
+msgid "--disable-shm expects boolean argument"
+msgstr "--disable-shm requiert un paramètre booléen"
 
-#: ../src/daemon/main.c:139
+#: ../src/daemon/daemon-conf.c:258
 #, c-format
-msgid "Got signal %s."
-msgstr "Signal %s obtenu."
-
-#: ../src/daemon/main.c:166
-msgid "Exiting."
-msgstr "Fermeture."
+msgid "[%s:%u] Invalid log target '%s'."
+msgstr "[%s:%u] Cible du journal « %s » invalide."
 
-#: ../src/daemon/main.c:184
+#: ../src/daemon/daemon-conf.c:273
 #, c-format
-msgid "Failed to find user '%s'."
-msgstr "Impossible de trouver l'utilisateur « %s »."
+msgid "[%s:%u] Invalid log level '%s'."
+msgstr "[%s:%u] Niveau du journal « %s » invalide."
 
-#: ../src/daemon/main.c:189
+#: ../src/daemon/daemon-conf.c:288
 #, c-format
-msgid "Failed to find group '%s'."
-msgstr "Impossible de trouver le groupe « %s »."
+msgid "[%s:%u] Invalid resample method '%s'."
+msgstr "[%s:%u] Méthode de rééchantillonnage « %s » invalide."
 
-#: ../src/daemon/main.c:193
+#: ../src/daemon/daemon-conf.c:310
 #, c-format
-msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr "Utilisateur « %s ” (UID %lu) et groupe « %s » (GID %lu) trouvé."
+msgid "[%s:%u] Invalid rlimit '%s'."
+msgstr "[%s:%u] rlimit « %s » invalide."
 
-#: ../src/daemon/main.c:198
+#: ../src/daemon/daemon-conf.c:330
 #, c-format
-msgid "GID of user '%s' and of group '%s' don't match."
-msgstr ""
-"Le GID de l'utilisateur « %s » et du groupe « %s » ne sont pas identiques."
+msgid "[%s:%u] Invalid sample format '%s'."
+msgstr "[%s:%u] Format d'échantillon « %s » invalide."
 
-#: ../src/daemon/main.c:203
+#: ../src/daemon/daemon-conf.c:347 ../src/daemon/daemon-conf.c:364
 #, c-format
-msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr "Le dossier personnel de l'utilisateur « %s » n'est pas « %s », ignoré."
+msgid "[%s:%u] Invalid sample rate '%s'."
+msgstr "[%s:%u] Taux d'échantillonnage « %s » invalide."
 
-#: ../src/daemon/main.c:206 ../src/daemon/main.c:211
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
-msgid "Failed to create '%s': %s"
-msgstr "Échec lors de la création de « %s » : %s"
+msgid "[%s:%u] Invalid sample channels '%s'."
+msgstr "[%s:%u] Canaux d'échantillonnage « %s » invalide."
 
-#: ../src/daemon/main.c:218
+#: ../src/daemon/daemon-conf.c:404
 #, c-format
-msgid "Failed to change group list: %s"
-msgstr "Échec lors du changement de la liste du groupe : %s"
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Plan de canaux « %s » invalide."
 
-#: ../src/daemon/main.c:234
+#: ../src/daemon/daemon-conf.c:421
 #, c-format
-msgid "Failed to change GID: %s"
-msgstr "Échec lors du changement de GID : %s"
+msgid "[%s:%u] Invalid number of fragments '%s'."
+msgstr "[%s:%u] Nombre de fragments « %s » invalide."
 
-#: ../src/daemon/main.c:250
+#: ../src/daemon/daemon-conf.c:438
 #, c-format
-msgid "Failed to change UID: %s"
-msgstr "Échec lors du changement d'UID : %s"
-
-#: ../src/daemon/main.c:269
-msgid "Successfully dropped root privileges."
-msgstr "Les privilèges root ont été correctement abandonnés."
+msgid "[%s:%u] Invalid fragment size '%s'."
+msgstr "[%s:%u] Taille du fragment « %s » invalide."
 
-#: ../src/daemon/main.c:277
-msgid "System wide mode unsupported on this platform."
-msgstr "Mode système étendu non pris en charge sur cette plateforme."
+#: ../src/daemon/daemon-conf.c:455
+#, c-format
+msgid "[%s:%u] Invalid nice level '%s'."
+msgstr "[%s:%u] Niveau de priorité (nice) « %s » invalide."
 
-#: ../src/daemon/main.c:295
+#: ../src/daemon/daemon-conf.c:498
 #, c-format
-msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr "setrlimit(%s, (%u, %u)) a échoué : %s"
+msgid "[%s:%u] Invalid server type '%s'."
+msgstr "[%s:%u] Type de serveur « %s » invalide."
 
-#: ../src/daemon/main.c:496
-msgid "Failed to parse command line."
-msgstr "Échec lors de l'analyse de la ligne de commande"
+#: ../src/daemon/daemon-conf.c:611
+#, c-format
+msgid "Failed to open configuration file: %s"
+msgstr "Échec lors de l'ouverture du fichier de configuration : %s"
 
-#: ../src/daemon/main.c:529
+#: ../src/daemon/daemon-conf.c:627
 msgid ""
-"System mode refused for non-root user. Only starting the D-Bus server lookup "
-"service."
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
 msgstr ""
+"Le plan de canaux spécifié par défaut a un nombre de canaux différent du "
+"nombre spécifié par défaut."
 
-#: ../src/daemon/main.c:611
-msgid "Daemon not running"
-msgstr "Lé démon n'est pas lancé"
-
-#: ../src/daemon/main.c:613
+#: ../src/daemon/daemon-conf.c:714
 #, c-format
-msgid "Daemon running as PID %u"
-msgstr "Le démon est lancé avec le PID %u"
+msgid "### Read from configuration file: %s ###\n"
+msgstr "### Lecture à partir du fichier de configuration : %s ###\n"
 
-#: ../src/daemon/main.c:628
+#: ../src/daemon/dumpmodules.c:57
 #, c-format
-msgid "Failed to kill daemon: %s"
-msgstr "Impossible de tuer le démon : %s"
+msgid "Name: %s\n"
+msgstr "Nom : %s\n"
 
-#: ../src/daemon/main.c:657
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
-msgstr ""
-"Le programme n'est pas conçu pour être lancé en tant que root (sauf si --"
-"system est renseigné)."
+#: ../src/daemon/dumpmodules.c:60
+#, c-format
+msgid "No module information available\n"
+msgstr "Aucune information de module disponible\n"
 
-#: ../src/daemon/main.c:660
+#: ../src/daemon/dumpmodules.c:63
+#, c-format
+msgid "Version: %s\n"
+msgstr "Version : %s\n"
+
+#: ../src/daemon/dumpmodules.c:65
+#, c-format
+msgid "Description: %s\n"
+msgstr "Description : %s\n"
+
+#: ../src/daemon/dumpmodules.c:67
+#, c-format
+msgid "Author: %s\n"
+msgstr "Auteur : %s\n"
+
+#: ../src/daemon/dumpmodules.c:69
+#, c-format
+msgid "Usage: %s\n"
+msgstr "Utilisation : %s\n"
+
+#: ../src/daemon/dumpmodules.c:70
+#, c-format
+msgid "Load Once: %s\n"
+msgstr "Chargement unique : %s\n"
+
+#: ../src/daemon/dumpmodules.c:72
+#, c-format
+msgid "DEPRECATION WARNING: %s\n"
+msgstr "AVERTISSEMENT D'OBSOLESCENCE : %s\n"
+
+#: ../src/daemon/dumpmodules.c:76
+#, c-format
+msgid "Path: %s\n"
+msgstr "Chemin : %s\n"
+
+#: ../src/daemon/ltdl-bind-now.c:75
+#, c-format
+msgid "Failed to open module %s: %s"
+msgstr "Échec d'ouverture du module %s : %s"
+
+#: ../src/daemon/ltdl-bind-now.c:126
+msgid "Failed to find original lt_dlopen loader."
+msgstr "Échec lors de la recherche du chargeur lt_dlopen original."
+
+#: ../src/daemon/ltdl-bind-now.c:131
+msgid "Failed to allocate new dl loader."
+msgstr "Échec lors de l'allocation du nouveau chargeur dl."
+
+#: ../src/daemon/ltdl-bind-now.c:144
+msgid "Failed to add bind-now-loader."
+msgstr "Échec lors de l'ajout du chargeur bind-now."
+
+#: ../src/daemon/main.c:160
+#, c-format
+msgid "Failed to find user '%s'."
+msgstr "Impossible de trouver l'utilisateur « %s »."
+
+#: ../src/daemon/main.c:165
+#, c-format
+msgid "Failed to find group '%s'."
+msgstr "Impossible de trouver le groupe « %s »."
+
+#: ../src/daemon/main.c:174
+#, c-format
+msgid "GID of user '%s' and of group '%s' don't match."
+msgstr ""
+"Le GID de l'utilisateur « %s » et du groupe « %s » ne sont pas identiques."
+
+#: ../src/daemon/main.c:179
+#, c-format
+msgid "Home directory of user '%s' is not '%s', ignoring."
+msgstr ""
+"Le dossier personnel de l'utilisateur « %s » n'est pas « %s », ignoré."
+
+#: ../src/daemon/main.c:182 ../src/daemon/main.c:187
+#, c-format
+msgid "Failed to create '%s': %s"
+msgstr "Échec lors de la création de « %s » : %s"
+
+#: ../src/daemon/main.c:194
+#, c-format
+msgid "Failed to change group list: %s"
+msgstr "Échec lors du changement de la liste du groupe : %s"
+
+#: ../src/daemon/main.c:210
+#, c-format
+msgid "Failed to change GID: %s"
+msgstr "Échec lors du changement de GID : %s"
+
+#: ../src/daemon/main.c:226
+#, c-format
+msgid "Failed to change UID: %s"
+msgstr "Échec lors du changement d'UID : %s"
+
+#: ../src/daemon/main.c:255
+msgid "System wide mode unsupported on this platform."
+msgstr "Mode système étendu non pris en charge sur cette plateforme."
+
+#: ../src/daemon/main.c:484
+msgid "Failed to parse command line."
+msgstr "Échec lors de l'analyse de la ligne de commande"
+
+#: ../src/daemon/main.c:523
+msgid ""
+"System mode refused for non-root user. Only starting the D-Bus server lookup "
+"service."
+msgstr ""
+"Mode système refusé pour les utilisateurs non root. Lancement du service de "
+"recherche du serveur D-Bus uniquement."
+
+#: ../src/daemon/main.c:622
+#, c-format
+msgid "Failed to kill daemon: %s"
+msgstr "Impossible de tuer le démon : %s"
+
+#: ../src/daemon/main.c:651
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Le programme n'est pas conçu pour être lancé en tant que root (sauf si --"
+"system est renseigné)."
+
+#: ../src/daemon/main.c:654
 msgid "Root privileges required."
 msgstr "Les privilèges root sont nécessaires."
 
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:661
 msgid "--start not supported for system instances."
 msgstr "--start n'est pas pris en charge pour les instances système."
 
-#: ../src/daemon/main.c:707
+#: ../src/daemon/main.c:701
 #, c-format
 msgid "User-configured server at %s, refusing to start/autospawn."
 msgstr ""
+"Serveur configuré par l'utilisateur sur %s, refus du lancement start/"
+"autospawn."
 
-#: ../src/daemon/main.c:713
+#: ../src/daemon/main.c:707
 #, c-format
 msgid ""
 "User-configured server at %s, which appears to be local. Probing deeper."
 msgstr ""
+"Serveur configuré par l'utilisateur sur %s, qui semble être local. Analyse "
+"plus précise en cours."
 
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:712
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 "Le démon s'exécute en mode système, mais --disallow-exit n'est pas défini."
 
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:715
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 "Le démon s'exécute en mode système, mais --disallow-module-loading n'est pas "
 "défini."
 
-#: ../src/daemon/main.c:724
+#: ../src/daemon/main.c:718
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr "Le démon s'exécute en mode système, désactivation forcée du mode SHM."
 
-#: ../src/daemon/main.c:729
+#: ../src/daemon/main.c:723
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 "Le démon s'exécute en mode système, désactivation forcée de la fermeture "
 "après délai d'inactivité."
 
-#: ../src/daemon/main.c:757
+#: ../src/daemon/main.c:756
 msgid "Failed to acquire stdio."
 msgstr "Échec lors de l'acquisition de stdio."
 
-#: ../src/daemon/main.c:763 ../src/daemon/main.c:828
-#, fuzzy, c-format
+#: ../src/daemon/main.c:762 ../src/daemon/main.c:833
+#, c-format
 msgid "pipe() failed: %s"
-msgstr "Échec du tube : %s"
+msgstr "Échec de pipe() : %s"
 
-#: ../src/daemon/main.c:768 ../src/daemon/main.c:833
+#: ../src/daemon/main.c:767 ../src/daemon/main.c:838
 #, c-format
 msgid "fork() failed: %s"
 msgstr "Échec de fork() : %s"
 
-#: ../src/daemon/main.c:783 ../src/daemon/main.c:848 ../src/utils/pacat.c:550
+#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:567
 #, c-format
 msgid "read() failed: %s"
 msgstr "Échec de read() : %s"
 
-#: ../src/daemon/main.c:789
+#: ../src/daemon/main.c:788
 msgid "Daemon startup failed."
 msgstr "Échec lors du démarrage du démon."
 
-#: ../src/daemon/main.c:791
-msgid "Daemon startup successful."
-msgstr "Démarrage du démon réussi."
-
-#: ../src/daemon/main.c:816
-#, fuzzy, c-format
-msgid "setsid() failed: %s"
-msgstr "Échec de read() : %s"
-
-#: ../src/daemon/main.c:901
-#, c-format
-msgid "This is PulseAudio %s"
-msgstr "Pulseaudio %s"
-
-#: ../src/daemon/main.c:902
-#, c-format
-msgid "Compilation host: %s"
-msgstr "Hôte de compilation : %s"
-
-#: ../src/daemon/main.c:903 ../src/tests/resampler-test.c:418
-#, c-format
-msgid "Compilation CFLAGS: %s"
-msgstr "CFLAGS de compilation : %s"
-
-#: ../src/daemon/main.c:906
-#, c-format
-msgid "Running on host: %s"
-msgstr "Exécution sur l'hôte : %s"
-
-#: ../src/daemon/main.c:909
-#, c-format
-msgid "Found %u CPUs."
-msgstr "%u processeurs trouvés."
-
-#: ../src/daemon/main.c:911
-#, c-format
-msgid "Page size is %lu bytes"
-msgstr "La taille de la page est de %lu octets"
-
-#: ../src/daemon/main.c:914
-msgid "Compiled with Valgrind support: yes"
-msgstr "Compilé avec la prise en charge Valgrind : oui"
-
-#: ../src/daemon/main.c:916
-msgid "Compiled with Valgrind support: no"
-msgstr "Compilé avec la prise en charge Valgrind : non"
-
-#: ../src/daemon/main.c:919
+#: ../src/daemon/main.c:821
 #, c-format
-msgid "Running in valgrind mode: %s"
-msgstr "Exécution en mode valgrind : %s"
-
-#: ../src/daemon/main.c:921
-#, fuzzy, c-format
-msgid "Running in VM: %s"
-msgstr "Exécution sur l'hôte : %s"
-
-#: ../src/daemon/main.c:924
-msgid "Optimized build: yes"
-msgstr "Construction optimisée : oui"
-
-#: ../src/daemon/main.c:926
-msgid "Optimized build: no"
-msgstr "Construction optimisée : non"
-
-#: ../src/daemon/main.c:930
-msgid "NDEBUG defined, all asserts disabled."
-msgstr "NDEBUG défini, tous les messages d'erreur sont désactivés."
-
-#: ../src/daemon/main.c:932
-msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
-"FASTPATH défini, seuls les messages d'erreur fastpath ont été désactivés."
-
-#: ../src/daemon/main.c:934
-msgid "All asserts enabled."
-msgstr "Tous les messages d'erreur sont activés."
+msgid "setsid() failed: %s"
+msgstr "Échec de setsid() : %s"
 
-#: ../src/daemon/main.c:938
+#: ../src/daemon/main.c:948
 msgid "Failed to get machine ID"
 msgstr "Échec lors de l'obtention de l'ID de la machine"
 
-#: ../src/daemon/main.c:941
-#, c-format
-msgid "Machine ID is %s."
-msgstr "L'ID de la machine est %s."
-
-#: ../src/daemon/main.c:945
-#, c-format
-msgid "Session ID is %s."
-msgstr "L'ID de la session est %s."
-
-#: ../src/daemon/main.c:951
-#, c-format
-msgid "Using runtime directory %s."
-msgstr "Utilisation du répertoire d'exécution %s."
-
-#: ../src/daemon/main.c:956
-#, c-format
-msgid "Using state directory %s."
-msgstr "Utilisation du répertoire d'état %s."
-
-#: ../src/daemon/main.c:959
-#, c-format
-msgid "Using modules directory %s."
-msgstr "Utilisation du répertoire des modules %s."
-
-#: ../src/daemon/main.c:961
-#, c-format
-msgid "Running in system mode: %s"
-msgstr "Exécution en mode système : %s"
-
-#: ../src/daemon/main.c:964
+#: ../src/daemon/main.c:974
 msgid ""
 "OK, so you are running PA in system mode. Please note that you most likely "
 "shouldn't be doing that.\n"
@@ -427,1005 +561,1297 @@ msgstr ""
 "Documentation/User/WhatIsWrongWithSystemWide/ pour comprendre pourquoi le "
 "mode système est généralement une mauvaise idée."
 
-#: ../src/daemon/main.c:981
+#: ../src/daemon/main.c:991
 msgid "pa_pid_file_create() failed."
 msgstr "Échec de pa_pid_file_create()."
 
-#: ../src/daemon/main.c:991
-msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr ""
-"De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
-
-#: ../src/daemon/main.c:993
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
-msgstr ""
-"Eh mec, ton noyau il pue ! La recommandation d'aujourd'hui du patron est "
-"d'activer les horloges à haute résolution sur ton Linux."
-
-#: ../src/daemon/main.c:1011
+#: ../src/daemon/main.c:1021
 msgid "pa_core_new() failed."
 msgstr "Échec de pa_core_new()."
 
-#: ../src/daemon/main.c:1087
+#: ../src/daemon/main.c:1088
 msgid "Failed to initialize daemon."
 msgstr "Échec lors de l'initialisation du démon"
 
-#: ../src/daemon/main.c:1092
+#: ../src/daemon/main.c:1093
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Démarrage du démon sans aucun module chargé : refus de fonctionner."
 
-#: ../src/daemon/main.c:1130
-msgid "Daemon startup complete."
-msgstr "Démarrage du démon effectué."
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr "Système de son PulseAudio"
 
-#: ../src/daemon/main.c:1136
-msgid "Daemon shutdown initiated."
-msgstr "Fermeture du démon initiée."
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr "Démarrer le système de son PulseAudio"
 
-#: ../src/daemon/main.c:1167
-msgid "Daemon terminated."
-msgstr "Démon terminé."
+#: ../src/modules/alsa/alsa-mixer.c:2291
+msgid "Input"
+msgstr "Entrée"
 
-#: ../src/daemon/cmdline.c:113
-#, fuzzy, c-format
-msgid ""
-"%s [options]\n"
-"\n"
-"COMMANDS:\n"
-"  -h, --help                            Show this help\n"
-"      --version                         Show version\n"
-"      --dump-conf                       Dump default configuration\n"
-"      --dump-modules                    Dump list of available modules\n"
-"      --dump-resample-methods           Dump available resample methods\n"
-"      --cleanup-shm                     Cleanup stale shared memory "
-"segments\n"
-"      --start                           Start the daemon if it is not "
-"running\n"
-"  -k  --kill                            Kill a running daemon\n"
-"      --check                           Check for a running daemon (only "
-"returns exit code)\n"
-"\n"
-"OPTIONS:\n"
-"      --system[=BOOL]                   Run as system-wide instance\n"
-"  -D, --daemonize[=BOOL]                Daemonize after startup\n"
-"      --fail[=BOOL]                     Quit when startup fails\n"
-"      --high-priority[=BOOL]            Try to set high nice level\n"
-"                                        (only available as root, when SUID "
-"or\n"
-"                                        with elevated RLIMIT_NICE)\n"
-"      --realtime[=BOOL]                 Try to enable realtime scheduling\n"
-"                                        (only available as root, when SUID "
-"or\n"
-"                                        with elevated RLIMIT_RTPRIO)\n"
-"      --disallow-module-loading[=BOOL]  Disallow module user requested "
-"module\n"
-"                                        loading/unloading after startup\n"
-"      --disallow-exit[=BOOL]            Disallow user requested exit\n"
-"      --exit-idle-time=SECS             Terminate the daemon when idle and "
-"this\n"
-"                                        time passed\n"
-"      --scache-idle-time=SECS           Unload autoloaded samples when idle "
-"and\n"
-"                                        this time passed\n"
-"      --log-level[=LEVEL]               Increase or set verbosity level\n"
-"  -v                                    Increase the verbosity level\n"
-"      --log-target={auto,syslog,stderr,file:PATH}\n"
-"                                        Specify the log target\n"
-"      --log-meta[=BOOL]                 Include code location in log "
-"messages\n"
-"      --log-time[=BOOL]                 Include timestamps in log messages\n"
-"      --log-backtrace=FRAMES            Include a backtrace in log messages\n"
-"  -p, --dl-search-path=PATH             Set the search path for dynamic "
-"shared\n"
-"                                        objects (plugins)\n"
-"      --resample-method=METHOD          Use the specified resampling method\n"
-"                                        (See --dump-resample-methods for\n"
-"                                        possible values)\n"
-"      --use-pid-file[=BOOL]             Create a PID file\n"
-"      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
-"                                        platforms that support it.\n"
-"      --disable-shm[=BOOL]              Disable shared memory support.\n"
-"\n"
-"STARTUP SCRIPT:\n"
-"  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
-"with\n"
-"                                        the specified argument\n"
-"  -F, --file=FILENAME                   Run the specified script\n"
-"  -C                                    Open a command line on the running "
-"TTY\n"
-"                                        after startup\n"
-"\n"
-"  -n                                    Don't load default script file\n"
-msgstr ""
-"%s [options]\n"
-"\n"
-"COMMANDES :\n"
-"  -h, --help                            Affiche cette aide\n"
-"      --version                         Affiche la version\n"
-"      --dump-conf                       Affiche la configuration par défaut\n"
-"      --dump-modules                    Affiche la liste des modules "
-"disponibles\n"
-"      --dump-resample-methods           Affiche la liste des méthodes "
-"d'échantillonnage disponibles\n"
-"      --cleanup-shm                     Nettoie les segments de mémoire "
-"partagée périmés\n"
-"      --start                           Démarre le démon s'il n'est pas "
-"lancé\n"
-"  -k  --kill                            Tue un démon en cours d'exécution\n"
-"      --check                           Vérifie s'il existe un démon en "
-"cours d'exécution (ne retourne que le code de sortie)\n"
-"\n"
-"OPTIONS :\n"
-"      --system[=BOOL]                   Exécuter en tant qu'instance "
-"système\n"
-"  -D, --daemonize[=BOOL]                Définir en tant que démon après le "
-"démarrage\n"
-"      --fail[=BOOL]                     Quitte quand le démarrage échoue\n"
-"      --high-priority[=BOOL]            Tente de définir un niveau nice plus "
-"élevé\n"
-"                                        (seulement disponible en tant que "
-"root, avec le SUID ou\n"
-"                                        avec un RLIMIT_NICE élevé)\n"
-"      --realtime[=BOOL]                 Tente d'activer une planification en "
-"temps réel\n"
-"                                        (seulement disponible en tant que "
-"root, avec le SUID ou\n"
-"                                        ave un RLIMIT_RTPRIO élevé)\n"
-"      --disallow-module-loading[=BOOL]  Empêche les chargements/"
-"déchargements de module\n"
-"                                        demandés par l'utilisateur après le "
-"démarrage\n"
-"      --disallow-exit[=BOOL]            Empêche les fermetures demandées par "
-"l'utilisateur\n"
-"      --exit-idle-time=SECS             Termine le démon quand la durée "
-"d'inactivité \n"
-"                                        et ce temps se sont écoulés\n"
-"      --module-idle-time=SECS           Décharge les modules chargés "
-"automatiquement \n"
-"                                        quand la durée d'inactivité et ce "
-"temps se sont écoulés\n"
-"      --scache-idle-time=SECS           Décharge les échantillons chargés "
-"automatiquement \n"
-"                                        quand la durée d'inactivité et ce "
-"temps se sont écoulés\n"
-"      --log-level[=NIVEAU]              Augmente ou définit le niveau de "
-"verbosité\n"
-"  -v                                    Augmente le niveau de verbosité\n"
-"      --log-target={auto,syslog,stderr} Indique la cible du journal\n"
-"      --log-meta[=BOOL]                 Inclure la position du code dans les "
-"messages ·du journal\n"
-"      --log-time[=BOOL]                 Inclure la date dans les messages du "
-"journal\n"
-"      --log-backtrace=TRAMES            Inclure un traçage de la pile dans "
-"les messages du journal\n"
-"  -p, --dl-search-path=CHEMIN           Définit le chemin de recherche pour "
-"les objets dynamiques\n"
-"                                        partagés (extensions)\n"
-"      --resample-method=MÉTHODE         Utilise la méthode de "
-"rééchantillonnage indiquée\n"
-"                                        (Voir --dump-resample-methods pour\n"
-"                                        les valeurs possibles)\n"
-"      --use-pid-file[=BOOL]             Crée un fichier PID\n"
-"      --no-cpu-limit[=BOOL]             Ne pas installer de limiteur de "
-"charge CPU\n"
-"                                        sur les plateformes qui le "
-"supportent.\n"
-"      --disable-shm[=BOOL]              Désactive la prise en charge de la "
-"mémoire partagée.\n"
-"\n"
-"SCRIPT DE DÉMARRAGE :\n"
-"  -L, --load=\"PARAMÈTRES DU MODULE\"   Charge le module d'extension indiqué "
-"avec\n"
-"                                        le paramètre indiqué\n"
-"  -F, --file=NOMDEFICHIER               Exécute le script indiqué\n"
-"  -C                                    Ouvre une ligne de commande sur le "
-"TTY en cours \n"
-"                                        après le démarrage\n"
-"\n"
-"  -n                                    Ne pas charger les fichiers de "
-"scripts par défaut\n"
+#: ../src/modules/alsa/alsa-mixer.c:2292
+msgid "Docking Station Input"
+msgstr "Entrée de la station d'accueil"
 
-#: ../src/daemon/cmdline.c:244
-msgid "--daemonize expects boolean argument"
-msgstr "--daemonize requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2293
+msgid "Docking Station Microphone"
+msgstr "Microphone de la station d'accueil"
 
-#: ../src/daemon/cmdline.c:251
-msgid "--fail expects boolean argument"
-msgstr "--fail requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2294
+msgid "Docking Station Line In"
+msgstr "Entrée ligne de la station d'accueil"
 
-#: ../src/daemon/cmdline.c:261
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of debug, info, notice, warn, error)."
-msgstr ""
-"--log-level requiert un paramètre de niveau de journal (soit numérique entre "
-"0 et 4, soit de débogage : info, notice, warn , error)."
+#: ../src/modules/alsa/alsa-mixer.c:2295 ../src/modules/alsa/alsa-mixer.c:2380
+msgid "Line In"
+msgstr "Entrée ligne"
 
-#: ../src/daemon/cmdline.c:273
-msgid "--high-priority expects boolean argument"
-msgstr "--high-priority requiert un paramètre booléen"
-
-#: ../src/daemon/cmdline.c:280
-msgid "--realtime expects boolean argument"
-msgstr "--realtime requiert un paramètre booléen"
-
-#: ../src/daemon/cmdline.c:287
-msgid "--disallow-module-loading expects boolean argument"
-msgstr "--disallow-module-loading requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2296 ../src/modules/alsa/alsa-mixer.c:2374
+#: ../src/modules/bluetooth/module-bluez4-device.c:2102
+#: ../src/modules/bluetooth/module-bluez5-device.c:1710
+msgid "Microphone"
+msgstr "Microphone"
 
-#: ../src/daemon/cmdline.c:294
-msgid "--disallow-exit expects boolean argument"
-msgstr "--disallow-exit requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2297 ../src/modules/alsa/alsa-mixer.c:2375
+msgid "Front Microphone"
+msgstr "Microphone avant"
 
-#: ../src/daemon/cmdline.c:301
-msgid "--use-pid-file expects boolean argument"
-msgstr "--use-pid-file requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2298 ../src/modules/alsa/alsa-mixer.c:2376
+msgid "Rear Microphone"
+msgstr "Microphone arrière"
 
-#: ../src/daemon/cmdline.c:318
-#, fuzzy
-msgid ""
-"Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
-"name 'file:<path>'."
-msgstr ""
-"Cible du journal invalide : utilisez « syslog », « stderr » ou « auto »."
+#: ../src/modules/alsa/alsa-mixer.c:2299
+msgid "External Microphone"
+msgstr "Microphone externe"
 
-#: ../src/daemon/cmdline.c:325
-msgid "--log-time expects boolean argument"
-msgstr "--log-time requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2300 ../src/modules/alsa/alsa-mixer.c:2378
+msgid "Internal Microphone"
+msgstr "Microphone interne"
 
-#: ../src/daemon/cmdline.c:332
-msgid "--log-meta expects boolean argument"
-msgstr "--log-meta requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2301 ../src/modules/alsa/alsa-mixer.c:2381
+msgid "Radio"
+msgstr "Radio"
 
-#: ../src/daemon/cmdline.c:351
-#, c-format
-msgid "Invalid resample method '%s'."
-msgstr "Méthode de rééchantillonnage invalide « %s »."
+#: ../src/modules/alsa/alsa-mixer.c:2302 ../src/modules/alsa/alsa-mixer.c:2382
+msgid "Video"
+msgstr "Vidéo"
 
-#: ../src/daemon/cmdline.c:358
-msgid "--system expects boolean argument"
-msgstr "--system requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2303
+msgid "Automatic Gain Control"
+msgstr "Contrôle automatique du gain"
 
-#: ../src/daemon/cmdline.c:365
-msgid "--no-cpu-limit expects boolean argument"
-msgstr "--no-cpu-limit requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2304
+msgid "No Automatic Gain Control"
+msgstr "Pas de contrôle automatique du gain"
 
-#: ../src/daemon/cmdline.c:372
-msgid "--disable-shm expects boolean argument"
-msgstr "--disable-shm requiert un paramètre booléen"
+#: ../src/modules/alsa/alsa-mixer.c:2305
+msgid "Boost"
+msgstr "Boost"
 
-#: ../src/daemon/dumpmodules.c:59
-#, c-format
-msgid "Name: %s\n"
-msgstr "Nom : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2306
+msgid "No Boost"
+msgstr "Pas de boost"
 
-#: ../src/daemon/dumpmodules.c:62
-#, c-format
-msgid "No module information available\n"
-msgstr "Aucune information de module disponible\n"
+#: ../src/modules/alsa/alsa-mixer.c:2307
+msgid "Amplifier"
+msgstr "Amplificateur"
 
-#: ../src/daemon/dumpmodules.c:65
-#, c-format
-msgid "Version: %s\n"
-msgstr "Version : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2308
+msgid "No Amplifier"
+msgstr "Pas d'amplificateur"
 
-#: ../src/daemon/dumpmodules.c:67
-#, c-format
-msgid "Description: %s\n"
-msgstr "Description : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2309
+msgid "Bass Boost"
+msgstr "Booster de basses"
 
-#: ../src/daemon/dumpmodules.c:69
-#, c-format
-msgid "Author: %s\n"
-msgstr "Auteur : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2310
+msgid "No Bass Boost"
+msgstr "Pas de booster de basses"
 
-#: ../src/daemon/dumpmodules.c:71
-#, c-format
-msgid "Usage: %s\n"
-msgstr "Utilisation : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2311
+#: ../src/modules/bluetooth/module-bluez4-device.c:2107
+#: ../src/modules/bluetooth/module-bluez5-device.c:1717
+msgid "Speaker"
+msgstr "Haut-parleur"
 
-#: ../src/daemon/dumpmodules.c:72
-#, c-format
-msgid "Load Once: %s\n"
-msgstr "Chargement unique : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2312 ../src/modules/alsa/alsa-mixer.c:2384
+msgid "Headphones"
+msgstr "Casque audio"
 
-#: ../src/daemon/dumpmodules.c:74
-#, c-format
-msgid "DEPRECATION WARNING: %s\n"
-msgstr "AVERTISSEMENT D'OBSOLESCENCE : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2373
+msgid "Analog Input"
+msgstr "Entrée analogique"
 
-#: ../src/daemon/dumpmodules.c:78
-#, c-format
-msgid "Path: %s\n"
-msgstr "Chemin : %s\n"
+#: ../src/modules/alsa/alsa-mixer.c:2377
+msgid "Dock Microphone"
+msgstr "Microphone de la station d'accueil"
 
-# dans les lignes suivantes [%s = nom de fichier: %u = ligne dans celui-ci]
-#: ../src/daemon/daemon-conf.c:275
-#, c-format
-msgid "[%s:%u] Invalid log target '%s'."
-msgstr "[%s:%u] Cible du journal « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2379
+msgid "Headset Microphone"
+msgstr "Microphone casque"
 
-#: ../src/daemon/daemon-conf.c:291
-#, c-format
-msgid "[%s:%u] Invalid log level '%s'."
-msgstr "[%s:%u] Niveau du journal « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2383
+msgid "Analog Output"
+msgstr "Sortie analogique"
 
-#: ../src/daemon/daemon-conf.c:307
-#, c-format
-msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "[%s:%u] Méthode de rééchantillonnage « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2385
+msgid "LFE on Separate Mono Output"
+msgstr "Sortie analogique (LFE)"
 
-#: ../src/daemon/daemon-conf.c:330
-#, c-format
-msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "[%s:%u] rlimit « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2386
+msgid "Line Out"
+msgstr "Entrée ligne"
 
-#: ../src/daemon/daemon-conf.c:351
-#, c-format
-msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "[%s:%u] Format d'échantillon « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2387
+msgid "Analog Mono Output"
+msgstr "Sortie mono analogique"
 
-#: ../src/daemon/daemon-conf.c:370 ../src/daemon/daemon-conf.c:389
-#, c-format
-msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr "[%s:%u] Taux d'échantillonnage « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2388
+msgid "Speakers"
+msgstr "Haut-parleurs"
 
-#: ../src/daemon/daemon-conf.c:413
-#, c-format
-msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr "[%s:%u] Canaux d'échantillonnage « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2389
+msgid "HDMI / DisplayPort"
+msgstr "HDMI / DisplayPort"
 
-#: ../src/daemon/daemon-conf.c:431
-#, c-format
-msgid "[%s:%u] Invalid channel map '%s'."
-msgstr "[%s:%u] Plan de canaux « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2390
+msgid "Digital Output (S/PDIF)"
+msgstr "Sortie numérique (S/PDIF)"
 
-#: ../src/daemon/daemon-conf.c:449
-#, c-format
-msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr "[%s:%u] Nombre de fragments « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2391
+msgid "Digital Input (S/PDIF)"
+msgstr "Entrée numérique (S/PDIF)"
 
-#: ../src/daemon/daemon-conf.c:467
-#, c-format
-msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "[%s:%u] Taille du fragment « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:2392
+msgid "Digital Passthrough (S/PDIF)"
+msgstr "Relais numérique (S/PDIF)"
 
-#: ../src/daemon/daemon-conf.c:485
-#, c-format
-msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "[%s:%u] Niveau de priorité (nice) « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:3898
+msgid "Analog Mono"
+msgstr "Mono analogique"
 
-#: ../src/daemon/daemon-conf.c:528
-#, fuzzy, c-format
-msgid "[%s:%u] Invalid server type '%s'."
-msgstr "[%s:%u] Taux d'échantillonnage « %s » invalide."
+#: ../src/modules/alsa/alsa-mixer.c:3899
+msgid "Analog Stereo"
+msgstr "Stéréo analogique"
 
-#: ../src/daemon/daemon-conf.c:641
-#, c-format
-msgid "Failed to open configuration file: %s"
-msgstr "Échec lors de l'ouverture du fichier de configuration : %s"
+#: ../src/modules/alsa/alsa-mixer.c:3900
+msgid "Multichannel"
+msgstr "Multicanal"
 
-#: ../src/daemon/daemon-conf.c:657
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
-msgstr ""
-"Le plan de canaux spécifié par défaut a un nombre de canaux différent du "
-"nombre spécifié par défaut."
+#: ../src/modules/alsa/alsa-mixer.c:3901
+msgid "Analog Surround 2.1"
+msgstr "Surround analogique 2.1"
 
-#: ../src/daemon/daemon-conf.c:743
-#, c-format
-msgid "### Read from configuration file: %s ###\n"
-msgstr "### Lecture à partir du fichier de configuration : %s ###\n"
+#: ../src/modules/alsa/alsa-mixer.c:3902
+msgid "Analog Surround 3.0"
+msgstr "Surround analogique 3.0"
 
-#: ../src/daemon/caps.c:58
-msgid "Cleaning up privileges."
-msgstr "Nettoyage des privilèges."
+#: ../src/modules/alsa/alsa-mixer.c:3903
+msgid "Analog Surround 3.1"
+msgstr "Surround analogique 3.1"
 
-#: ../src/daemon/pulseaudio.desktop.in.h:1
-msgid "PulseAudio Sound System"
-msgstr "Système de son PulseAudio"
+#: ../src/modules/alsa/alsa-mixer.c:3904
+msgid "Analog Surround 4.0"
+msgstr "Surround analogique 4.0"
 
-#: ../src/daemon/pulseaudio.desktop.in.h:2
-msgid "Start the PulseAudio Sound System"
-msgstr "Démarrer le système de son PulseAudio"
+#: ../src/modules/alsa/alsa-mixer.c:3905
+msgid "Analog Surround 4.1"
+msgstr "Surround analogique 4.1"
 
-#: ../src/daemon/pulseaudio-kde.desktop.in.h:1
-#, fuzzy
-msgid "PulseAudio Sound System KDE Routing Policy"
-msgstr "Système de son PulseAudio"
+#: ../src/modules/alsa/alsa-mixer.c:3906
+msgid "Analog Surround 5.0"
+msgstr "Surround analogique 5.0"
 
-#: ../src/daemon/pulseaudio-kde.desktop.in.h:2
-#, fuzzy
-msgid "Start the PulseAudio Sound System with KDE Routing Policy"
-msgstr "Démarrer le système de son PulseAudio"
+#: ../src/modules/alsa/alsa-mixer.c:3907
+msgid "Analog Surround 5.1"
+msgstr "Surround analogique 5.1"
 
-#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:757
-msgid "Mono"
-msgstr "Mono"
+#: ../src/modules/alsa/alsa-mixer.c:3908
+msgid "Analog Surround 6.0"
+msgstr "Surround analogique 6.0"
 
-#: ../src/pulse/channelmap.c:107
-msgid "Front Center"
-msgstr "Avant centre"
+#: ../src/modules/alsa/alsa-mixer.c:3909
+msgid "Analog Surround 6.1"
+msgstr "Surround analogique 6.1"
 
-#: ../src/pulse/channelmap.c:108
-msgid "Front Left"
-msgstr "Avant gauche"
+#: ../src/modules/alsa/alsa-mixer.c:3910
+msgid "Analog Surround 7.0"
+msgstr "Surround analogique 7.0"
 
-#: ../src/pulse/channelmap.c:109
-msgid "Front Right"
-msgstr "Avant droit"
+#: ../src/modules/alsa/alsa-mixer.c:3911
+msgid "Analog Surround 7.1"
+msgstr "Surround analogique 7.1"
 
-#: ../src/pulse/channelmap.c:111
-msgid "Rear Center"
-msgstr "Arrière centre"
+#: ../src/modules/alsa/alsa-mixer.c:3912
+msgid "Digital Stereo (IEC958)"
+msgstr "Stéréo numérique (IEC958)"
 
-#: ../src/pulse/channelmap.c:112
-msgid "Rear Left"
-msgstr "Arrière gauche"
+#: ../src/modules/alsa/alsa-mixer.c:3913
+msgid "Digital Passthrough  (IEC958)"
+msgstr "Relais numérique (IEC958)"
 
-#: ../src/pulse/channelmap.c:113
-msgid "Rear Right"
-msgstr "Arrière droit"
+#: ../src/modules/alsa/alsa-mixer.c:3914
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr "Surround numérique 4.0 (IEC958/AC3)"
 
-#: ../src/pulse/channelmap.c:115
-msgid "Subwoofer"
-msgstr ""
+#: ../src/modules/alsa/alsa-mixer.c:3915
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr "Surround numérique 5.1 (IEC958/AC3)"
 
-#: ../src/pulse/channelmap.c:117
-msgid "Front Left-of-center"
-msgstr "Avant à gauche du centre"
+#: ../src/modules/alsa/alsa-mixer.c:3916
+msgid "Digital Surround 5.1 (IEC958/DTS)"
+msgstr "Surround numérique 5.1 (IEC958/DTS)"
 
-#: ../src/pulse/channelmap.c:118
-msgid "Front Right-of-center"
-msgstr "Avant à droite du centre"
+#: ../src/modules/alsa/alsa-mixer.c:3917
+msgid "Digital Stereo (HDMI)"
+msgstr "Stéréo numérique (HDMI)"
 
-#: ../src/pulse/channelmap.c:120
-msgid "Side Left"
-msgstr "Côté gauche"
+#: ../src/modules/alsa/alsa-mixer.c:3918
+msgid "Digital Surround 5.1 (HDMI)"
+msgstr "Surround numérique 5.1 (HDMI)"
 
-#: ../src/pulse/channelmap.c:121
-msgid "Side Right"
-msgstr "Côté droit"
+#: ../src/modules/alsa/alsa-mixer.c:4049
+msgid "Analog Mono Duplex"
+msgstr "Duplex Mono analogique"
 
-#: ../src/pulse/channelmap.c:123
-msgid "Auxiliary 0"
-msgstr "Auxiliaire 0"
+#: ../src/modules/alsa/alsa-mixer.c:4050
+msgid "Analog Stereo Duplex"
+msgstr "Duplex stéréo analogique"
 
-#: ../src/pulse/channelmap.c:124
-msgid "Auxiliary 1"
-msgstr "Auxiliaire 1"
+#: ../src/modules/alsa/alsa-mixer.c:4051
+msgid "Digital Stereo Duplex (IEC958)"
+msgstr "Duplex stéréo numérique (IEC958)"
 
-#: ../src/pulse/channelmap.c:125
-msgid "Auxiliary 2"
-msgstr "Auxiliaire 2"
+#: ../src/modules/alsa/alsa-mixer.c:4052
+#: ../src/modules/alsa/module-alsa-card.c:190
+#: ../src/modules/bluetooth/module-bluez4-device.c:2298
+#: ../src/modules/bluetooth/module-bluez5-device.c:1941
+msgid "Off"
+msgstr "Éteint"
 
-#: ../src/pulse/channelmap.c:126
-msgid "Auxiliary 3"
-msgstr "Auxiliaire 3"
+#: ../src/modules/alsa/alsa-mixer.c:4151
+#, c-format
+msgid "%s Output"
+msgstr "Sortie %s"
 
-#: ../src/pulse/channelmap.c:127
-msgid "Auxiliary 4"
-msgstr "Auxiliaire 4"
+#: ../src/modules/alsa/alsa-mixer.c:4159
+#, c-format
+msgid "%s Input"
+msgstr "Entrée %s"
 
-#: ../src/pulse/channelmap.c:128
+#: ../src/modules/alsa/alsa-sink.c:570 ../src/modules/alsa/alsa-sink.c:747
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA nous a réveillé pour écrire de nouvelles données à partir du "
+"périphérique, mais il n'y avait en fait rien à écrire !\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA.\n"
+"Nous avons été réveillés avec POLLOUT actif, cependant un snd_pcm_avail() "
+"ultérieur a retourné 0 ou une autre valeur < min_avail."
+
+#: ../src/modules/alsa/alsa-source.c:529 ../src/modules/alsa/alsa-source.c:680
+#, c-format
+msgid ""
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA nous a réveillé pour lire de nouvelles données à partir du "
+"périphérique, mais il n'y avait en fait rien à lire !\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA.\n"
+"Nous avons été réveillés avec POLLIN actif, cependant un snd_pcm_avail() "
+"ultérieur a retourné 0 ou une autre valeur < min_avail."
+
+#: ../src/modules/alsa/alsa-util.c:1134 ../src/modules/alsa/alsa-util.c:1209
+#, c-format
+msgid ""
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_avail() a retourné une valeur qui est exceptionnellement large : %lu "
+"octets (%lu ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA."
+
+#: ../src/modules/alsa/alsa-util.c:1184
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes "
+"(%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_delay() a retourné une valeur qui est exceptionnellement large : %li "
+"octets (%s%lu ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA."
+
+#: ../src/modules/alsa/alsa-util.c:1225
+#, c-format
+msgid ""
+"snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
+"%lu.\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_avail_delay() a retourné des valeurs inhabituelles : le délai %lu "
+"est inférieur au %lu disponible.\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA."
+
+#: ../src/modules/alsa/alsa-util.c:1268
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_mmap_begin() a retourné une valeur qui est exceptionnellement large :"
+" %lu octets (%lu·ms).\n"
+"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
+"rapporter ce problème aux développeurs d'ALSA."
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2092
+#: ../src/modules/bluetooth/module-bluez5-device.c:1700
+msgid "Headset"
+msgstr "Casque"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2097
+#: ../src/modules/bluetooth/module-bluez5-device.c:1705
+msgid "Handsfree"
+msgstr "Mains-libres"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2112
+#: ../src/modules/bluetooth/module-bluez5-device.c:1723
+msgid "Headphone"
+msgstr "Écouteurs"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2117
+#: ../src/modules/bluetooth/module-bluez5-device.c:1728
+msgid "Portable"
+msgstr "Portable"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2122
+#: ../src/modules/bluetooth/module-bluez5-device.c:1733
+msgid "Car"
+msgstr "Voiture"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2127
+#: ../src/modules/bluetooth/module-bluez5-device.c:1738
+msgid "HiFi"
+msgstr "HiFi"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2132
+#: ../src/modules/bluetooth/module-bluez5-device.c:1743
+msgid "Phone"
+msgstr "Téléphone"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2140
+#: ../src/modules/bluetooth/module-bluez5-device.c:1695
+#: ../src/modules/bluetooth/module-bluez5-device.c:1711
+#: ../src/modules/bluetooth/module-bluez5-device.c:1749
+msgid "Bluetooth Output"
+msgstr "Sortie Bluetooth"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2143
+#: ../src/modules/bluetooth/module-bluez5-device.c:1694
+#: ../src/modules/bluetooth/module-bluez5-device.c:1716
+#: ../src/modules/bluetooth/module-bluez5-device.c:1722
+#: ../src/modules/bluetooth/module-bluez5-device.c:1748
+msgid "Bluetooth Input"
+msgstr "Entrée Bluetooth"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2179
+msgid "High Fidelity Playback (A2DP)"
+msgstr "Lecture haute fidélité (A2DP)"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2190
+msgid "High Fidelity Capture (A2DP)"
+msgstr "Capture haute fidélité (A2DP)"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2201
+msgid "Telephony Duplex (HSP/HFP)"
+msgstr "Telephonie en duplex (HSP/HFP)"
+
+#: ../src/modules/bluetooth/module-bluez4-device.c:2213
+msgid "Handsfree Gateway"
+msgstr "Passerelle Mains-libres"
+
+#: ../src/modules/bluetooth/module-bluez5-device.c:1786
+msgid "High Fidelity Playback (A2DP Sink)"
+msgstr "Lecture haute fidélité (A2DP Sink)"
+
+#: ../src/modules/bluetooth/module-bluez5-device.c:1797
+msgid "High Fidelity Capture (A2DP Source)"
+msgstr "Capture haute fidélité (A2DP Source)"
+
+#: ../src/modules/bluetooth/module-bluez5-device.c:1808
+msgid "Headset Head Unit (HSP/HFP)"
+msgstr "Unité centrale du casque (HSP/HFP)"
+
+#: ../src/modules/bluetooth/module-bluez5-device.c:1820
+msgid "Headset Audio Gateway (HSP/HFP)"
+msgstr "Passerelle Audio du casque (HSP/HFP)"
+
+#: ../src/modules/echo-cancel/module-echo-cancel.c:61
+msgid ""
+"source_name=<name for the source> source_properties=<properties for the "
+"source> source_master=<name of source to filter> sink_name=<name for the "
+"sink> sink_properties=<properties for the sink> sink_master=<name of sink to "
+"filter> adjust_time=<how often to readjust rates in s> adjust_threshold=<how "
+"much drift to readjust after in ms> format=<sample format> rate=<sample "
+"rate> channels=<number of channels> channel_map=<channel map> aec_method="
+"<implementation to use> aec_args=<parameters for the AEC engine> save_aec="
+"<save AEC data in /tmp> autoloaded=<set if this module is being loaded "
+"automatically> use_volume_sharing=<yes or no> "
+msgstr ""
+"source_name=<nom de la source> source_properties=<propriétés de la source> "
+"source_master=<nom de la source à filtrer> sink_name=<nom de la  "
+"destination> sink_properties=<propriétés de la destination> sink_master=<nom "
+"de la destination à filtrer> adjust_time=<fréquence de réajustement des taux "
+"dans s> adjust_threshold=<décalage à réajuster en ms> format=<format des "
+"échantillons> rate=<taux d'échantillonnage> channels=<nombre de canaux> "
+"channel_map=<plan des canaux> aec_method=<implémentation à utiliser> "
+"aec_args=<paramètres du moteur AEC> save_aec=<enregistrer les données AEC "
+"dans /tmp> autoloaded=<définir si ce module est chargé automatiquement> "
+"use_volume_sharing=<oui ou non> "
+
+#. add on profile
+#: ../src/modules/macosx/module-coreaudio-device.c:754
+msgid "On"
+msgstr "Marche"
+
+#: ../src/modules/module-always-sink.c:36
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr "Garde toujours au moins une destination même si elle est vide"
+
+#: ../src/modules/module-always-sink.c:80
+msgid "Dummy Output"
+msgstr "Sortie factice"
+
+#: ../src/modules/module-equalizer-sink.c:70
+msgid "General Purpose Equalizer"
+msgstr "Égaliseur à but général"
+
+#: ../src/modules/module-equalizer-sink.c:74
+msgid ""
+"sink_name=<name of the sink> sink_properties=<properties for the sink> "
+"sink_master=<sink to connect to> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> autoloaded=<set if "
+"this module is being loaded automatically> use_volume_sharing=<yes or no> "
+msgstr ""
+"sink_name=<nom de la destination> sink_properties=<propriétés de la "
+"destination> sink_master=<destination à laquelle se connecter> format="
+"<format de l'échantillon> rate=<taux d'échantillonage> channels=<nombre de "
+"canaux> channel_map=<plan des canaux> autoloaded=<définir si ce module est "
+"chargé automatiquement> use_volume_sharing=<oui ou non>"
+
+#: ../src/modules/module-filter-apply.c:46
+msgid "autoclean=<automatically unload unused filters?>"
+msgstr "autoclean=<décharger automatiquement les filtres non utilisés ?>"
+
+#: ../src/modules/module-ladspa-sink.c:51
+msgid "Virtual LADSPA sink"
+msgstr "Destination virtuelle LADSPA"
+
+#: ../src/modules/module-ladspa-sink.c:55
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma separated list of "
+"input control values> input_ladspaport_map=<comma separated list of input "
+"LADSPA port names> output_ladspaport_map=<comma separated list of output "
+"LADSPA port names> "
+msgstr ""
+"sink_name=<nom de la destination> sink_properties=<propriétés de la "
+"destination> master=<nom de la destination à filter> format=<format de "
+"l'échantillon> rate=<taux d'échantillonnage> channels=<nombre de canaux> "
+"channel_map=<plan des canaux> plugin=<nom de l'extension ladspa> label="
+"<étiquette de l'extension ladspa> control=<liste des valeurs de contrôle de "
+"l'entrée séparées par des virgules>"
+
+#: ../src/modules/module-null-sink.c:47
+msgid "Clocked NULL sink"
+msgstr "Horloge de la destination vide"
+
+#: ../src/modules/module-null-sink.c:278
+msgid "Null Output"
+msgstr "Sortie vide"
+
+#: ../src/modules/module-rygel-media-server.c:508
+#: ../src/modules/module-rygel-media-server.c:546
+#: ../src/modules/module-rygel-media-server.c:905
+msgid "Output Devices"
+msgstr "Périphériques de sortie"
+
+#: ../src/modules/module-rygel-media-server.c:509
+#: ../src/modules/module-rygel-media-server.c:547
+#: ../src/modules/module-rygel-media-server.c:906
+msgid "Input Devices"
+msgstr "Périphériques d'entrée"
+
+#: ../src/modules/module-rygel-media-server.c:1063
+msgid "Audio on @HOSTNAME@"
+msgstr "Audio sur @HOSTNAME@"
+
+#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis at lazus'
+#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis at lazus'
+#: ../src/modules/module-tunnel-sink-new.c:307
+#: ../src/modules/module-tunnel-source-new.c:305
+#, c-format
+msgid "Tunnel for %s@%s"
+msgstr "Tunnel pour %s@%s"
+
+#: ../src/modules/module-tunnel-sink-new.c:517
+#: ../src/modules/module-tunnel-source-new.c:516
+#, c-format
+msgid "Tunnel to %s/%s"
+msgstr "Tunnel vers %s/%s"
+
+#: ../src/modules/module-virtual-surround-sink.c:47
+msgid "Virtual surround sink"
+msgstr "Destination surround virtuelle"
+
+#: ../src/modules/module-virtual-surround-sink.c:51
+msgid ""
+"sink_name=<name for the sink> sink_properties=<properties for the sink> "
+"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> use_volume_sharing="
+"<yes or no> force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav "
+msgstr ""
+"sink_name=<nom de la destination> sink_properties=<propriétés de la "
+"destination> master=<nom de la destination à filtrer> format=<format de "
+"l'échantillon> rate=<taux d'échantillonnage> channels=<nombre de canaux> "
+"channel_map=<plan des canaux> use_volume_sharing=<oui ou non> "
+"force_flat_volume=<oui ou non> hrir=/path/to/left_hrir.wav "
+
+#: ../src/modules/reserve-wrap.c:149
+msgid "PulseAudio Sound Server"
+msgstr "Serveur de son PulseAudio"
+
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:758
+msgid "Mono"
+msgstr "Mono"
+
+#: ../src/pulse/channelmap.c:105
+msgid "Front Center"
+msgstr "Avant centre"
+
+#: ../src/pulse/channelmap.c:106
+msgid "Front Left"
+msgstr "Avant gauche"
+
+#: ../src/pulse/channelmap.c:107
+msgid "Front Right"
+msgstr "Avant droit"
+
+#: ../src/pulse/channelmap.c:109
+msgid "Rear Center"
+msgstr "Arrière centre"
+
+#: ../src/pulse/channelmap.c:110
+msgid "Rear Left"
+msgstr "Arrière gauche"
+
+#: ../src/pulse/channelmap.c:111
+msgid "Rear Right"
+msgstr "Arrière droit"
+
+#: ../src/pulse/channelmap.c:113
+msgid "Subwoofer"
+msgstr "Caisson de basses"
+
+#: ../src/pulse/channelmap.c:115
+msgid "Front Left-of-center"
+msgstr "Avant à gauche du centre"
+
+#: ../src/pulse/channelmap.c:116
+msgid "Front Right-of-center"
+msgstr "Avant à droite du centre"
+
+#: ../src/pulse/channelmap.c:118
+msgid "Side Left"
+msgstr "Côté gauche"
+
+#: ../src/pulse/channelmap.c:119
+msgid "Side Right"
+msgstr "Côté droit"
+
+#: ../src/pulse/channelmap.c:121
+msgid "Auxiliary 0"
+msgstr "Auxiliaire 0"
+
+#: ../src/pulse/channelmap.c:122
+msgid "Auxiliary 1"
+msgstr "Auxiliaire 1"
+
+#: ../src/pulse/channelmap.c:123
+msgid "Auxiliary 2"
+msgstr "Auxiliaire 2"
+
+#: ../src/pulse/channelmap.c:124
+msgid "Auxiliary 3"
+msgstr "Auxiliaire 3"
+
+#: ../src/pulse/channelmap.c:125
+msgid "Auxiliary 4"
+msgstr "Auxiliaire 4"
+
+#: ../src/pulse/channelmap.c:126
 msgid "Auxiliary 5"
 msgstr "Auxiliaire 5"
 
-#: ../src/pulse/channelmap.c:129
+#: ../src/pulse/channelmap.c:127
 msgid "Auxiliary 6"
 msgstr "Auxiliaire 6"
 
-#: ../src/pulse/channelmap.c:130
+#: ../src/pulse/channelmap.c:128
 msgid "Auxiliary 7"
 msgstr "Auxiliaire 7"
 
-#: ../src/pulse/channelmap.c:131
+#: ../src/pulse/channelmap.c:129
 msgid "Auxiliary 8"
 msgstr "Auxiliaire 8"
 
-#: ../src/pulse/channelmap.c:132
+#: ../src/pulse/channelmap.c:130
 msgid "Auxiliary 9"
 msgstr "Auxiliaire 9"
 
-#: ../src/pulse/channelmap.c:133
+#: ../src/pulse/channelmap.c:131
 msgid "Auxiliary 10"
 msgstr "Auxiliaire 10"
 
-#: ../src/pulse/channelmap.c:134
+#: ../src/pulse/channelmap.c:132
 msgid "Auxiliary 11"
 msgstr "Auxiliaire 11"
 
-#: ../src/pulse/channelmap.c:135
+#: ../src/pulse/channelmap.c:133
 msgid "Auxiliary 12"
 msgstr "Auxiliaire 12"
 
-#: ../src/pulse/channelmap.c:136
+#: ../src/pulse/channelmap.c:134
 msgid "Auxiliary 13"
 msgstr "Auxiliaire 13"
 
-#: ../src/pulse/channelmap.c:137
+#: ../src/pulse/channelmap.c:135
 msgid "Auxiliary 14"
 msgstr "Auxiliaire 14"
 
-#: ../src/pulse/channelmap.c:138
+#: ../src/pulse/channelmap.c:136
 msgid "Auxiliary 15"
 msgstr "Auxiliaire 15"
 
-#: ../src/pulse/channelmap.c:139
+#: ../src/pulse/channelmap.c:137
 msgid "Auxiliary 16"
 msgstr "Auxiliaire 16"
 
-#: ../src/pulse/channelmap.c:140
+#: ../src/pulse/channelmap.c:138
 msgid "Auxiliary 17"
 msgstr "Auxiliaire 17"
 
-#: ../src/pulse/channelmap.c:141
+#: ../src/pulse/channelmap.c:139
 msgid "Auxiliary 18"
 msgstr "Auxiliaire 18"
 
-#: ../src/pulse/channelmap.c:142
+#: ../src/pulse/channelmap.c:140
 msgid "Auxiliary 19"
 msgstr "Auxiliaire 19"
 
-#: ../src/pulse/channelmap.c:143
+#: ../src/pulse/channelmap.c:141
 msgid "Auxiliary 20"
 msgstr "Auxiliaire 20"
 
-#: ../src/pulse/channelmap.c:144
+#: ../src/pulse/channelmap.c:142
 msgid "Auxiliary 21"
 msgstr "Auxiliaire 21"
 
-#: ../src/pulse/channelmap.c:145
+#: ../src/pulse/channelmap.c:143
 msgid "Auxiliary 22"
 msgstr "Auxiliaire 22"
 
-#: ../src/pulse/channelmap.c:146
+#: ../src/pulse/channelmap.c:144
 msgid "Auxiliary 23"
 msgstr "Auxiliaire 23"
 
-#: ../src/pulse/channelmap.c:147
+#: ../src/pulse/channelmap.c:145
 msgid "Auxiliary 24"
 msgstr "Auxiliaire 24"
 
-#: ../src/pulse/channelmap.c:148
+#: ../src/pulse/channelmap.c:146
 msgid "Auxiliary 25"
 msgstr "Auxiliaire 25"
 
-#: ../src/pulse/channelmap.c:149
+#: ../src/pulse/channelmap.c:147
 msgid "Auxiliary 26"
 msgstr "Auxiliaire 26"
 
-#: ../src/pulse/channelmap.c:150
+#: ../src/pulse/channelmap.c:148
 msgid "Auxiliary 27"
 msgstr "Auxiliaire 27"
 
-#: ../src/pulse/channelmap.c:151
+#: ../src/pulse/channelmap.c:149
 msgid "Auxiliary 28"
 msgstr "Auxiliaire 28"
 
-#: ../src/pulse/channelmap.c:152
+#: ../src/pulse/channelmap.c:150
 msgid "Auxiliary 29"
 msgstr "Auxiliaire 29"
 
-#: ../src/pulse/channelmap.c:153
+#: ../src/pulse/channelmap.c:151
 msgid "Auxiliary 30"
 msgstr "Auxiliaire 30"
 
-#: ../src/pulse/channelmap.c:154
+#: ../src/pulse/channelmap.c:152
 msgid "Auxiliary 31"
 msgstr "Auxiliaire 31"
 
-#: ../src/pulse/channelmap.c:156
+#: ../src/pulse/channelmap.c:154
 msgid "Top Center"
 msgstr "Centre haut"
 
-#: ../src/pulse/channelmap.c:158
+#: ../src/pulse/channelmap.c:156
 msgid "Top Front Center"
 msgstr "Avant centre haut"
 
-#: ../src/pulse/channelmap.c:159
+#: ../src/pulse/channelmap.c:157
 msgid "Top Front Left"
 msgstr "Avant gauche haut"
 
-#: ../src/pulse/channelmap.c:160
+#: ../src/pulse/channelmap.c:158
 msgid "Top Front Right"
 msgstr "Avant droit haut"
 
-#: ../src/pulse/channelmap.c:162
+#: ../src/pulse/channelmap.c:160
 msgid "Top Rear Center"
 msgstr "Arrière centre haut"
 
-#: ../src/pulse/channelmap.c:163
+#: ../src/pulse/channelmap.c:161
 msgid "Top Rear Left"
 msgstr "Arrière gauche haut"
 
-#: ../src/pulse/channelmap.c:164
+#: ../src/pulse/channelmap.c:162
 msgid "Top Rear Right"
 msgstr "Arrière droit haut"
 
-#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:169
-#: ../src/pulse/volume.c:297 ../src/pulse/volume.c:323
-#: ../src/pulse/volume.c:343 ../src/pulse/volume.c:373
-#: ../src/pulse/format.c:125
+#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:121
+#: ../src/pulse/sample.c:175 ../src/pulse/volume.c:294
+#: ../src/pulse/volume.c:320 ../src/pulse/volume.c:340
+#: ../src/pulse/volume.c:372 ../src/pulse/volume.c:412
+#: ../src/pulse/volume.c:431
 msgid "(invalid)"
 msgstr "(invalide)"
 
-#: ../src/pulse/channelmap.c:761
+#: ../src/pulse/channelmap.c:762
 msgid "Stereo"
 msgstr "Stéréo"
 
-#: ../src/pulse/channelmap.c:766
+#: ../src/pulse/channelmap.c:767
 msgid "Surround 4.0"
 msgstr "Surround 4.0"
 
-#: ../src/pulse/channelmap.c:772
+#: ../src/pulse/channelmap.c:773
 msgid "Surround 4.1"
 msgstr "Surround 4.1"
 
-#: ../src/pulse/channelmap.c:778
+#: ../src/pulse/channelmap.c:779
 msgid "Surround 5.0"
 msgstr "Surround 5.0"
 
-#: ../src/pulse/channelmap.c:784
+#: ../src/pulse/channelmap.c:785
 msgid "Surround 5.1"
 msgstr "Surround 5.1"
 
-#: ../src/pulse/channelmap.c:791
+#: ../src/pulse/channelmap.c:792
 msgid "Surround 7.1"
 msgstr "Surround 7.1"
 
-#: ../src/pulse/error.c:40
+#: ../src/pulse/client-conf-x11.c:53 ../src/utils/pax11publish.c:97
+msgid "xcb_connect() failed"
+msgstr "Échec de xcb_connect()"
+
+#: ../src/pulse/client-conf-x11.c:58 ../src/utils/pax11publish.c:102
+msgid "xcb_connection_has_error() returned true"
+msgstr "xcb_connection_has_error() a retourné une valeur true"
+
+#: ../src/pulse/client-conf-x11.c:94
+msgid "Failed to parse cookie data"
+msgstr "Échec lors de l'analyse des données du cookie"
+
+#: ../src/pulse/context.c:656
+#, c-format
+msgid "fork(): %s"
+msgstr "fork() : %s"
+
+#: ../src/pulse/context.c:711
+#, c-format
+msgid "waitpid(): %s"
+msgstr "waitpid() : %s"
+
+#: ../src/pulse/context.c:1412
+#, c-format
+msgid "Received message for unknown extension '%s'"
+msgstr "Message reçu pour une extension inconnue « %s »"
+
+#: ../src/pulse/direction.c:37
+msgid "input"
+msgstr "entrée"
+
+#: ../src/pulse/direction.c:39
+msgid "output"
+msgstr "sortie"
+
+#: ../src/pulse/direction.c:41
+msgid "bidirectional"
+msgstr "bidirectionnel"
+
+#: ../src/pulse/direction.c:43
+msgid "invalid"
+msgstr "non valide"
+
+#: ../src/pulsecore/core-util.c:1820
+#, c-format
+msgid ""
+"XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
+"e g happen if you try to connect to a non-root PulseAudio as a root user, "
+"over the native protocol. Don't do that.)"
+msgstr ""
+"XDG_RUNTIME_DIR (%s) ne nous appartient pas (uid %d), mais appartient à uid "
+"%d! (Ceci peut se produire si par exemple vous tentez de vous connecter à un "
+"PulseAudio non root en tant qu'utilisateur root sur le protocole natif. "
+"Veuillez ne pas faire cela.)"
+
+#: ../src/pulsecore/core-util.h:93
+msgid "yes"
+msgstr "oui"
+
+#: ../src/pulsecore/core-util.h:93
+msgid "no"
+msgstr "non"
+
+#: ../src/pulsecore/lock-autospawn.c:141 ../src/pulsecore/lock-autospawn.c:227
+msgid "Cannot access autospawn lock."
+msgstr "Impossible d'accèder au verrou autonome."
+
+#: ../src/pulsecore/log.c:153
+#, c-format
+msgid "Failed to open target file '%s'."
+msgstr "Échec de l'ouverture du fichier cible « %s »."
+
+#: ../src/pulsecore/log.c:176
+#, c-format
+msgid ""
+"Tried to open target file '%s', '%s.1', '%s.2' ... '%s.%d', but all failed."
+msgstr ""
+"Tentative d'ouvrir le fichier cible « %s », « %s.1 », « %s.2 » ... « %s."
+"%d », mais tout a échoué."
+
+#: ../src/pulsecore/log.c:631
+msgid "Invalid log target."
+msgstr "Cible du journal non valide."
+
+#: ../src/pulsecore/sink.c:3427
+msgid "Built-in Audio"
+msgstr "Audio interne"
+
+#: ../src/pulsecore/sink.c:3432
+msgid "Modem"
+msgstr "Modem"
+
+#: ../src/pulse/error.c:38
 msgid "OK"
 msgstr "OK"
 
-#: ../src/pulse/error.c:41
+#: ../src/pulse/error.c:39
 msgid "Access denied"
 msgstr "Accès refusé"
 
-#: ../src/pulse/error.c:42
+#: ../src/pulse/error.c:40
 msgid "Unknown command"
 msgstr "Commande inconnue"
 
-#: ../src/pulse/error.c:43
+#: ../src/pulse/error.c:41
 msgid "Invalid argument"
 msgstr "Paramètre invalide"
 
-#: ../src/pulse/error.c:44
+#: ../src/pulse/error.c:42
 msgid "Entity exists"
 msgstr "L'entité existe"
 
-#: ../src/pulse/error.c:45
+#: ../src/pulse/error.c:43
 msgid "No such entity"
 msgstr "Aucune entité de ce type"
 
-#: ../src/pulse/error.c:46
+#: ../src/pulse/error.c:44
 msgid "Connection refused"
 msgstr "Connexion refusée"
 
-#: ../src/pulse/error.c:47
+#: ../src/pulse/error.c:45
 msgid "Protocol error"
 msgstr "Erreur du protocole"
 
-#: ../src/pulse/error.c:48
+#: ../src/pulse/error.c:46
 msgid "Timeout"
 msgstr "Délai dépassé"
 
-#: ../src/pulse/error.c:49
-msgid "No authorization key"
-msgstr "Aucune clé d'autorisation"
+#: ../src/pulse/error.c:47
+msgid "No authentication key"
+msgstr "Pas de clé d'authentification"
 
-#: ../src/pulse/error.c:50
+#: ../src/pulse/error.c:48
 msgid "Internal error"
 msgstr "Erreur interne"
 
-#: ../src/pulse/error.c:51
+#: ../src/pulse/error.c:49
 msgid "Connection terminated"
 msgstr "Connexion terminée"
 
-#: ../src/pulse/error.c:52
+#: ../src/pulse/error.c:50
 msgid "Entity killed"
 msgstr "L'entité a été tuée"
 
-#: ../src/pulse/error.c:53
+#: ../src/pulse/error.c:51
 msgid "Invalid server"
 msgstr "Serveur invalide"
 
-#: ../src/pulse/error.c:54
+#: ../src/pulse/error.c:52
 msgid "Module initialization failed"
 msgstr "Échec lors de l'initialisation du module"
 
-#: ../src/pulse/error.c:55
+#: ../src/pulse/error.c:53
 msgid "Bad state"
 msgstr "État incorrect"
 
-#: ../src/pulse/error.c:56
+#: ../src/pulse/error.c:54
 msgid "No data"
 msgstr "Aucune donnée"
 
-#: ../src/pulse/error.c:57
+#: ../src/pulse/error.c:55
 msgid "Incompatible protocol version"
 msgstr "Version du protocole invalide"
 
-#: ../src/pulse/error.c:58
+#: ../src/pulse/error.c:56
 msgid "Too large"
 msgstr "Trop grand"
 
-#: ../src/pulse/error.c:59
+#: ../src/pulse/error.c:57
 msgid "Not supported"
 msgstr "Non pris en charge"
 
-#: ../src/pulse/error.c:60
+#: ../src/pulse/error.c:58
 msgid "Unknown error code"
 msgstr "Code d'erreur inconnu"
 
-#: ../src/pulse/error.c:61
+#: ../src/pulse/error.c:59
 msgid "No such extension"
 msgstr "Aucune extension de ce type"
 
-#: ../src/pulse/error.c:62
+#: ../src/pulse/error.c:60
 msgid "Obsolete functionality"
 msgstr "Fonctionnalité dépréciée"
 
-#: ../src/pulse/error.c:63
+#: ../src/pulse/error.c:61
 msgid "Missing implementation"
 msgstr "Implantation manquante"
 
-#: ../src/pulse/error.c:64
+#: ../src/pulse/error.c:62
 msgid "Client forked"
 msgstr "Le client s'est divisé (Client forked)"
 
-#: ../src/pulse/error.c:65
+#: ../src/pulse/error.c:63
 msgid "Input/Output error"
 msgstr "Erreur d'entrée/sortie"
 
-#: ../src/pulse/error.c:66
+#: ../src/pulse/error.c:64
 msgid "Device or resource busy"
 msgstr "Périphérique ou ressource occupé"
 
-#: ../src/pulse/sample.c:171
+#: ../src/pulse/sample.c:177
 #, c-format
 msgid "%s %uch %uHz"
 msgstr "%s %uch %uHz"
 
-#: ../src/pulse/sample.c:183
+#: ../src/pulse/sample.c:189
 #, c-format
 msgid "%0.1f GiB"
 msgstr "%0.1f Gio"
 
-#: ../src/pulse/sample.c:185
+#: ../src/pulse/sample.c:191
 #, c-format
 msgid "%0.1f MiB"
 msgstr "%0.1f Mio"
 
-#: ../src/pulse/sample.c:187
+#: ../src/pulse/sample.c:193
 #, c-format
 msgid "%0.1f KiB"
 msgstr "%0.1f Kio"
 
-#: ../src/pulse/sample.c:189
+#: ../src/pulse/sample.c:195
 #, c-format
 msgid "%u B"
 msgstr "%u B"
 
-#: ../src/pulse/client-conf-x11.c:54 ../src/utils/pax11publish.c:100
-#, fuzzy
-msgid "xcb_connect() failed"
-msgstr "Échec de pa_context_connect() : %s"
-
-#: ../src/pulse/client-conf-x11.c:59 ../src/utils/pax11publish.c:105
-msgid "xcb_connection_has_error() returned true"
-msgstr ""
-
-#: ../src/pulse/client-conf-x11.c:97
-msgid "Failed to parse cookie data"
-msgstr "Échec lors de l'analyse des données du cookie"
-
-#: ../src/pulse/client-conf.c:117
-#, c-format
-msgid "Failed to open configuration file '%s': %s"
-msgstr "Échec lors de l'ouverture du fichier de configuration « %s » :%s"
-
-#: ../src/pulse/context.c:528
-msgid "No cookie loaded. Attempting to connect without."
-msgstr "Aucun cookie chargé. Tentative de connexion sans celui-ci."
-
-#: ../src/pulse/context.c:675
-#, c-format
-msgid "fork(): %s"
-msgstr "fork() : %s"
-
-#: ../src/pulse/context.c:730
+#: ../src/tests/resampler-test.c:255
 #, c-format
-msgid "waitpid(): %s"
-msgstr "waitpid() : %s"
+msgid ""
+"%s [options]\n"
+"\n"
+"-h, --help                            Show this help\n"
+"-v, --verbose                         Print debug messages\n"
+"      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
+"44100)\n"
+"      --from-format=SAMPLEFORMAT      From sample type (defaults to s16le)\n"
+"      --from-channels=CHANNELS        From number of channels (defaults to "
+"1)\n"
+"      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
+"44100)\n"
+"      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
+"      --to-channels=CHANNELS          To number of channels (defaults to 1)\n"
+"      --resample-method=METHOD        Resample method (defaults to auto)\n"
+"      --seconds=SECONDS               From stream duration (defaults to 60)\n"
+"\n"
+"If the formats are not specified, the test performs all formats "
+"combinations,\n"
+"back and forth.\n"
+"\n"
+"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
+"alaw,\n"
+"s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
+"\n"
+"See --dump-resample-methods for possible values of resample methods.\n"
+msgstr ""
+"%s [options]\n"
+"\n"
+"-h, --help                            Afficher cette aide\n"
+"-v, --verbose                         Imprimer les messages de débogage\n"
+"      --from-rate=SAMPLERATE          À partir du taux d'échantillonnage en "
+"Hz (par défaut 44100)\n"
+"      --from-format=SAMPLEFORMAT      À partir du type d'échantillon (par "
+"défaut s16le)\n"
+"      --from-channels=CHANNELS        À partir du nombre de canaux (par "
+"défaut 1)\n"
+"      --to-rate=SAMPLERATE            Vers le taux d'échantillonnage en Hz "
+"(par défaut 44100)\n"
+"      --to-format=SAMPLEFORMAT        Vers le type d'échantillon (par défaut "
+"s16le)\n"
+"      --to-channels=CHANNELS          Vers le nombre de canaux (par défaut "
+"1)\n"
+"      --resample-method=METHOD        Méthode de rééchantillonnage (par "
+"défaut auto)\n"
+"      --seconds=SECONDS               à partir de la durée du flux (par "
+"défaut 60)\n"
+"\n"
+"Si les formats ne sont pas indiqués, le test effectue toutes les "
+"combinaisons de formats,\n"
+"les unes après les autres.\n"
+"\n"
+"Le type d'échantillon doit être l'un de s16le, s16be, u8, float32le, "
+"float32be, ulaw, alaw,\n"
+"s24le, s24be, s24-32le, s24-32be, s32le, s32be (par défaut s16ne)\n"
+"\n"
+"Veuillez consulter --dump-resample-methods pour voir les valeurs possibles "
+"des méthodes de rééchantillonnage.\n"
 
-#: ../src/pulse/context.c:1431
+#: ../src/tests/resampler-test.c:354
 #, c-format
-msgid "Received message for unknown extension '%s'"
-msgstr "Message reçu pour une extension inconnue « %s »"
+msgid "%s %s\n"
+msgstr "%s %s\n"
 
-#: ../src/utils/pacat.c:112
+#: ../src/utils/pacat.c:116
 #, c-format
 msgid "Failed to drain stream: %s"
 msgstr "Échec lors du vidage du flux : %s"
 
-#: ../src/utils/pacat.c:117
+#: ../src/utils/pacat.c:121
 msgid "Playback stream drained."
 msgstr "Flux de lecture vidé."
 
-#: ../src/utils/pacat.c:128
+#: ../src/utils/pacat.c:132
 msgid "Draining connection to server."
 msgstr "Vidage de la connexion au serveur."
 
-#: ../src/utils/pacat.c:141
+#: ../src/utils/pacat.c:145
 #, c-format
 msgid "pa_stream_drain(): %s"
 msgstr "pa_stream_drain() : %s"
 
-#: ../src/utils/pacat.c:164
+#: ../src/utils/pacat.c:168
 #, c-format
 msgid "pa_stream_write() failed: %s"
 msgstr "Échec de pa_stream_write() : %s"
 
-#: ../src/utils/pacat.c:205
+#: ../src/utils/pacat.c:209
 #, c-format
 msgid "pa_stream_begin_write() failed: %s"
 msgstr "Échec de pa_stream_begin_write() : %s"
 
-#: ../src/utils/pacat.c:255 ../src/utils/pacat.c:285
+#: ../src/utils/pacat.c:259 ../src/utils/pacat.c:289
 #, c-format
 msgid "pa_stream_peek() failed: %s"
 msgstr "Échec de pa_stream_peek() : %s"
 
-#: ../src/utils/pacat.c:325
+#: ../src/utils/pacat.c:339
 msgid "Stream successfully created."
 msgstr "Création du flux réussie."
 
-#: ../src/utils/pacat.c:328
+#: ../src/utils/pacat.c:342
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s"
 msgstr "Échec de pa_stream_get_buffer_attr() : %s"
 
-#: ../src/utils/pacat.c:332
+#: ../src/utils/pacat.c:346
 #, c-format
 msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 msgstr "Mesures du tampon : maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 
-#: ../src/utils/pacat.c:335
+#: ../src/utils/pacat.c:349
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u"
 msgstr "Mesures du tampon : maxlength=%u, fragsize=%u"
 
-#: ../src/utils/pacat.c:339
+#: ../src/utils/pacat.c:353
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'."
 msgstr ""
 "Utilisation de la spécification d'échantillon « %s », plan des canaux « %s »."
+""
 
-# l'espace manquant entre %s et suspended est voulu
-#: ../src/utils/pacat.c:343
+#: ../src/utils/pacat.c:357
 #, c-format
-msgid "Connected to device %s (%u, %ssuspended)."
-msgstr "Connecté au périphérique %s (%u, %ssuspendu)."
+msgid "Connected to device %s (index: %u, suspended: %s)."
+msgstr "Connecté au périphérique %s (index : %u, suspendu : %s)."
 
-#: ../src/utils/pacat.c:353
+#: ../src/utils/pacat.c:367
 #, c-format
 msgid "Stream error: %s"
 msgstr "Erreur du flux : %s"
 
-#: ../src/utils/pacat.c:363
+#: ../src/utils/pacat.c:377
 #, c-format
 msgid "Stream device suspended.%s"
 msgstr "Périphérique de flux suspendu.%s"
 
-#: ../src/utils/pacat.c:365
+#: ../src/utils/pacat.c:379
 #, c-format
 msgid "Stream device resumed.%s"
 msgstr "Périphérique de flux repris.%s"
 
-#: ../src/utils/pacat.c:373
+#: ../src/utils/pacat.c:387
 #, c-format
 msgid "Stream underrun.%s"
 msgstr "Flux vide.%s"
 
-#: ../src/utils/pacat.c:380
+#: ../src/utils/pacat.c:394
 #, c-format
 msgid "Stream overrun.%s"
 msgstr "Flux saturé.%s"
 
-#: ../src/utils/pacat.c:387
+#: ../src/utils/pacat.c:401
 #, c-format
 msgid "Stream started.%s"
 msgstr "Flux démarré.%s"
 
-#: ../src/utils/pacat.c:394
+#: ../src/utils/pacat.c:408
 #, c-format
 msgid "Stream moved to device %s (%u, %ssuspended).%s"
 msgstr "Flux déplacé vers le périphérique %s (%u, %ssuspendu).%s"
 
-# suspendu ou non suspendu
-#: ../src/utils/pacat.c:394
+#: ../src/utils/pacat.c:408
 msgid "not "
 msgstr "non "
 
-#: ../src/utils/pacat.c:401
+#: ../src/utils/pacat.c:415
 #, c-format
 msgid "Stream buffer attributes changed.%s"
 msgstr "Des attributs du tampon de flux ont changé.%s"
 
-#: ../src/utils/pacat.c:416
+#: ../src/utils/pacat.c:430
 msgid "Cork request stack is empty: corking stream"
-msgstr ""
+msgstr "La pile de requêtes de bouchons est vide : bouchonnage du flux"
 
-#: ../src/utils/pacat.c:422
+#: ../src/utils/pacat.c:436
 msgid "Cork request stack is empty: uncorking stream"
-msgstr ""
+msgstr "La pile de requêtes de bouchons est vide : débouchonnage du flux"
 
-#: ../src/utils/pacat.c:426
+#: ../src/utils/pacat.c:440
 msgid "Warning: Received more uncork requests than cork requests!"
 msgstr ""
+"Avertissement : il a été reçu davantage de requêtes de bouchonnage que de "
+"requêtes de débouchonnage !"
 
-#: ../src/utils/pacat.c:451
+#: ../src/utils/pacat.c:465
 #, c-format
 msgid "Connection established.%s"
 msgstr "Connexion établie.%s"
 
-#: ../src/utils/pacat.c:454
+#: ../src/utils/pacat.c:468
 #, c-format
 msgid "pa_stream_new() failed: %s"
 msgstr "Échec de pa_stream_new() : %s"
 
-#: ../src/utils/pacat.c:492
+#: ../src/utils/pacat.c:506
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s"
 msgstr "Échec de pa_stream_connect_playback() : %s"
 
-#: ../src/utils/pacat.c:498
+#: ../src/utils/pacat.c:512
+#, c-format
+msgid "Failed to set monitor stream: %s"
+msgstr "impossible de définir le flux du moniteur : %s"
+
+#: ../src/utils/pacat.c:516
 #, c-format
 msgid "pa_stream_connect_record() failed: %s"
 msgstr "Échec de pa_stream_connect_record() : %s"
 
-#: ../src/utils/pacat.c:512 ../src/utils/pactl.c:1252
+#: ../src/utils/pacat.c:529 ../src/utils/pactl.c:1446
 #, c-format
 msgid "Connection failure: %s"
 msgstr "Échec lors de la connexion : %s"
 
-#: ../src/utils/pacat.c:545
+#: ../src/utils/pacat.c:562
 msgid "Got EOF."
 msgstr "EOF obtenu."
 
-#: ../src/utils/pacat.c:582
+#: ../src/utils/pacat.c:599
 #, c-format
 msgid "write() failed: %s"
 msgstr "Échec de write() : %s"
 
-#: ../src/utils/pacat.c:603
+#: ../src/utils/pacat.c:620
 msgid "Got signal, exiting."
 msgstr "Signal obtenu, fermeture."
 
-#: ../src/utils/pacat.c:617
+#: ../src/utils/pacat.c:634
 #, c-format
 msgid "Failed to get latency: %s"
 msgstr "Échec lors de l'obtention de la latence : %s"
 
-#: ../src/utils/pacat.c:622
+#: ../src/utils/pacat.c:639
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec."
 msgstr "Durée : %0.3f sec. ; Latence : %0.0f µsec."
 
-#: ../src/utils/pacat.c:643
+#: ../src/utils/pacat.c:660
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s"
 msgstr "Échec de pa_stream_update_timing_info() : %s"
 
-# downmix = par ex. convertir 5 canaux en 2 canaux
-# upmixer = par ex. convertir 2 canaux en 5 canaux
-# https://bugzilla.redhat.com/show_bug.cgi?id=460798
-#: ../src/utils/pacat.c:653
-#, fuzzy, c-format
+#: ../src/utils/pacat.c:670
+#, c-format
 msgid ""
 "%s [options]\n"
 "\n"
@@ -1437,8 +1863,7 @@ msgid ""
 "\n"
 "  -v, --verbose                         Enable verbose operations\n"
 "\n"
-"  -s, --server=SERVER                   The name of the server to connect "
-"to\n"
+"  -s, --server=SERVER                   The name of the server to connect to\n"
 "  -d, --device=DEVICE                   The name of the sink/source to "
 "connect to\n"
 "  -n, --client-name=NAME                How to call this client on the "
@@ -1460,16 +1885,16 @@ msgid ""
 "                                        (defaults to 2)\n"
 "      --channel-map=CHANNELMAP          Channel map to use instead of the "
 "default\n"
-"      --fix-format                      Take the sample format from the sink "
-"the stream is\n"
+"      --fix-format                      Take the sample format from the sink/"
+"source the stream is\n"
 "                                        being connected to.\n"
-"      --fix-rate                        Take the sampling rate from the sink "
-"the stream is\n"
+"      --fix-rate                        Take the sampling rate from the sink/"
+"source the stream is\n"
 "                                        being connected to.\n"
 "      --fix-channels                    Take the number of channels and the "
 "channel map\n"
-"                                        from the sink the stream is being "
-"connected to.\n"
+"                                        from the sink/source the stream is "
+"being connected to.\n"
 "      --no-remix                        Don't upmix or downmix channels.\n"
 "      --no-remap                        Map channels by index instead of "
 "name.\n"
@@ -1484,144 +1909,155 @@ msgid ""
 "      --property=PROPERTY=VALUE         Set the specified property to the "
 "specified value.\n"
 "      --raw                             Record/play raw PCM data.\n"
-"      --passthrough                     passthrough data \n"
+"      --passthrough                     Passthrough data.\n"
 "      --file-format[=FFORMAT]           Record/play formatted PCM data.\n"
 "      --list-file-formats               List available file formats.\n"
+"      --monitor-stream=INDEX            Record from the sink input with "
+"index INDEX.\n"
 msgstr ""
 "%s [options]\n"
 "\n"
-"  -h, --help                            Affiche cette aide\n"
-"      --version                         Affiche la version\n"
+"  -h, --help                            Afficher cette aide\n"
+"      --version                         Afficher la version\n"
 "\n"
-"  -r, --record                          Crée une connexion pour "
+"  -r, --record                          Créer une connexion pour "
 "l'enregistrement\n"
-"  -p, --playback                        Crée une connexion pour la "
-"relecture\n"
+"  -p, --playback                        Créer une connexion pour la lecture\n"
 "\n"
-"  -v, --verbose                         Active le mode verbeux\n"
+"  -v, --verbose                         Activer les opérations détaillées\n"
 "\n"
-"  -s, --server=SERVEUR                  Le nom du serveur auquel se "
-"connecter\n"
-"  -d, --device=PÉRIPHÉRIQUE             Le nom de la destination/source à "
-"laquelle se connecter\n"
-"  -n, --client-name=NOM                 Définit le nom de ce client sur le "
+"  -s, --server=SERVER                   Nom du serveur auquel se connecter\n"
+"  -d, --device=DEVICE                   Nom de la destination ou de la "
+"source à laquelle se connecter\n"
+"  -n, --client-name=NAME                Comment appeler ce client sur le "
 "serveur\n"
-"      --stream-name=NOM                 Définit le nom de ce flux sur le "
+"      --stream-name=NAME                Comment appeler ce flux sur le "
 "serveur\n"
-"      --volume=VOLUME                   Indique le volume initial (linéaire) "
-"entre 0 et 65536\n"
-"      --rate=TAUXDÉCHANTILLONNAGE       Le taux d'échantillonnage en Hz (par "
+"      --volume=VOLUME                   Indiquer le volume (linéaire) "
+"initial dans la gamme 0...65536\n"
+"      --rate=SAMPLERATE                 Taux d'échantillonnage en Hz (par "
 "défaut 44100)\n"
-"      --format=FORMATDELÉCHANTILLON     Le type de l'échantillon, parmi : "
-"s16le, s16be, u8, float32le,\n"
-"                                        float32be, ulaw, alaw (par défaut "
+"      --format=SAMPLEFORMAT             Type d'échantillon, un de s16le, "
+"s16be, u8, float32le,\n"
+"                                        float32be, ulaw, alaw, s32le, s32be, "
+"s24le, s24be,\n"
+"                                        s24-32le, s24-32be (par défaut "
 "s16ne)\n"
-"      --channels=CANAUX                 Le nombre de canaux, 1 pour mono, 2 "
+"      --channels=CHANNELS               Nombre de canaux, 1 pour mono, 2 "
 "pour stéréo\n"
 "                                        (par défaut 2)\n"
-"      --channel-map=PLANDESCANAUX       Plan des canaux à utiliser au lieu "
-"de celui par défaut\n"
-"      --fix-format                      Prend le format de l'échantillon de "
-"la destination où le flux\n"
-"                                        est en train de se connecter.\n"
-"      --fix-rate                        Prend le taux d'échantillonnage de "
-"la destination où le flux\n"
-"                                        est en train de se connecter.\n"
-"      --fix-channels                    Prend le nombre et le plan des "
-"canaux de la destination \n"
-"                                        où le flux est en train de se "
-"connecter.\n"
-"      --no-remix                        Ne pas augmenter ou diminuer le "
-"nombre de canaux par mixage.\n"
-"      --no-remap                        Créer le plan des canaux par index "
-"et non par nom.\n"
-"      --latency=OCTETS                  Demande la latence indiquée en "
+"      --channel-map=CHANNELMAP          Plan des canaux à utiliser à la "
+"place de la valeur par défaut\n"
+"      --fix-format                      Utiliser le format du sample de la "
+"destination ou de la source à laquelle le flux\n"
+"                                        est connecté.\n"
+"      --fix-rate                        Utiliser le taux d'échantillonnage "
+"de la destination ou de la source à laquelle le flux\n"
+"                                        est connecté.\n"
+"      --fix-channels                    Utiliser le nombre de canaux et le "
+"plan des canaux\n"
+"                                        de la destination ou de la source à "
+"laquelle le flux est connecté.\n"
+"      --no-remix                        Ne pas mélanger (upmix ou downmix) "
+"les canaux.\n"
+"      --no-remap                        Cartographier les canaux par index "
+"plutôt que par nom.\n"
+"      --latency=BYTES                   Demander la latence spécifiée en "
 "octets.\n"
-"      --process-time=OCTETS             Demande le temps de traitement "
-"indiqué par requête en octets.\n"
-"      --property=PROPRIÉTÉ=VALEUR         Attribut la propriété définie à la "
-"valeur définie.\n"
-"      --raw                             Enregistre/lit les données PCM "
+"      --process-time=BYTES              Demander le temps de traitement "
+"spécifié par requête en octets.\n"
+"      --latency-msec=MSEC               Demander la latence spécifiée en "
+"msec.\n"
+"      --process-time-msec=MSEC          Demander le temps de traitement "
+"spécifié par requête en msec.\n"
+"      --property=PROPERTY=VALUE         Définir la propriété spécifiée sur "
+"la valeur spécifiée.\n"
+"      --raw                             Enregistrer ou lire les données PCM "
 "brutes.\n"
-"      --file-format=FFORMAT             Enregistre/lit les données PCM "
+"      --passthrough                     Données passthrough.\n"
+"      --file-format[=FFORMAT]           Enregistrer ou lire les données PCM "
 "formatées.\n"
-"      --list-file-formats               Liste les formats de fichiers "
+"      --list-file-formats               Répertorier les formats de fichier "
 "disponibles.\n"
+"      --monitor-stream=INDEX            Enregistrer à partir de l'entrée "
+"sink avec l'index INDEX.\n"
 
-#: ../src/utils/pacat.c:786
+#: ../src/utils/pacat.c:808
 #, c-format
-msgid ""
-"pacat %s\n"
+msgid "pacat %s\n"
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
-msgstr ""
-"pacat %s\n"
+msgstr "pacat %s\n"
 "Compilé avec libpulse %s\n"
 "Lié avec libpulse %s\n"
 
-#: ../src/utils/pacat.c:819 ../src/utils/pactl.c:1400
+#: ../src/utils/pacat.c:841 ../src/utils/pactl.c:1642
 #, c-format
 msgid "Invalid client name '%s'"
 msgstr "Nom du client invalide « %s »"
 
-#: ../src/utils/pacat.c:834
+#: ../src/utils/pacat.c:856
 #, c-format
 msgid "Invalid stream name '%s'"
 msgstr "Nom du flux invalide « %s »"
 
-#: ../src/utils/pacat.c:871
+#: ../src/utils/pacat.c:893
 #, c-format
 msgid "Invalid channel map '%s'"
 msgstr "Plan des canaux invalide « %s »"
 
-#: ../src/utils/pacat.c:900 ../src/utils/pacat.c:914
+#: ../src/utils/pacat.c:922 ../src/utils/pacat.c:936
 #, c-format
 msgid "Invalid latency specification '%s'"
 msgstr "Spécification de latence invalide « %s »"
 
-#: ../src/utils/pacat.c:907 ../src/utils/pacat.c:921
+#: ../src/utils/pacat.c:929 ../src/utils/pacat.c:943
 #, c-format
 msgid "Invalid process time specification '%s'"
 msgstr "Spécification de temps de traitement invalide « %s »"
 
-#: ../src/utils/pacat.c:933
+#: ../src/utils/pacat.c:955
 #, c-format
 msgid "Invalid property '%s'"
 msgstr "Propriété invalide « %s »"
 
-#: ../src/utils/pacat.c:952
+#: ../src/utils/pacat.c:974
 #, c-format
 msgid "Unknown file format %s."
 msgstr "Format de fichier inconnu %s."
 
-#: ../src/utils/pacat.c:971
+#: ../src/utils/pacat.c:989
+msgid "Failed to parse the argument for --monitor-stream"
+msgstr "Impossible d'analyser l'argument pour --monitor-stream"
+
+#: ../src/utils/pacat.c:1000
 msgid "Invalid sample specification"
 msgstr "Spécification d'échantillon invalide"
 
-#: ../src/utils/pacat.c:981
+#: ../src/utils/pacat.c:1010
 #, c-format
 msgid "open(): %s"
 msgstr "open() : %s"
 
-#: ../src/utils/pacat.c:986
+#: ../src/utils/pacat.c:1015
 #, c-format
 msgid "dup2(): %s"
 msgstr "dup2() : %s"
 
-#: ../src/utils/pacat.c:993
+#: ../src/utils/pacat.c:1022
 msgid "Too many arguments."
 msgstr "Trop de paramètres."
 
-#: ../src/utils/pacat.c:1004
+#: ../src/utils/pacat.c:1033
 msgid "Failed to generate sample specification for file."
 msgstr ""
 "Échec lors de la génération des informations de l'échantillon du fichier."
 
-#: ../src/utils/pacat.c:1030
+#: ../src/utils/pacat.c:1059
 msgid "Failed to open audio file."
 msgstr "Échec lors de l'ouverture du fichier audio."
 
-#: ../src/utils/pacat.c:1036
+#: ../src/utils/pacat.c:1065
 msgid ""
 "Warning: specified sample specification will be overwritten with "
 "specification from file."
@@ -1629,27 +2065,27 @@ msgstr ""
 "Avertissement : les spécifications de l'échantillon spécifié seront écrasées "
 "par celles du fichier."
 
-#: ../src/utils/pacat.c:1039 ../src/utils/pactl.c:1467
+#: ../src/utils/pacat.c:1068 ../src/utils/pactl.c:1706
 msgid "Failed to determine sample specification from file."
 msgstr ""
 "Échec lors de l'obtention des informations de l'échantillon du fichier."
 
-#: ../src/utils/pacat.c:1048
+#: ../src/utils/pacat.c:1077
 msgid "Warning: Failed to determine channel map from file."
 msgstr ""
 "Avertissement : échec lors de l'obtention des informations du plan des "
 "canaux du fichier."
 
-#: ../src/utils/pacat.c:1059
+#: ../src/utils/pacat.c:1088
 msgid "Channel map doesn't match sample specification"
 msgstr "Le plan des canaux ne correspond pas à la spécification d'échantillon"
 
-#: ../src/utils/pacat.c:1070
+#: ../src/utils/pacat.c:1099
 msgid "Warning: failed to write channel map to file."
 msgstr ""
 "Avertissement : Échec lors de l'écriture du plan des canaux dans le fichier."
 
-#: ../src/utils/pacat.c:1085
+#: ../src/utils/pacat.c:1114
 #, c-format
 msgid ""
 "Opening a %s stream with sample specification '%s' and channel map '%s'."
@@ -1657,158 +2093,221 @@ msgstr ""
 "Ouverture d'un flux %s avec une spécification d'échantillon « %s » et un "
 "plan des canaux « %s »."
 
-#: ../src/utils/pacat.c:1086
+#: ../src/utils/pacat.c:1115
 msgid "recording"
 msgstr "enregistrement"
 
-#: ../src/utils/pacat.c:1086
+#: ../src/utils/pacat.c:1115
 msgid "playback"
 msgstr "lecture"
 
-#: ../src/utils/pacat.c:1110
-#, fuzzy
+#: ../src/utils/pacat.c:1139
 msgid "Failed to set media name."
-msgstr "Échec lors de l'analyse de la ligne de commande"
+msgstr "Impossible de définir le nom du support."
 
-#: ../src/utils/pacat.c:1117 ../src/utils/pactl.c:1777
+#: ../src/utils/pacat.c:1146 ../src/utils/pactl.c:2056
 msgid "pa_mainloop_new() failed."
 msgstr "Échec de pa_mainloop_new()."
 
-#: ../src/utils/pacat.c:1136
+#: ../src/utils/pacat.c:1169
 msgid "io_new() failed."
 msgstr "Échec de io_new()."
 
-#: ../src/utils/pacat.c:1143 ../src/utils/pactl.c:1789
+#: ../src/utils/pacat.c:1176 ../src/utils/pactl.c:2068
 msgid "pa_context_new() failed."
 msgstr "Échec de pa_context_new()."
 
-#: ../src/utils/pacat.c:1151 ../src/utils/pactl.c:1795
+#: ../src/utils/pacat.c:1184 ../src/utils/pactl.c:2074
 #, c-format
 msgid "pa_context_connect() failed: %s"
 msgstr "Échec de pa_context_connect() : %s"
 
-#: ../src/utils/pacat.c:1157
+#: ../src/utils/pacat.c:1190
 msgid "pa_context_rttime_new() failed."
 msgstr "Échec de pa_context_rttime_new()."
 
-#: ../src/utils/pacat.c:1164 ../src/utils/pactl.c:1800
+#: ../src/utils/pacat.c:1197 ../src/utils/pactl.c:2079
 msgid "pa_mainloop_run() failed."
 msgstr "Échec de pa_mainloop_run()."
 
-#: ../src/utils/pasuspender.c:79
-#, c-format
-msgid "fork(): %s\n"
-msgstr "fork() : %s\n"
+#: ../src/utils/pacmd.c:51 ../src/utils/pactl.c:1564
+msgid "NAME [ARGS ...]"
+msgstr "NAME [ARGS ...]"
 
-#: ../src/utils/pasuspender.c:90
-#, c-format
-msgid "execvp(): %s\n"
-msgstr "execvp() : %s\n"
+#: ../src/utils/pacmd.c:52 ../src/utils/pacmd.c:60 ../src/utils/pactl.c:1565
+msgid "NAME|#N"
+msgstr "NAME|#N"
 
-#: ../src/utils/pasuspender.c:107
-#, c-format
-msgid "Failure to suspend: %s\n"
-msgstr "Échec lors de la suspension : %s\n"
+#: ../src/utils/pacmd.c:53 ../src/utils/pacmd.c:63 ../src/utils/pactl.c:1563
+#: ../src/utils/pactl.c:1569
+msgid "NAME"
+msgstr "NAME"
 
-#: ../src/utils/pasuspender.c:122
-#, c-format
-msgid "Failure to resume: %s\n"
-msgstr "Échec lors de la reprise : %s\n"
+#: ../src/utils/pacmd.c:54
+msgid "NAME|#N VOLUME"
+msgstr "NAME|#N VOLUME"
 
-#: ../src/utils/pasuspender.c:145
-#, c-format
-msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr ""
-"AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
+#: ../src/utils/pacmd.c:55
+msgid "#N VOLUME"
+msgstr "#N VOLUME"
 
-#: ../src/utils/pasuspender.c:157
-#, c-format
-msgid "Connection failure: %s\n"
-msgstr "Échec lors de la connexion : %s\n"
+#: ../src/utils/pacmd.c:56 ../src/utils/pacmd.c:70 ../src/utils/pactl.c:1567
+msgid "NAME|#N 1|0"
+msgstr "NAME|#N 1|0"
 
-#: ../src/utils/pasuspender.c:174
-#, c-format
-msgid "Got SIGINT, exiting.\n"
-msgstr "SIGINT reçu, fermeture.\n"
+#: ../src/utils/pacmd.c:57
+msgid "#N 1|0"
+msgstr "#N 1|0"
 
-#: ../src/utils/pasuspender.c:192
-#, c-format
-msgid "WARNING: Child process terminated by signal %u\n"
-msgstr "AVERTISSEMENT : le processus fils a été terminé par le signal %u\n"
+#: ../src/utils/pacmd.c:58
+msgid "NAME|#N KEY=VALUE"
+msgstr "NAME|#N KEY=VALUE"
+
+#: ../src/utils/pacmd.c:59
+msgid "#N KEY=VALUE"
+msgstr "#N KEY=VALUE"
+
+#: ../src/utils/pacmd.c:61
+msgid "#N"
+msgstr "#N"
+
+#: ../src/utils/pacmd.c:62
+msgid "NAME SINK|#N"
+msgstr "NAME SINK|#N"
 
-#: ../src/utils/pasuspender.c:210
+#: ../src/utils/pacmd.c:64 ../src/utils/pacmd.c:65
+msgid "NAME FILENAME"
+msgstr "NAME FILENAME"
+
+#: ../src/utils/pacmd.c:66
+msgid "PATHNAME"
+msgstr "PATHNAME"
+
+#: ../src/utils/pacmd.c:67
+msgid "FILENAME SINK|#N"
+msgstr "FILENAME SINK|#N"
+
+#: ../src/utils/pacmd.c:69 ../src/utils/pactl.c:1566
+msgid "#N SINK|SOURCE"
+msgstr "#N SINK|SOURCE"
+
+#: ../src/utils/pacmd.c:71 ../src/utils/pacmd.c:77 ../src/utils/pacmd.c:78
+msgid "1|0"
+msgstr "1|0"
+
+#: ../src/utils/pacmd.c:72 ../src/utils/pactl.c:1568
+msgid "CARD PROFILE"
+msgstr "CARD PROFILE"
+
+#: ../src/utils/pacmd.c:73 ../src/utils/pactl.c:1570
+msgid "NAME|#N PORT"
+msgstr "NAME|#N PORT"
+
+#: ../src/utils/pacmd.c:74 ../src/utils/pactl.c:1576
+msgid "CARD-NAME|CARD-#N PORT OFFSET"
+msgstr "CARD-NAME|CARD-#N PORT OFFSET"
+
+#: ../src/utils/pacmd.c:75
+msgid "TARGET"
+msgstr "TARGET"
+
+#: ../src/utils/pacmd.c:76
+msgid "NUMERIC LEVEL"
+msgstr "NUMERIC LEVEL"
+
+#: ../src/utils/pacmd.c:79
+msgid "FRAMES"
+msgstr "FRAMES"
+
+#: ../src/utils/pacmd.c:81
 #, c-format
 msgid ""
-"%s [options] ... \n"
 "\n"
 "  -h, --help                            Show this help\n"
 "      --version                         Show version\n"
-"  -s, --server=SERVER                   The name of the server to connect "
-"to\n"
-"\n"
+"When no command is given pacmd starts in the interactive mode.\n"
 msgstr ""
-"%s [options] ... \n"
-"\n"
-"  -h, --help                            Affiche cette aide\n"
-"      --version                         Affiche la version\n"
-"  -s, --server=SERVEUR                  Le nom du serveur auquel se "
-"connecter\n"
 "\n"
+"  -h, --help                            Afficher cette aide\n"
+"      --version                         Afficher la version\n"
+"Lorsqu'aucune command n'est donnée, pacmd est lancé en mode interactif.\n"
 
-#: ../src/utils/pasuspender.c:248
+#: ../src/utils/pacmd.c:128
 #, c-format
-msgid ""
-"pasuspender %s\n"
+msgid "pacmd %s\n"
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
-msgstr ""
-"pasuspender %s\n"
+msgstr "pacmd %s\n"
 "Compilé avec libpulse %s\n"
 "Lié avec libpulse %s\n"
 
-#: ../src/utils/pasuspender.c:277
+#: ../src/utils/pacmd.c:142
+msgid "No PulseAudio daemon running, or not running as session daemon."
+msgstr ""
+"Aucun démon PulseAudio en cours d'exécution, ou ne s'exécutant pas dans une "
+"session de type démon."
+
+#: ../src/utils/pacmd.c:147
 #, c-format
-msgid "pa_mainloop_new() failed.\n"
-msgstr "Échec de pa_mainloop_new().\n"
+msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
+msgstr "socket(PF_UNIX, SOCK_STREAM, 0) : %s"
 
-#: ../src/utils/pasuspender.c:290
+#: ../src/utils/pacmd.c:164
 #, c-format
-msgid "pa_context_new() failed.\n"
-msgstr "Échec de pa_context_new().\n"
+msgid "connect(): %s"
+msgstr "connect() : %s"
+
+#: ../src/utils/pacmd.c:172
+msgid "Failed to kill PulseAudio daemon."
+msgstr "Impossible de tuer le démon PulseAudio."
+
+#: ../src/utils/pacmd.c:180
+msgid "Daemon not responding."
+msgstr "Le démon ne répond pas."
 
-#: ../src/utils/pasuspender.c:298
+#: ../src/utils/pacmd.c:212 ../src/utils/pacmd.c:321 ../src/utils/pacmd.c:339
 #, c-format
-msgid "pa_mainloop_run() failed.\n"
-msgstr "Échec de pa_mainloop_run().\n"
+msgid "write(): %s"
+msgstr "write() : %s"
 
-#: ../src/utils/pactl.c:150
+#: ../src/utils/pacmd.c:268
+#, c-format
+msgid "poll(): %s"
+msgstr "poll() : %s"
+
+#: ../src/utils/pacmd.c:279 ../src/utils/pacmd.c:299
+#, c-format
+msgid "read(): %s"
+msgstr "read() : %s"
+
+#: ../src/utils/pactl.c:164
 #, c-format
 msgid "Failed to get statistics: %s"
 msgstr "Échec lors de l'obtention des statistiques : %s"
 
-#: ../src/utils/pactl.c:156
+#: ../src/utils/pactl.c:170
 #, c-format
 msgid "Currently in use: %u blocks containing %s bytes total.\n"
 msgstr "En cours d'utilisation : %u blocs contenant au total %s octets.\n"
 
-#: ../src/utils/pactl.c:159
+#: ../src/utils/pactl.c:173
 #, c-format
 msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
 msgstr ""
 "Alloué pendant l'ensemble de la durée d'exécution : %u blocs contenant au "
 "total %s octets.\n"
 
-#: ../src/utils/pactl.c:162
+#: ../src/utils/pactl.c:176
 #, c-format
 msgid "Sample cache size: %s\n"
 msgstr "Taille du cache de l'échantillon : %s\n"
 
-#: ../src/utils/pactl.c:171
+#: ../src/utils/pactl.c:185
 #, c-format
 msgid "Failed to get server information: %s"
 msgstr "Échec lors de l'obtention des informations du serveur : %s"
 
-#: ../src/utils/pactl.c:176
+#: ../src/utils/pactl.c:190
 #, c-format
 msgid ""
 "Server String: %s\n"
@@ -1818,9 +2317,15 @@ msgid ""
 "Client Index: %u\n"
 "Tile Size: %zu\n"
 msgstr ""
+"Chaîne du serveur : %s\n"
+"Version du protocole de bibliothèque : %u\n"
+"Version du protocole du serveur : %u\n"
+"Local : %s\n"
+"Index client : %u\n"
+"Tile Size: %zu\n"
 
-#: ../src/utils/pactl.c:192
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:206
+#, c-format
 msgid ""
 "User Name: %s\n"
 "Host Name: %s\n"
@@ -1840,559 +2345,580 @@ msgstr ""
 "Plan de canaux par défaut : %s\n"
 "Destination par défaut : %s\n"
 "Source par défaut : %s\n"
-"Cookie : %08x\n"
+"Cookie : %04x:%04x\n"
 
-#: ../src/utils/pactl.c:244 ../src/utils/pactl.c:830
+#: ../src/utils/pactl.c:255 ../src/utils/pactl.c:900 ../src/utils/pactl.c:978
 #, c-format
 msgid "Failed to get sink information: %s"
 msgstr "Échec lors de l'obtention des informations sur la destination : %s"
 
-# demander à Lennart s'il s'agit de monitor of source
-#: ../src/utils/pactl.c:270
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:281
+#, c-format
 msgid ""
 "Sink #%u\n"
-"\tState: %s\n"
-"\tName: %s\n"
-"\tDescription: %s\n"
-"\tDriver: %s\n"
-"\tSample Specification: %s\n"
-"\tChannel Map: %s\n"
-"\tOwner Module: %u\n"
-"\tMute: %s\n"
-"\tVolume: %s%s%s\n"
-"\t        balance %0.2f\n"
-"\tBase Volume: %s%s%s\n"
-"\tMonitor Source: %s\n"
-"\tLatency: %0.0f usec, configured %0.0f usec\n"
-"\tFlags: %s%s%s%s%s%s%s\n"
-"\tProperties:\n"
-"\t\t%s\n"
+"	State: %s\n"
+"	Name: %s\n"
+"	Description: %s\n"
+"	Driver: %s\n"
+"	Sample Specification: %s\n"
+"	Channel Map: %s\n"
+"	Owner Module: %u\n"
+"	Mute: %s\n"
+"	Volume: %s\n"
+"	        balance %0.2f\n"
+"	Base Volume: %s\n"
+"	Monitor Source: %s\n"
+"	Latency: %0.0f usec, configured %0.0f usec\n"
+"	Flags: %s%s%s%s%s%s%s\n"
+"	Properties:\n"
+"		%s\n"
 msgstr ""
 "Destination #%u\n"
-"\tÉtat : %s\n"
-"\tNom : %s\n"
-"\tDescription : %s\n"
-"\tPilote : %s\n"
-"\tSpécification de l'échantillon : %s\n"
-"\tPlan des canaux : %s\n"
-"\tModule propriétaire : %u\n"
-"\tMuet : %s\n"
-"\tVolume : %s%s%s\n"
-"\t        balance %0.2f\n"
-"\tVolume de base : %s%s%s\n"
-"\tMoniteur de la source : %s\n"
-"\tLatence : %0.0f·µs, configurée %0.0f·µs\n"
-"\tDrapeaux : %s%s%s%s%s%s\n"
-"\tPropriétés :\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:318 ../src/utils/pactl.c:430
-#, c-format
-msgid "\tPorts:\n"
-msgstr "\tPorts :\n"
-
-#: ../src/utils/pactl.c:325 ../src/utils/pactl.c:437
-#, c-format
-msgid "\tActive Port: %s\n"
-msgstr "\tPort actif : %s\n"
-
-#: ../src/utils/pactl.c:331 ../src/utils/pactl.c:443
-#, fuzzy, c-format
-msgid "\tFormats:\n"
-msgstr "\tPorts :\n"
-
-#: ../src/utils/pactl.c:357 ../src/utils/pactl.c:849
+"	État : %s\n"
+"	Nom : %s\n"
+"	Description : %s\n"
+"	Pilote : %s\n"
+"	Spécification de l'échantillon : %s\n"
+"	Plan des canaux : %s\n"
+"	Module du propriétaire : %u\n"
+"	Sourdine : %s\n"
+"	Volume : %s\n"
+"	        balance %0.2f\n"
+"	Volume de base : %s\n"
+"	Source du moniteur : %s\n"
+"	Latence : %0.0f usec, configuré %0.0f usec\n"
+"	Marqueurs : %s%s%s%s%s%s%s\n"
+"	Propriétés :\n"
+"		%s\n"
+
+#: ../src/utils/pactl.c:325 ../src/utils/pactl.c:431 ../src/utils/pactl.c:592
+#, c-format
+msgid "	Ports:\n"
+msgstr "	Ports :\n"
+
+#: ../src/utils/pactl.c:332 ../src/utils/pactl.c:438
+#, c-format
+msgid "	Active Port: %s\n"
+msgstr "	Port actif : %s\n"
+
+#: ../src/utils/pactl.c:338 ../src/utils/pactl.c:444
+#, c-format
+msgid "	Formats:\n"
+msgstr "	Formats :\n"
+
+#: ../src/utils/pactl.c:362 ../src/utils/pactl.c:920 ../src/utils/pactl.c:993
 #, c-format
 msgid "Failed to get source information: %s"
 msgstr "Échec lors de l'obtention des informations sur la source : %s"
 
-#: ../src/utils/pactl.c:383
+#: ../src/utils/pactl.c:388
 #, c-format
 msgid ""
 "Source #%u\n"
-"\tState: %s\n"
-"\tName: %s\n"
-"\tDescription: %s\n"
-"\tDriver: %s\n"
-"\tSample Specification: %s\n"
-"\tChannel Map: %s\n"
-"\tOwner Module: %u\n"
-"\tMute: %s\n"
-"\tVolume: %s%s%s\n"
-"\t        balance %0.2f\n"
-"\tBase Volume: %s%s%s\n"
-"\tMonitor of Sink: %s\n"
-"\tLatency: %0.0f usec, configured %0.0f usec\n"
-"\tFlags: %s%s%s%s%s%s\n"
-"\tProperties:\n"
-"\t\t%s\n"
+"	State: %s\n"
+"	Name: %s\n"
+"	Description: %s\n"
+"	Driver: %s\n"
+"	Sample Specification: %s\n"
+"	Channel Map: %s\n"
+"	Owner Module: %u\n"
+"	Mute: %s\n"
+"	Volume: %s\n"
+"	        balance %0.2f\n"
+"	Base Volume: %s\n"
+"	Monitor of Sink: %s\n"
+"	Latency: %0.0f usec, configured %0.0f usec\n"
+"	Flags: %s%s%s%s%s%s\n"
+"	Properties:\n"
+"		%s\n"
 msgstr ""
 "Source #%u\n"
-"\tÉtat : %s\n"
-"\tNom : %s\n"
-"\tDescription : %s\n"
-"\tPilote : %s\n"
-"\tSpécification de l'échantillon : %s\n"
-"\tPlan des canaux : %s\n"
-"\tModule propriétaire : %u\n"
-"\tMuet : %s\n"
-"\tVolume : %s%s%s\n"
-"\t        balance %0.2f\n"
-"\tVolume de base : %s%s%s\n"
-"\tMoniteur de la destination : %s\n"
-"\tLatence : %0.0f µs, configurée %0.0f µs\n"
-"\tDrapeaux : %s%s%s%s%s%s\n"
-"\tPropriétés :\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:415 ../src/utils/pactl.c:485 ../src/utils/pactl.c:528
-#: ../src/utils/pactl.c:570 ../src/utils/pactl.c:640 ../src/utils/pactl.c:641
-#: ../src/utils/pactl.c:652 ../src/utils/pactl.c:711 ../src/utils/pactl.c:712
-#: ../src/utils/pactl.c:723 ../src/utils/pactl.c:775 ../src/utils/pactl.c:776
-#: ../src/utils/pactl.c:783
+"	État : %s\n"
+"	Nom : %s\n"
+"	Description : %s\n"
+"	Pilote : %s\n"
+"	Spécification de l'échantillon : %s\n"
+"	Plan des canaux : %s\n"
+"	Module du propriétaire : %u\n"
+"	Sourdine : %s\n"
+"	Volume : %s\n"
+"	        balance %0.2f\n"
+"	Volume de base : %s\n"
+"	Moniteur de la destination : %s\n"
+"	Latence : %0.0f usec, configuré %0.0f usec\n"
+"	Marqueurs : %s%s%s%s%s%s\n"
+"	Propriétés :\n"
+"		%s\n"
+
+#: ../src/utils/pactl.c:416 ../src/utils/pactl.c:486 ../src/utils/pactl.c:529
+#: ../src/utils/pactl.c:571 ../src/utils/pactl.c:669 ../src/utils/pactl.c:670
+#: ../src/utils/pactl.c:681 ../src/utils/pactl.c:739 ../src/utils/pactl.c:740
+#: ../src/utils/pactl.c:751 ../src/utils/pactl.c:802 ../src/utils/pactl.c:803
+#: ../src/utils/pactl.c:809
 msgid "n/a"
 msgstr "n/d"
 
-#: ../src/utils/pactl.c:454
+#: ../src/utils/pactl.c:455 ../src/utils/pactl.c:859
 #, c-format
 msgid "Failed to get module information: %s"
 msgstr "Échec lors de l'obtention des informations du module : %s"
 
-#: ../src/utils/pactl.c:477
+#: ../src/utils/pactl.c:478
 #, c-format
 msgid ""
 "Module #%u\n"
-"\tName: %s\n"
-"\tArgument: %s\n"
-"\tUsage counter: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
+"	Name: %s\n"
+"	Argument: %s\n"
+"	Usage counter: %s\n"
+"	Properties:\n"
+"		%s\n"
 msgstr ""
 "Module #%u\n"
-"\tNom : %s\n"
-"\tParamètre : %s\n"
-"\tNombre d'utilisations : %s\n"
-"\tPropriétés : \n"
-"\t\t%s\n"
+"	Nom : %s\n"
+"	Paramètre : %s\n"
+"	Nombre d'utilisations : %s\n"
+"	Propriétés : \n"
+"		%s\n"
 
-#: ../src/utils/pactl.c:496
+#: ../src/utils/pactl.c:497
 #, c-format
 msgid "Failed to get client information: %s"
 msgstr "Échec lors de l'obtention des informations du client : %s"
 
-#: ../src/utils/pactl.c:522
+#: ../src/utils/pactl.c:523
 #, c-format
-msgid ""
-"Client #%u\n"
-"\tDriver: %s\n"
-"\tOwner Module: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
-msgstr ""
-"Client #%u\n"
-"\tPilote : %s\n"
-"\tModule propriétaire : %s\n"
-"\tPropriétés :\n"
-"\t\t%s\n"
+msgid "Client #%u\n"
+"	Driver: %s\n"
+"	Owner Module: %s\n"
+"	Properties:\n"
+"		%s\n"
+msgstr "Client #%u\n"
+"	Pilote : %s\n"
+"	Module propriétaire : %s\n"
+"	Propriétés :\n"
+"		%s\n"
 
-#: ../src/utils/pactl.c:539
+#: ../src/utils/pactl.c:540
 #, c-format
 msgid "Failed to get card information: %s"
 msgstr "Impossible d'obtenir des informations sur la carte : %s"
 
-#: ../src/utils/pactl.c:562
+#: ../src/utils/pactl.c:563
 #, c-format
-msgid ""
-"Card #%u\n"
-"\tName: %s\n"
-"\tDriver: %s\n"
-"\tOwner Module: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
+msgid "Card #%u\n"
+"	Name: %s\n"
+"	Driver: %s\n"
+"	Owner Module: %s\n"
+"	Properties:\n"
+"		%s\n"
 msgstr ""
 "Carte #%u\n"
-"\tNom : %s\n"
-"\tPilote : %s\n"
-"\tModule propriétaire : %s\n"
-"\tPropriétés :\n"
-"\t\t%s\n"
+"	Nom : %s\n"
+"	Pilote : %s\n"
+"	Module propriétaire : %s\n"
+"	Propriétés :\n"
+"		%s\n"
+
+#: ../src/utils/pactl.c:579
+#, c-format
+msgid "	Profiles:\n"
+msgstr "	Profils :\n"
+
+#: ../src/utils/pactl.c:586
+#, c-format
+msgid "	Active Profile: %s\n"
+msgstr "	Profil actif : %s\n"
 
-#: ../src/utils/pactl.c:576
+#: ../src/utils/pactl.c:600
 #, c-format
-msgid "\tProfiles:\n"
-msgstr "\tProfils :\n"
+msgid "			Properties:\n"
+"				%s\n"
+msgstr "			Propriétés :\n"
+"				%s\n"
 
-#: ../src/utils/pactl.c:582
+#: ../src/utils/pactl.c:605
 #, c-format
-msgid "\tActive Profile: %s\n"
-msgstr "\tProfil actif : %s\n"
+msgid "			Part of profile(s): %s"
+msgstr "			Partie du(des) profil(s) : %s"
 
-#: ../src/utils/pactl.c:593 ../src/utils/pactl.c:868
+#: ../src/utils/pactl.c:622 ../src/utils/pactl.c:940 ../src/utils/pactl.c:1008
 #, c-format
 msgid "Failed to get sink input information: %s"
 msgstr ""
-"Échec lors de l'obtention des informations de l'entrée de la destination : %s"
+"Échec lors de l'obtention des informations de l'entrée de la destination : "
+"%s"
 
-#: ../src/utils/pactl.c:622
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:651
+#, c-format
 msgid ""
 "Sink Input #%u\n"
-"\tDriver: %s\n"
-"\tOwner Module: %s\n"
-"\tClient: %s\n"
-"\tSink: %u\n"
-"\tSample Specification: %s\n"
-"\tChannel Map: %s\n"
-"\tFormat: %s\n"
-"\tMute: %s\n"
-"\tVolume: %s\n"
-"\t        %s\n"
-"\t        balance %0.2f\n"
-"\tBuffer Latency: %0.0f usec\n"
-"\tSink Latency: %0.0f usec\n"
-"\tResample method: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
+"	Driver: %s\n"
+"	Owner Module: %s\n"
+"	Client: %s\n"
+"	Sink: %u\n"
+"	Sample Specification: %s\n"
+"	Channel Map: %s\n"
+"	Format: %s\n"
+"	Corked: %s\n"
+"	Mute: %s\n"
+"	Volume: %s\n"
+"	        balance %0.2f\n"
+"	Buffer Latency: %0.0f usec\n"
+"	Sink Latency: %0.0f usec\n"
+"	Resample method: %s\n"
+"	Properties:\n"
+"		%s\n"
 msgstr ""
 "Entrée de la destination #%u\n"
-"\tPilote : %s\n"
-"\tModule propriétaire : %s\n"
-"\tClient : %s\n"
-"\tDestination : %u\n"
-"\tSpécification de l'échantillon : %s\n"
-"\tPlan des canaux : %s\n"
-"\tMuet : %s\n"
-"\tVolume : %s\n"
-"\t         %s\n"
-"\t         balance %0.2f\n"
-"\tLatence du tampon : %0.0f µs\n"
-"\tLatence de la destination : %0.0f µs\n"
-"\tMéthode de rééchantillonnage : %s\n"
-"\tPropriétés :\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:663 ../src/utils/pactl.c:887
+"	Pilote : %s\n"
+"	Module du propriétaire : %s\n"
+"	Client : %s\n"
+"	Destination : %u\n"
+"	Spécification de l'échantillon : %s\n"
+"	Plan des canaux : %s\n"
+"	Format : %s\n"
+"	Bouchonné : %s\n"
+"	Sourdine : %s\n"
+"	Volume : %s\n"
+"	        balance %0.2f\n"
+"	Latence du tampon : %0.0f usec\n"
+"	Latence de la destination : %0.0f usec\n"
+"	Méthode de rééchantillonnage : %s\n"
+"	Propriétés :\n"
+"		%s\n"
+
+#: ../src/utils/pactl.c:692 ../src/utils/pactl.c:960 ../src/utils/pactl.c:1023
 #, c-format
 msgid "Failed to get source output information: %s"
 msgstr ""
 "Échec lors de l'obtention des informations de la sortie de la source : %s"
 
-#: ../src/utils/pactl.c:693
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:721
+#, c-format
 msgid ""
 "Source Output #%u\n"
-"\tDriver: %s\n"
-"\tOwner Module: %s\n"
-"\tClient: %s\n"
-"\tSource: %u\n"
-"\tSample Specification: %s\n"
-"\tChannel Map: %s\n"
-"\tFormat: %s\n"
-"\tMute: %s\n"
-"\tVolume: %s\n"
-"\t        %s\n"
-"\t        balance %0.2f\n"
-"\tBuffer Latency: %0.0f usec\n"
-"\tSource Latency: %0.0f usec\n"
-"\tResample method: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
-msgstr ""
-"Entrée de la destination #%u\n"
-"\tPilote : %s\n"
-"\tModule propriétaire : %s\n"
-"\tClient : %s\n"
-"\tDestination : %u\n"
-"\tSpécification de l'échantillon : %s\n"
-"\tPlan des canaux : %s\n"
-"\tMuet : %s\n"
-"\tVolume : %s\n"
-"\t         %s\n"
-"\t         balance %0.2f\n"
-"\tLatence du tampon : %0.0f µs\n"
-"\tLatence de la destination : %0.0f µs\n"
-"\tMéthode de rééchantillonnage : %s\n"
-"\tPropriétés :\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:734
+"	Driver: %s\n"
+"	Owner Module: %s\n"
+"	Client: %s\n"
+"	Source: %u\n"
+"	Sample Specification: %s\n"
+"	Channel Map: %s\n"
+"	Format: %s\n"
+"	Corked: %s\n"
+"	Mute: %s\n"
+"	Volume: %s\n"
+"	        balance %0.2f\n"
+"	Buffer Latency: %0.0f usec\n"
+"	Source Latency: %0.0f usec\n"
+"	Resample method: %s\n"
+"	Properties:\n"
+"		%s\n"
+msgstr ""
+"Sortie de la source #%u\n"
+"	Pilote : %s\n"
+"	Module du propriétaire : %s\n"
+"	Client : %s\n"
+"	Source : %u\n"
+"	Spécification de l'échantillon : %s\n"
+"	Plan des canaux : %s\n"
+"	Format : %s\n"
+"	Bouchonné : %s\n"
+"	Sourdine : %s\n"
+"	Volume : %s\n"
+"	        balance %0.2f\n"
+"	Latence du tampon : %0.0f usec\n"
+"	Latence de la source : %0.0f usec\n"
+"	Méthode de rééchantillonnage : %s\n"
+"	Propriétés :\n"
+"		%s\n"
+
+#: ../src/utils/pactl.c:762
 #, c-format
 msgid "Failed to get sample information: %s"
 msgstr "Échec lors de l'obtention des informations de l'échantillon : %s"
 
-# Lazy ?
-# load-sample-lazy = Create a new entry in the sample cache, but don't load
-# the sample immediately. The sample is loaded only when it is first used
-#: ../src/utils/pactl.c:761
+#: ../src/utils/pactl.c:789
 #, c-format
 msgid ""
 "Sample #%u\n"
-"\tName: %s\n"
-"\tSample Specification: %s\n"
-"\tChannel Map: %s\n"
-"\tVolume: %s\n"
-"\t        %s\n"
-"\t        balance %0.2f\n"
-"\tDuration: %0.1fs\n"
-"\tSize: %s\n"
-"\tLazy: %s\n"
-"\tFilename: %s\n"
-"\tProperties:\n"
-"\t\t%s\n"
+"	Name: %s\n"
+"	Sample Specification: %s\n"
+"	Channel Map: %s\n"
+"	Volume: %s\n"
+"	        balance %0.2f\n"
+"	Duration: %0.1fs\n"
+"	Size: %s\n"
+"	Lazy: %s\n"
+"	Filename: %s\n"
+"	Properties:\n"
+"		%s\n"
 msgstr ""
 "Échantillon #%u\n"
-"\tNom : %s\n"
-"\tSpécification de l'échantillon : %s\n"
-"\tPlan des canaux : %s\n"
-"\tVolume : %s\n"
-"\t        %s\n"
-"\t        balance %0.2f\n"
-"\tDurée : %0.1f s\n"
-"\tTaille : %s\n"
-"\tCache retardé : %s\n"
-"\tNom de fichier : %s\n"
-"\tPropriétés :\n"
-"\t\t%s\n"
-
-#: ../src/utils/pactl.c:791 ../src/utils/pactl.c:801
+"	Nom : %s\n"
+"	Spécification de l'échantillon : %s\n"
+"	Plan des canaux : %s\n"
+"	Volume : %s\n"
+"	        balance %0.2f\n"
+"	Durée : %0.1fs\n"
+"	Taille : %s\n"
+"	Lazy : %s\n"
+"	Nom du fichier : %s\n"
+"	Propriétés :\n"
+"		%s\n"
+
+#: ../src/utils/pactl.c:817 ../src/utils/pactl.c:827
 #, c-format
 msgid "Failure: %s"
 msgstr "Échec : %s"
 
-#: ../src/utils/pactl.c:915
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:866
+#, c-format
+msgid "Failed to unload module: Module %s not loaded"
+msgstr "Impossible de décharger le module : module %s non chargé"
+
+#: ../src/utils/pactl.c:884
+#, c-format
+msgid ""
+"Failed to set volume: You tried to set volumes for %d channels, whereas "
+"channel/s supported = %d\n"
+msgstr ""
+"impossible de définir le volume : vous avex tenté de définir les volumes de "
+"%d canaux, tandis que channel/s prenait en charge = %d\n"
+
+#: ../src/utils/pactl.c:1050
+#, c-format
 msgid "Failed to set format: invalid format string %s"
-msgstr "Échec lors de l'obtention des informations sur la source : %s"
+msgstr "Impossible de définir le format : format de la chaîne %s invalide"
 
-#: ../src/utils/pactl.c:954
+#: ../src/utils/pactl.c:1093
 #, c-format
 msgid "Failed to upload sample: %s"
 msgstr "Échec lors de l'envoi de l'échantillon : %s"
 
-#: ../src/utils/pactl.c:971
+#: ../src/utils/pactl.c:1110
 msgid "Premature end of file"
 msgstr "Fin prématurée du fichier"
 
-#: ../src/utils/pactl.c:991
+#: ../src/utils/pactl.c:1130
 msgid "new"
-msgstr ""
+msgstr "nouveau"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:1133
 msgid "change"
-msgstr ""
+msgstr "changement"
 
-#: ../src/utils/pactl.c:997
+#: ../src/utils/pactl.c:1136
 msgid "remove"
-msgstr ""
+msgstr "supprimer"
 
-#: ../src/utils/pactl.c:1000 ../src/utils/pactl.c:1035
+#: ../src/utils/pactl.c:1139 ../src/utils/pactl.c:1174
 msgid "unknown"
-msgstr ""
+msgstr "inconnu(e)"
 
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1147
 msgid "sink"
 msgstr "destination"
 
-#: ../src/utils/pactl.c:1011
+#: ../src/utils/pactl.c:1150
 msgid "source"
 msgstr "source"
 
-#: ../src/utils/pactl.c:1014
+#: ../src/utils/pactl.c:1153
 msgid "sink-input"
-msgstr ""
+msgstr "sink-input"
 
-#: ../src/utils/pactl.c:1017
-#, fuzzy
+#: ../src/utils/pactl.c:1156
 msgid "source-output"
-msgstr "source"
+msgstr "source-output"
 
-#: ../src/utils/pactl.c:1020
+#: ../src/utils/pactl.c:1159
 msgid "module"
-msgstr ""
+msgstr "module"
 
-#: ../src/utils/pactl.c:1023
+#: ../src/utils/pactl.c:1162
 msgid "client"
-msgstr ""
+msgstr "client"
 
-#: ../src/utils/pactl.c:1026
+#: ../src/utils/pactl.c:1165
 msgid "sample-cache"
-msgstr ""
+msgstr "sample-cache"
 
-#: ../src/utils/pactl.c:1029 ../src/utils/pactl.c:1032
-#, fuzzy
+#: ../src/utils/pactl.c:1168
 msgid "server"
-msgstr "Serveur invalide"
+msgstr "serveur"
+
+#: ../src/utils/pactl.c:1171
+msgid "card"
+msgstr "carte"
 
-#: ../src/utils/pactl.c:1041
+#: ../src/utils/pactl.c:1180
 #, c-format
 msgid "Event '%s' on %s #%u\n"
-msgstr ""
+msgstr "Événement « %s » sur %s #%u\n"
 
-#: ../src/utils/pactl.c:1258
+#: ../src/utils/pactl.c:1452
 msgid "Got SIGINT, exiting."
 msgstr "SIGINT reçu, fermeture."
 
-#: ../src/utils/pactl.c:1285
+#: ../src/utils/pactl.c:1479
 msgid "Invalid volume specification"
 msgstr "Spécification de volume invalide"
 
-#: ../src/utils/pactl.c:1308
+#: ../src/utils/pactl.c:1502
 msgid "Volume outside permissible range.\n"
-msgstr ""
+msgstr "Le volume est au-delà de la plage admissible.\n"
 
-#: ../src/utils/pactl.c:1319 ../src/utils/pactl.c:1320
-#: ../src/utils/pactl.c:1321 ../src/utils/pactl.c:1322
-#: ../src/utils/pactl.c:1323 ../src/utils/pactl.c:1324
-#: ../src/utils/pactl.c:1325 ../src/utils/pactl.c:1326
-#: ../src/utils/pactl.c:1327 ../src/utils/pactl.c:1328
-#: ../src/utils/pactl.c:1329 ../src/utils/pactl.c:1330
-#: ../src/utils/pactl.c:1331 ../src/utils/pactl.c:1332
-#: ../src/utils/pactl.c:1333 ../src/utils/pactl.c:1334
-#: ../src/utils/pactl.c:1335 ../src/utils/pactl.c:1336
-#: ../src/utils/pactl.c:1337
+#: ../src/utils/pactl.c:1515
+msgid "Invalid number of volume specifications.\n"
+msgstr "Nombre de spécifications du volume invalide.\n"
+
+#: ../src/utils/pactl.c:1527
+msgid "Inconsistent volume specification.\n"
+msgstr "Spécification du volume incohérente.\n"
+
+#: ../src/utils/pactl.c:1557 ../src/utils/pactl.c:1558
+#: ../src/utils/pactl.c:1559 ../src/utils/pactl.c:1560
+#: ../src/utils/pactl.c:1561 ../src/utils/pactl.c:1562
+#: ../src/utils/pactl.c:1563 ../src/utils/pactl.c:1564
+#: ../src/utils/pactl.c:1565 ../src/utils/pactl.c:1566
+#: ../src/utils/pactl.c:1567 ../src/utils/pactl.c:1568
+#: ../src/utils/pactl.c:1569 ../src/utils/pactl.c:1570
+#: ../src/utils/pactl.c:1571 ../src/utils/pactl.c:1572
+#: ../src/utils/pactl.c:1573 ../src/utils/pactl.c:1574
+#: ../src/utils/pactl.c:1575 ../src/utils/pactl.c:1576
+#: ../src/utils/pactl.c:1577
 msgid "[options]"
-msgstr ""
+msgstr "[options]"
 
-#: ../src/utils/pactl.c:1321
+#: ../src/utils/pactl.c:1559
 msgid "[TYPE]"
-msgstr ""
+msgstr "[TYPE]"
 
-#: ../src/utils/pactl.c:1323
+#: ../src/utils/pactl.c:1561
 msgid "FILENAME [NAME]"
-msgstr ""
+msgstr "FILENAME [NAME]"
 
-#: ../src/utils/pactl.c:1324
+#: ../src/utils/pactl.c:1562
 msgid "NAME [SINK]"
-msgstr ""
-
-#: ../src/utils/pactl.c:1325
-msgid "NAME"
-msgstr ""
-
-#: ../src/utils/pactl.c:1326
-msgid "NAME [ARGS ...]"
-msgstr ""
-
-#: ../src/utils/pactl.c:1327
-msgid "#N"
-msgstr ""
-
-#: ../src/utils/pactl.c:1328
-msgid "#N SINK|SOURCE"
-msgstr ""
-
-#: ../src/utils/pactl.c:1329 ../src/utils/pactl.c:1334
-msgid "NAME|#N 1|0"
-msgstr ""
+msgstr "NAME [SINK]"
 
-#: ../src/utils/pactl.c:1330
-msgid "CARD PROFILE"
-msgstr ""
-
-#: ../src/utils/pactl.c:1331
-msgid "NAME|#N PORT"
-msgstr ""
+#: ../src/utils/pactl.c:1571
+msgid "NAME|#N VOLUME [VOLUME ...]"
+msgstr "NAME|#N VOLUME [VOLUME ...]"
 
-#: ../src/utils/pactl.c:1332
-msgid "NAME|#N VOLUME"
-msgstr ""
+#: ../src/utils/pactl.c:1572
+msgid "#N VOLUME [VOLUME ...]"
+msgstr "#N VOLUME [VOLUME ...]"
 
-#: ../src/utils/pactl.c:1333
-msgid "#N VOLUME"
-msgstr ""
+#: ../src/utils/pactl.c:1573
+msgid "NAME|#N 1|0|toggle"
+msgstr "NAME|#N 1|0|toggle"
 
-#: ../src/utils/pactl.c:1335
-msgid "#N 1|0"
-msgstr ""
+#: ../src/utils/pactl.c:1574
+msgid "#N 1|0|toggle"
+msgstr "#N 1|0|toggle"
 
-#: ../src/utils/pactl.c:1336
+#: ../src/utils/pactl.c:1575
 msgid "#N FORMATS"
+msgstr "#N FORMATS"
+
+#: ../src/utils/pactl.c:1578
+#, c-format
+msgid ""
+"\n"
+"The special names @DEFAULT_SINK@, @DEFAULT_SOURCE@ and @DEFAULT_MONITOR@\n"
+"can be used to specify the default sink, source and monitor.\n"
 msgstr ""
+"\n"
+"Les noms spéciaux @DEFAULT_SINK@, @DEFAULT_SOURCE@ et @DEFAULT_MONITOR@\n"
+"peuvent être utilisés pour indiquer la destination, la source, et le "
+"moniteur par défaut.\n"
 
-#: ../src/utils/pactl.c:1339
-#, fuzzy, c-format
+#: ../src/utils/pactl.c:1581
+#, c-format
 msgid ""
 "\n"
 "  -h, --help                            Show this help\n"
 "      --version                         Show version\n"
 "\n"
-"  -s, --server=SERVER                   The name of the server to connect "
-"to\n"
+"  -s, --server=SERVER                   The name of the server to connect to\n"
 "  -n, --client-name=NAME                How to call this client on the "
 "server\n"
 msgstr ""
-"%s [options] ... \n"
 "\n"
-"  -h, --help                            Affiche cette aide\n"
-"      --version                         Affiche la version\n"
-"  -s, --server=SERVEUR                  Le nom du serveur auquel se "
-"connecter\n"
+"  -h, --help                            Afficher cette aide\n"
+"      --version                         Afficher la version\n"
 "\n"
+"  -s, --server=SERVER                   Le nom du serveur auquel se "
+"connecter\n"
+"  -n, --client-name=NAME                Comment appeler ce client sur le "
+"serveur\n"
 
-#: ../src/utils/pactl.c:1380
+#: ../src/utils/pactl.c:1622
 #, c-format
-msgid ""
-"pactl %s\n"
+msgid "pactl %s\n"
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
-msgstr ""
-"pactl %s\n"
+msgstr "pactl %s\n"
 "Compilé avec libpulse %s\n"
 "Lié avec libpulse %s\n"
 
-#: ../src/utils/pactl.c:1439
+#: ../src/utils/pactl.c:1678
 #, c-format
 msgid "Specify nothing, or one of: %s"
-msgstr ""
+msgstr "Ne rien indiquer, ou l'un de : %s"
 
-#: ../src/utils/pactl.c:1449
+#: ../src/utils/pactl.c:1688
 msgid "Please specify a sample file to load"
 msgstr "Veuillez indiquer un fichier d'échantillon à charger"
 
-#: ../src/utils/pactl.c:1462
+#: ../src/utils/pactl.c:1701
 msgid "Failed to open sound file."
 msgstr "Échec lors de l'ouverture du fichier audio."
 
-#: ../src/utils/pactl.c:1474
+#: ../src/utils/pactl.c:1713
 msgid "Warning: Failed to determine sample specification from file."
 msgstr ""
 "Avertissement : Échec lors de l'obtention des spécifications de "
 "l'échantillon du fichier."
 
-#: ../src/utils/pactl.c:1484
+#: ../src/utils/pactl.c:1723
 msgid "You have to specify a sample name to play"
 msgstr "Vous devez indiquer un nom d'échantillon à lire"
 
-#: ../src/utils/pactl.c:1496
+#: ../src/utils/pactl.c:1735
 msgid "You have to specify a sample name to remove"
 msgstr "Vous devez indiquer un nom d'échantillon à supprimer"
 
-#: ../src/utils/pactl.c:1505
+#: ../src/utils/pactl.c:1744
 msgid "You have to specify a sink input index and a sink"
 msgstr ""
 "Vous devez indiquer un index d'entrée de destination et une destination"
 
-#: ../src/utils/pactl.c:1515
+#: ../src/utils/pactl.c:1754
 msgid "You have to specify a source output index and a source"
 msgstr "Vous devez indiquer un index de sortie de source et une source"
 
-#: ../src/utils/pactl.c:1530
+#: ../src/utils/pactl.c:1769
 msgid "You have to specify a module name and arguments."
 msgstr "Vous devez indiquer un nom de module et des paramètres."
 
-#: ../src/utils/pactl.c:1550
-msgid "You have to specify a module index"
-msgstr "Vous devez indiquer un index de module"
+#: ../src/utils/pactl.c:1789
+msgid "You have to specify a module index or name"
+msgstr "Vous devez indiquer un index ou nom de module"
 
-#: ../src/utils/pactl.c:1560
+#: ../src/utils/pactl.c:1802
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean value."
 msgstr ""
 "Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer une "
 "valeur booléenne."
 
-#: ../src/utils/pactl.c:1573
+#: ../src/utils/pactl.c:1807 ../src/utils/pactl.c:1827
+msgid "Invalid suspend specification."
+msgstr "Spécification de suspension invalide."
+
+#: ../src/utils/pactl.c:1822
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value."
@@ -2400,89 +2926,187 @@ msgstr ""
 "Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer une "
 "valeur booléenne."
 
-#: ../src/utils/pactl.c:1585
+#: ../src/utils/pactl.c:1839
 msgid "You have to specify a card name/index and a profile name"
 msgstr "Vous devez indiquer un nom/un index de carte et un nom de profil"
 
-#: ../src/utils/pactl.c:1596
+#: ../src/utils/pactl.c:1850
 msgid "You have to specify a sink name/index and a port name"
 msgstr "Vous devez indiquer un nom/un index de destination et un nom de port"
 
-#: ../src/utils/pactl.c:1607
+#: ../src/utils/pactl.c:1861
+msgid "You have to specify a sink name"
+msgstr "Vous devez indiquer un nom de destination"
+
+#: ../src/utils/pactl.c:1871
 msgid "You have to specify a source name/index and a port name"
 msgstr "Vous devez indiquer un nom/un index de source et un nom de port"
 
-#: ../src/utils/pactl.c:1618
+#: ../src/utils/pactl.c:1882
+msgid "You have to specify a source name"
+msgstr "Vous devez indiquer un nom de source"
+
+#: ../src/utils/pactl.c:1892
 msgid "You have to specify a sink name/index and a volume"
 msgstr "Vous devez indiquer un nom/un index de destination et un volume"
 
-#: ../src/utils/pactl.c:1631
+#: ../src/utils/pactl.c:1905
 msgid "You have to specify a source name/index and a volume"
 msgstr "Vous devez indiquer un nom/un index de source et un volume"
 
-#: ../src/utils/pactl.c:1644
+#: ../src/utils/pactl.c:1918
 msgid "You have to specify a sink input index and a volume"
 msgstr "Vous devez indiquer un index d'entrée de destination et un volume"
 
-#: ../src/utils/pactl.c:1649
+#: ../src/utils/pactl.c:1923
 msgid "Invalid sink input index"
 msgstr "Index invalide d'entrée de la destination"
 
-#: ../src/utils/pactl.c:1660
-#, fuzzy
+#: ../src/utils/pactl.c:1934
 msgid "You have to specify a source output index and a volume"
-msgstr "Vous devez indiquer un index de sortie de source et une source"
+msgstr "Vous devez indiquer un index de sortie de source et un volume"
 
-#: ../src/utils/pactl.c:1665
-#, fuzzy
+#: ../src/utils/pactl.c:1939
 msgid "Invalid source output index"
-msgstr "Index invalide d'entrée de la destination"
+msgstr "Index de sortie de source invalide"
 
-#: ../src/utils/pactl.c:1677
+#: ../src/utils/pactl.c:1950
 msgid "You have to specify a sink name/index and a mute boolean"
 msgstr "Vous devez indiquer un nom/un index de destination et un booléen muet"
 
-#: ../src/utils/pactl.c:1682 ../src/utils/pactl.c:1699
-#: ../src/utils/pactl.c:1721 ../src/utils/pactl.c:1742
-#, fuzzy
+#: ../src/utils/pactl.c:1955 ../src/utils/pactl.c:1970
+#: ../src/utils/pactl.c:1990 ../src/utils/pactl.c:2008
 msgid "Invalid mute specification"
-msgstr "Spécification d'échantillon invalide"
+msgstr "Spécification de sourdine invalide"
 
-#: ../src/utils/pactl.c:1694
+#: ../src/utils/pactl.c:1965
 msgid "You have to specify a source name/index and a mute boolean"
 msgstr "Vous devez indiquer un nom/un index de source et un booléen muet"
 
-#: ../src/utils/pactl.c:1711
+#: ../src/utils/pactl.c:1980
 msgid "You have to specify a sink input index and a mute boolean"
 msgstr ""
 "Vous devez indiquer un index d'entrée de destination et un booléen muet"
 
-#: ../src/utils/pactl.c:1716
+#: ../src/utils/pactl.c:1985
 msgid "Invalid sink input index specification"
 msgstr "Spécification d'index d'entrée de la destination invalide"
 
-#: ../src/utils/pactl.c:1732
-#, fuzzy
+#: ../src/utils/pactl.c:1998
 msgid "You have to specify a source output index and a mute boolean"
-msgstr "Vous devez indiquer un nom/un index de source et un booléen muet"
+msgstr "Vous devez indiquer un index de sortie de source et un booléen muet"
 
-#: ../src/utils/pactl.c:1737
-#, fuzzy
+#: ../src/utils/pactl.c:2003
 msgid "Invalid source output index specification"
-msgstr "Spécification d'index d'entrée de la destination invalide"
+msgstr "Spécification d'index de sortie de source invalide"
 
-#: ../src/utils/pactl.c:1756
-#, fuzzy
+#: ../src/utils/pactl.c:2020
 msgid ""
 "You have to specify a sink index and a semicolon-separated list of supported "
 "formats"
-msgstr "Vous devez indiquer un nom/un index de destination et un booléen muet"
+msgstr ""
+"Vous devez indiquer un index de destination et une liste des formats pris en "
+"charge séparée par des points-virgules"
 
-#: ../src/utils/pactl.c:1772
+#: ../src/utils/pactl.c:2032
+msgid ""
+"You have to specify a card name/index, a port name and a latency offset"
+msgstr ""
+"Vous devez indiquer un nom ou index carte, un nom de port et un décalage de "
+"latence"
+
+#: ../src/utils/pactl.c:2039
+msgid "Could not parse latency offset"
+msgstr "Impossible d'analyser le décalage de la latence"
+
+#: ../src/utils/pactl.c:2051
 msgid "No valid command specified."
 msgstr "Aucune commande valide indiquée."
 
-#: ../src/utils/pax11publish.c:61
+#: ../src/utils/pasuspender.c:79
+#, c-format
+msgid "fork(): %s\n"
+msgstr "fork() : %s\n"
+
+#: ../src/utils/pasuspender.c:92
+#, c-format
+msgid "execvp(): %s\n"
+msgstr "execvp() : %s\n"
+
+#: ../src/utils/pasuspender.c:111
+#, c-format
+msgid "Failure to resume: %s\n"
+msgstr "Échec lors de la reprise : %s\n"
+
+#: ../src/utils/pasuspender.c:145
+#, c-format
+msgid "Failure to suspend: %s\n"
+msgstr "Échec lors de la suspension : %s\n"
+
+#: ../src/utils/pasuspender.c:170
+#, c-format
+msgid "WARNING: Sound server is not local, not suspending.\n"
+msgstr ""
+"AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
+
+#: ../src/utils/pasuspender.c:183
+#, c-format
+msgid "Connection failure: %s\n"
+msgstr "Échec lors de la connexion : %s\n"
+
+#: ../src/utils/pasuspender.c:201
+#, c-format
+msgid "Got SIGINT, exiting.\n"
+msgstr "SIGINT reçu, fermeture.\n"
+
+#: ../src/utils/pasuspender.c:219
+#, c-format
+msgid "WARNING: Child process terminated by signal %u\n"
+msgstr "AVERTISSEMENT : le processus fils a été terminé par le signal %u\n"
+
+#: ../src/utils/pasuspender.c:228
+#, c-format
+msgid ""
+"%s [options] ... \n"
+"\n"
+"  -h, --help                            Show this help\n"
+"      --version                         Show version\n"
+"  -s, --server=SERVER                   The name of the server to connect to\n"
+"\n"
+msgstr ""
+"%s [options] ... \n"
+"\n"
+"  -h, --help                            Affiche cette aide\n"
+"      --version                         Affiche la version\n"
+"  -s, --server=SERVEUR                  Le nom du serveur auquel se "
+"connecter\n"
+"\n"
+
+#: ../src/utils/pasuspender.c:266
+#, c-format
+msgid "pasuspender %s\n"
+"Compiled with libpulse %s\n"
+"Linked with libpulse %s\n"
+msgstr "pasuspender %s\n"
+"Compilé avec libpulse %s\n"
+"Lié avec libpulse %s\n"
+
+#: ../src/utils/pasuspender.c:295
+#, c-format
+msgid "pa_mainloop_new() failed.\n"
+msgstr "Échec de pa_mainloop_new().\n"
+
+#: ../src/utils/pasuspender.c:308
+#, c-format
+msgid "pa_context_new() failed.\n"
+msgstr "Échec de pa_context_new().\n"
+
+#: ../src/utils/pasuspender.c:320
+#, c-format
+msgid "pa_mainloop_run() failed.\n"
+msgstr "Échec de pa_mainloop_run().\n"
+
+#: ../src/utils/pax11publish.c:58
 #, c-format
 msgid ""
 "%s [-D display] [-S server] [-O sink] [-I source] [-c file]  [-d|-e|-i|-r]\n"
@@ -2503,885 +3127,53 @@ msgstr ""
 "variables de l'environnement local et le fichier de cookie.\n"
 " -r    Enlève les données PulseAudio du visuel X11\n"
 
-#: ../src/utils/pax11publish.c:94
+#: ../src/utils/pax11publish.c:91
 #, c-format
 msgid "Failed to parse command line.\n"
 msgstr "Échec lors de l'analyse de la ligne de commande.\n"
 
-#: ../src/utils/pax11publish.c:113
+#: ../src/utils/pax11publish.c:110
 #, c-format
 msgid "Server: %s\n"
 msgstr "Serveur : %s\n"
 
-#: ../src/utils/pax11publish.c:115
+#: ../src/utils/pax11publish.c:112
 #, c-format
 msgid "Source: %s\n"
 msgstr "Source : %s\n"
 
-#: ../src/utils/pax11publish.c:117
+#: ../src/utils/pax11publish.c:114
 #, c-format
 msgid "Sink: %s\n"
 msgstr "Destination : %s\n"
 
-#: ../src/utils/pax11publish.c:119
+#: ../src/utils/pax11publish.c:116
 #, c-format
 msgid "Cookie: %s\n"
 msgstr "Cookie : %s\n"
 
-#: ../src/utils/pax11publish.c:137
+#: ../src/utils/pax11publish.c:134
 #, c-format
 msgid "Failed to parse cookie data\n"
 msgstr "Échec lors de l'analyse des données du cookie\n"
 
-#: ../src/utils/pax11publish.c:142
+#: ../src/utils/pax11publish.c:139
 #, c-format
 msgid "Failed to save cookie data\n"
 msgstr "Échec lors de l'enregistrement des données du cookie\n"
 
-#: ../src/utils/pax11publish.c:157
-#, c-format
-msgid "Failed to load client configuration file.\n"
-msgstr "Échec lors du chargement du fichier de configuration du client.\n"
-
-#: ../src/utils/pax11publish.c:162
-#, c-format
-msgid "Failed to read environment configuration data.\n"
-msgstr ""
-"Échec lors de la lecture des données de configuration de l'environnement.\n"
-
-# Fully Qualified Domain Name
-#: ../src/utils/pax11publish.c:179
+#: ../src/utils/pax11publish.c:168
 #, c-format
 msgid "Failed to get FQDN.\n"
 msgstr "Échec lors de l'obtention du FQDN (« nom de domaine complet »).\n"
 
-#: ../src/utils/pax11publish.c:199
+#: ../src/utils/pax11publish.c:188
 #, c-format
 msgid "Failed to load cookie data\n"
 msgstr "Échec lors du chargement des données du cookie\n"
 
-#: ../src/utils/pax11publish.c:217
+#: ../src/utils/pax11publish.c:206
 #, c-format
 msgid "Not yet implemented.\n"
 msgstr "Pas encore implémenté.\n"
 
-#: ../src/utils/pacmd.c:66
-msgid "No PulseAudio daemon running, or not running as session daemon."
-msgstr ""
-"Aucun démon PulseAudio en cours d'exécution, ou ne s'exécutant pas dans une "
-"session de type démon."
-
-#: ../src/utils/pacmd.c:71
-#, c-format
-msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
-msgstr "socket(PF_UNIX, SOCK_STREAM, 0) : %s"
-
-#: ../src/utils/pacmd.c:88
-#, c-format
-msgid "connect(): %s"
-msgstr "connect() : %s"
-
-#: ../src/utils/pacmd.c:96
-msgid "Failed to kill PulseAudio daemon."
-msgstr "Impossible de tuer le démon PulseAudio."
-
-#: ../src/utils/pacmd.c:104
-msgid "Daemon not responding."
-msgstr "Le démon ne répond pas."
-
-#: ../src/utils/pacmd.c:184
-#, c-format
-msgid "poll(): %s"
-msgstr "poll() : %s"
-
-#: ../src/utils/pacmd.c:195 ../src/utils/pacmd.c:215
-#, c-format
-msgid "read(): %s"
-msgstr "read() : %s"
-
-#: ../src/utils/pacmd.c:237 ../src/utils/pacmd.c:255
-#, c-format
-msgid "write(): %s"
-msgstr "write() : %s"
-
-#: ../src/pulsecore/lock-autospawn.c:136 ../src/pulsecore/lock-autospawn.c:222
-msgid "Cannot access autospawn lock."
-msgstr "Impossible d'accèder au verrou autonome."
-
-#: ../src/modules/alsa/alsa-sink.c:560 ../src/modules/alsa/alsa-sink.c:726
-#, c-format
-msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
-msgstr ""
-"ALSA nous a réveillé pour écrire de nouvelles données à partir du "
-"périphérique, mais il n'y avait en fait rien à écrire !\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA.\n"
-"Nous avons été réveillés avec POLLOUT actif, cependant un snd_pcm_avail() "
-"ultérieur a retourné 0 ou une autre valeur < min_avail."
-
-#: ../src/modules/alsa/alsa-source.c:519 ../src/modules/alsa/alsa-source.c:672
-#, c-format
-msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
-msgstr ""
-"ALSA nous a réveillé pour lire de nouvelles données à partir du "
-"périphérique, mais il n'y avait en fait rien à lire !\n"
-"Il s'agit très probablement d'un bogue dans le pilote ALSA « %s ». Veuillez "
-"rapporter ce problème aux développeurs d'ALSA.\n"
-"Nous avons été réveillés avec POLLIN actif, cependant un snd_pcm_avail() "
-"ultérieur a retourné 0 ou une autre valeur < min_avail."
-
-#: ../src/modules/alsa/module-alsa-card.c:167
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2796
-#: ../src/modules/alsa/alsa-mixer.c:3898
-msgid "Off"
-msgstr "Éteint"
-
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2738
-msgid "High Fidelity Playback (A2DP)"
-msgstr "Lecture haute fidélité (A2DP)"
-
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2752
-msgid "High Fidelity Capture (A2DP)"
-msgstr "Capture haute fidélité (A2DP)"
-
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2767
-msgid "Telephony Duplex (HSP/HFP)"
-msgstr "Telephonie en duplex (HSP/HFP)"
-
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2781
-msgid "Handsfree Gateway"
-msgstr ""
-
-#: ../src/modules/reserve-wrap.c:151
-msgid "PulseAudio Sound Server"
-msgstr "Serveur de son PulseAudio"
-
-#: ../src/modules/module-rygel-media-server.c:510
-#: ../src/modules/module-rygel-media-server.c:548
-#: ../src/modules/module-rygel-media-server.c:903
-msgid "Output Devices"
-msgstr "Périphériques de sortie"
-
-#: ../src/modules/module-rygel-media-server.c:511
-#: ../src/modules/module-rygel-media-server.c:549
-#: ../src/modules/module-rygel-media-server.c:904
-msgid "Input Devices"
-msgstr "Périphériques d'entrée"
-
-#: ../src/modules/module-rygel-media-server.c:1056
-msgid "Audio on @HOSTNAME@"
-msgstr "Audio sur @HOSTNAME@"
-
-#: ../src/modules/alsa/alsa-mixer.c:2219
-msgid "Input"
-msgstr "Entrée"
-
-#: ../src/modules/alsa/alsa-mixer.c:2220
-msgid "Docking Station Input"
-msgstr "Entrée de la station d'accueil"
-
-#: ../src/modules/alsa/alsa-mixer.c:2221
-#, fuzzy
-msgid "Docking Station Microphone"
-msgstr "Microphone de la station d'accueil"
-
-#: ../src/modules/alsa/alsa-mixer.c:2222
-#, fuzzy
-msgid "Docking Station Line In"
-msgstr "Entrée de la station d'accueil"
-
-#: ../src/modules/alsa/alsa-mixer.c:2223 ../src/modules/alsa/alsa-mixer.c:2307
-msgid "Line In"
-msgstr "Entrée-ligne"
-
-#: ../src/modules/alsa/alsa-mixer.c:2224 ../src/modules/alsa/alsa-mixer.c:2302
-msgid "Microphone"
-msgstr "Microphone"
-
-#: ../src/modules/alsa/alsa-mixer.c:2225 ../src/modules/alsa/alsa-mixer.c:2303
-#, fuzzy
-msgid "Front Microphone"
-msgstr "Microphone de la station d'accueil"
-
-#: ../src/modules/alsa/alsa-mixer.c:2226 ../src/modules/alsa/alsa-mixer.c:2304
-#, fuzzy
-msgid "Rear Microphone"
-msgstr "Microphone"
-
-#: ../src/modules/alsa/alsa-mixer.c:2227
-msgid "External Microphone"
-msgstr "Microphone externe"
-
-#: ../src/modules/alsa/alsa-mixer.c:2228 ../src/modules/alsa/alsa-mixer.c:2306
-msgid "Internal Microphone"
-msgstr "Microphone interne"
-
-#: ../src/modules/alsa/alsa-mixer.c:2229 ../src/modules/alsa/alsa-mixer.c:2308
-msgid "Radio"
-msgstr "Radio"
-
-#: ../src/modules/alsa/alsa-mixer.c:2230 ../src/modules/alsa/alsa-mixer.c:2309
-msgid "Video"
-msgstr "Vidéo"
-
-#: ../src/modules/alsa/alsa-mixer.c:2231
-msgid "Automatic Gain Control"
-msgstr "Contrôle automatique du gain"
-
-#: ../src/modules/alsa/alsa-mixer.c:2232
-msgid "No Automatic Gain Control"
-msgstr "Pas de contrôle automatique du gain"
-
-#: ../src/modules/alsa/alsa-mixer.c:2233
-msgid "Boost"
-msgstr "Boost"
-
-#: ../src/modules/alsa/alsa-mixer.c:2234
-msgid "No Boost"
-msgstr "Pas de boost"
-
-#: ../src/modules/alsa/alsa-mixer.c:2235
-msgid "Amplifier"
-msgstr "Amplificateur"
-
-#: ../src/modules/alsa/alsa-mixer.c:2236
-msgid "No Amplifier"
-msgstr "Pas d'amplificateur"
-
-#: ../src/modules/alsa/alsa-mixer.c:2237
-#, fuzzy
-msgid "Bass Boost"
-msgstr "Boost"
-
-#: ../src/modules/alsa/alsa-mixer.c:2238
-#, fuzzy
-msgid "No Bass Boost"
-msgstr "Pas de boost"
-
-#: ../src/modules/alsa/alsa-mixer.c:2239
-msgid "Speaker"
-msgstr "Haut-parleur"
-
-#: ../src/modules/alsa/alsa-mixer.c:2240 ../src/modules/alsa/alsa-mixer.c:2311
-msgid "Headphones"
-msgstr "Casques analogiques"
-
-#: ../src/modules/alsa/alsa-mixer.c:2301
-msgid "Analog Input"
-msgstr "Entrée analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:2305
-msgid "Dock Microphone"
-msgstr "Microphone de la station d'accueil"
-
-#: ../src/modules/alsa/alsa-mixer.c:2310
-msgid "Analog Output"
-msgstr "Sortie analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:2312
-msgid "LFE on Separate Mono Output"
-msgstr "Sortie analogique (LFE)"
-
-#: ../src/modules/alsa/alsa-mixer.c:2313
-#, fuzzy
-msgid "Line Out"
-msgstr "Entrée-ligne"
-
-#: ../src/modules/alsa/alsa-mixer.c:2314
-msgid "Analog Mono Output"
-msgstr "Sortie mono analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:2315
-#, fuzzy
-msgid "Speakers"
-msgstr "Stéréo analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:2316
-msgid "HDMI / DisplayPort"
-msgstr ""
-
-#: ../src/modules/alsa/alsa-mixer.c:2317
-#, fuzzy
-msgid "Digital Output (S/PDIF)"
-msgstr "Stéréo numérique (HDMI)"
-
-#: ../src/modules/alsa/alsa-mixer.c:2318
-#, fuzzy
-msgid "Digital Passthrough (S/PDIF)"
-msgstr "Stéréo numérique (HDMI)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3756
-msgid "Analog Mono"
-msgstr "Mono analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:3757
-msgid "Analog Stereo"
-msgstr "Stéréo analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:3758
-msgid "Analog Surround 2.1"
-msgstr "Surround analogique 2.1"
-
-#: ../src/modules/alsa/alsa-mixer.c:3759
-msgid "Analog Surround 3.0"
-msgstr "Surround analogique 3.0"
-
-#: ../src/modules/alsa/alsa-mixer.c:3760
-msgid "Analog Surround 3.1"
-msgstr "Surround analogique 3.1"
-
-#: ../src/modules/alsa/alsa-mixer.c:3761
-msgid "Analog Surround 4.0"
-msgstr "Surround analogique 4.0"
-
-#: ../src/modules/alsa/alsa-mixer.c:3762
-msgid "Analog Surround 4.1"
-msgstr "Surround analogique 4.1"
-
-#: ../src/modules/alsa/alsa-mixer.c:3763
-msgid "Analog Surround 5.0"
-msgstr "Surround analogique 5.0"
-
-#: ../src/modules/alsa/alsa-mixer.c:3764
-msgid "Analog Surround 5.1"
-msgstr "Surround analogique 5.1"
-
-#: ../src/modules/alsa/alsa-mixer.c:3765
-msgid "Analog Surround 6.0"
-msgstr "Surround analogique 6.0"
-
-#: ../src/modules/alsa/alsa-mixer.c:3766
-msgid "Analog Surround 6.1"
-msgstr "Surround analogique 6.1"
-
-#: ../src/modules/alsa/alsa-mixer.c:3767
-msgid "Analog Surround 7.0"
-msgstr "Surround analogique 7.0"
-
-#: ../src/modules/alsa/alsa-mixer.c:3768
-msgid "Analog Surround 7.1"
-msgstr "Surround analogique 7.1"
-
-#: ../src/modules/alsa/alsa-mixer.c:3769
-msgid "Digital Stereo (IEC958)"
-msgstr "Stéréo numérique (IEC958)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3770
-#, fuzzy
-msgid "Digital Passthrough  (IEC958)"
-msgstr "Stéréo numérique (IEC958)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3771
-msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr "Surround numérique 4.0 (IEC958/AC3)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3772
-msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr "Surround numérique 5.1 (IEC958/AC3)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3773
-msgid "Digital Stereo (HDMI)"
-msgstr "Stéréo numérique (HDMI)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3774
-#, fuzzy
-msgid "Digital Surround 5.1 (HDMI)"
-msgstr "Surround numérique 5.1 (IEC958/AC3)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3895
-msgid "Analog Mono Duplex"
-msgstr "Duplex Mono analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:3896
-msgid "Analog Stereo Duplex"
-msgstr "Duplex stéréo analogique"
-
-#: ../src/modules/alsa/alsa-mixer.c:3897
-msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Duplex stéréo numérique (IEC958)"
-
-#: ../src/modules/alsa/alsa-mixer.c:3997
-#, fuzzy, c-format
-msgid "%s Output"
-msgstr "Sortie vide"
-
-#: ../src/modules/alsa/alsa-mixer.c:4005
-#, fuzzy, c-format
-msgid "%s Input"
-msgstr "Entrée"
-
-#: ../src/modules/echo-cancel/module-echo-cancel.c:63
-msgid ""
-"source_name=<name for the source> source_properties=<properties for the "
-"source> source_master=<name of source to filter> sink_name=<name for the "
-"sink> sink_properties=<properties for the sink> sink_master=<name of sink to "
-"filter> adjust_time=<how often to readjust rates in s> adjust_threshold=<how "
-"much drift to readjust after in ms> format=<sample format> rate=<sample "
-"rate> channels=<number of channels> channel_map=<channel map> "
-"aec_method=<implementation to use> aec_args=<parameters for the AEC engine> "
-"save_aec=<save AEC data in /tmp> autoloaded=<set if this module is being "
-"loaded automatically> use_volume_sharing=<yes or no> "
-msgstr ""
-
-#: ../src/modules/module-equalizer-sink.c:72
-msgid "General Purpose Equalizer"
-msgstr ""
-
-#: ../src/modules/module-equalizer-sink.c:76
-#, fuzzy
-msgid ""
-"sink_name=<name of the sink> sink_properties=<properties for the sink> "
-"sink_master=<sink to connect to> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> autoloaded=<set if "
-"this module is being loaded automatically> use_volume_sharing=<yes or no> "
-msgstr ""
-"sink_name=<nom de la destination> sink_properties=<propriétés de la "
-"destination> master=<nom de la destination à filter> format=<format de "
-"l'échantillon> rate=<taux d'échantillonage> channels=<nombre de canaux> "
-"channel_map=<plan des canaux> plugin=<nom de l'extension ladspa> "
-"label=<étiquette de l'extension ladspa> control=<liste des valeurs de "
-"contrôle de l'entrée séparées par des virgules>"
-
-#: ../src/modules/module-filter-apply.c:48
-msgid "autoclean=<automatically unload unused filters?>"
-msgstr ""
-
-#: ../src/tests/resampler-test.c:257
-#, c-format
-msgid ""
-"%s [options]\n"
-"\n"
-"-h, --help                            Show this help\n"
-"-v, --verbose                         Print debug messages\n"
-"      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
-"44100)\n"
-"      --from-format=SAMPLEFORMAT      From sample type (defaults to s16le)\n"
-"      --from-channels=CHANNELS        From number of channels (defaults to "
-"1)\n"
-"      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
-"44100)\n"
-"      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
-"      --to-channels=CHANNELS          To number of channels (defaults to 1)\n"
-"      --resample-method=METHOD        Resample method (defaults to auto)\n"
-"      --seconds=SECONDS               From stream duration (defaults to 60)\n"
-"\n"
-"If the formats are not specified, the test performs all formats "
-"combinations,\n"
-"back and forth.\n"
-"\n"
-"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
-"alaw,\n"
-"32le, s32be (defaults to s16ne)\n"
-"\n"
-"See --dump-resample-methods for possible values of resample methods.\n"
-msgstr ""
-
-#: ../src/tests/resampler-test.c:356
-#, fuzzy, c-format
-msgid "%s %s\n"
-msgstr "%s %s"
-
-#: ../src/tests/resampler-test.c:419
-#, c-format
-msgid "=== %d seconds: %d Hz %d ch (%s) -> %d Hz %d ch (%s)"
-msgstr ""
-
-#~ msgid "[%s:%u] rlimit not supported on this platform."
-#~ msgstr "[%s:%u] rlimit n'est pas pris en charge sur cette plateforme."
-
-#~ msgid "XOpenDisplay() failed"
-#~ msgstr "Échec de XOpenDisplay()"
-
-#~ msgid ""
-#~ "Source Output #%u\n"
-#~ "\tDriver: %s\n"
-#~ "\tOwner Module: %s\n"
-#~ "\tClient: %s\n"
-#~ "\tSource: %u\n"
-#~ "\tSample Specification: %s\n"
-#~ "\tChannel Map: %s\n"
-#~ "\tBuffer Latency: %0.0f usec\n"
-#~ "\tSource Latency: %0.0f usec\n"
-#~ "\tResample method: %s\n"
-#~ "\tProperties:\n"
-#~ "\t\t%s\n"
-#~ msgstr ""
-#~ "Sortie de la source #%u\n"
-#~ "\tPilote : %s\n"
-#~ "\tModule propriétaire : %s\n"
-#~ "\tClient : %s\n"
-#~ "\tSource : %u\n"
-#~ "\tSpécification de l'échantillon : %s\n"
-#~ "\tPlan des canaux : %s\n"
-#~ "\tLatence du tampon : %0.0f µs\n"
-#~ "\tLatence de la source : %0.0f µs\n"
-#~ "\tMéthode de rééchantillonnage : %s\n"
-#~ "\tPropriétés :\n"
-#~ "\t\t%s\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "%s [options] stat\n"
-#~ "%s [options] list\n"
-#~ "%s [options] exit\n"
-#~ "%s [options] upload-sample FILENAME [NAME]\n"
-#~ "%s [options] play-sample NAME [SINK]\n"
-#~ "%s [options] remove-sample NAME\n"
-#~ "%s [options] move-sink-input SINKINPUT SINK\n"
-#~ "%s [options] move-source-output SOURCEOUTPUT SOURCE\n"
-#~ "%s [options] load-module NAME [ARGS ...]\n"
-#~ "%s [options] unload-module MODULE\n"
-#~ "%s [options] suspend-sink SINK 1|0\n"
-#~ "%s [options] suspend-source SOURCE 1|0\n"
-#~ "%s [options] set-card-profile CARD PROFILE\n"
-#~ "%s [options] set-sink-port SINK PORT\n"
-#~ "%s [options] set-source-port SOURCE PORT\n"
-#~ "%s [options] set-sink-volume SINK VOLUME\n"
-#~ "%s [options] set-source-volume SOURCE VOLUME\n"
-#~ "%s [options] set-sink-input-volume SINKINPUT VOLUME\n"
-#~ "%s [options] set-sink-mute SINK 1|0\n"
-#~ "%s [options] set-source-mute SOURCE 1|0\n"
-#~ "%s [options] set-sink-input-mute SINKINPUT 1|0\n"
-#~ "%s [options] subscribe\n"
-#~ "\n"
-#~ "  -h, --help                            Show this help\n"
-#~ "      --version                         Show version\n"
-#~ "\n"
-#~ "  -s, --server=SERVER                   The name of the server to connect "
-#~ "to\n"
-#~ "  -n, --client-name=NAME                How to call this client on the "
-#~ "server\n"
-#~ msgstr ""
-#~ "%s [options] stat\n"
-#~ "%s [options] list\n"
-#~ "%s [options] exit\n"
-#~ "%s [options] upload-sample NOMDEFICHIER [NOM]\n"
-#~ "%s [options] play-sample NOM [DEST]\n"
-#~ "%s [options] remove-sample NOM\n"
-#~ "%s [options] move-sink-input ID DEST\n"
-#~ "%s [options] move-source-output ID SOURCE\n"
-#~ "%s [options] load-module NOM [PARAMS ...]\n"
-#~ "%s [options] unload-module ID\n"
-#~ "%s [options] suspend-sink [DEST] 1|0\n"
-#~ "%s [options] suspend-source [SOURCE] 1|0\n"
-#~ "%s·[options]·set-card-profile·[CARTE]·[PROFIL]·\n"
-#~ "%s [options] set-sink-port DEST PORT\n"
-#~ "%s [options] set-source-port SOURCE PORT\n"
-#~ "%s [options] set-sink-volume DEST VOLUME\n"
-#~ "%s [options] set-source-volume SOURCE VOLUME\n"
-#~ "%s [options] set-sink-input-volume ENTREEDEST VOLUME\n"
-#~ "%s [options] set-sink-mute DEST 1|0\n"
-#~ "%s [options] set-source-mute SOURCE 1|0\n"
-#~ "%s [options] set-sink-input-mute ENTREEDEST 1|0\n"
-#~ "\n"
-#~ "  -h, --help                            Affiche cette aide\n"
-#~ "      --version                         Affiche la version\n"
-#~ "\n"
-#~ "  -s, --server=SERVEUR                  Le nom du serveur auquel se "
-#~ "connecter\n"
-#~ "  -n, --client-name=NOM                 Définit le nom de ce client sur "
-#~ "le serveur\n"
-
-#~ msgid "%s+%s"
-#~ msgstr "%s+%s"
-
-#~ msgid "%s / %s"
-#~ msgstr "%s / %s"
-
-#~ msgid "Digital Surround 4.0 (IEC958)"
-#~ msgstr "Surround numérique 4.0 (IEC958)"
-
-#~ msgid "Low Frequency Emmiter"
-#~ msgstr "Émetteur à basse fréquence"
-
-#~ msgid "Invalid client name '%s'\n"
-#~ msgstr "Plan des canaux invalide « %s »\n"
-
-#~ msgid "Failed to determine sample specification from file.\n"
-#~ msgstr "Échec lors de l'obtention des informations de l'échantillon : %s\n"
-
-#~ msgid "select(): %s"
-#~ msgstr "select() : %s"
-
-#~ msgid "Cannot connect to system bus: %s"
-#~ msgstr "Impossible de se connecter au bus système : %s"
-
-#~ msgid "Cannot get caller from PID: %s"
-#~ msgstr "Impossible d'obtenir le programme appelant à partir du PID : %s"
-
-#~ msgid "Cannot set UID on caller object."
-#~ msgstr "Impossible de définir un UID sur l'objet appelant."
-
-#~ msgid "Failed to get CK session."
-#~ msgstr "Échec lors de l'obtention de la session CK."
-
-#~ msgid "Cannot set UID on session object."
-#~ msgstr "Impossible de définir l'UID sur l'objet de session."
-
-#~ msgid "Cannot allocate PolKitAction."
-#~ msgstr "Impossible d'allouer PolKitAction."
-
-#~ msgid "Cannot set action_id"
-#~ msgstr "Impossible de définir action_id."
-
-#~ msgid "Cannot allocate PolKitContext."
-#~ msgstr "Impossible d'allouer PolKitContext."
-
-#~ msgid "Cannot initialize PolKitContext: %s"
-#~ msgstr "Impossible d'initialiser PolKitContext : %s"
-
-#~ msgid "Could not determine whether caller is authorized: %s"
-#~ msgstr "Impossible de déterminer si le programme appelant est autorisé : %s"
-
-#~ msgid "Cannot obtain auth: %s"
-#~ msgstr "Impossible d'obtenir l'authentification : %s"
-
-#~ msgid "PolicyKit responded with '%s'"
-#~ msgstr "PolicyKit a renvoyé « %s »"
-
-#~ msgid ""
-#~ "High-priority scheduling (negative Unix nice level) for the PulseAudio "
-#~ "daemon"
-#~ msgstr ""
-#~ "Ordonnancement haute priorité (niveau Unix « nice » négatif) pour le "
-#~ "démon PulseAudio"
-
-#~ msgid "Real-time scheduling for the PulseAudio daemon"
-#~ msgstr "Ordonnancement en temps réel pour le démon PulseAudio"
-
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring high-priority scheduling."
-#~ msgstr ""
-#~ "La politique du système empêche PulseAudio d'acquérir un ordonnancement "
-#~ "haute priorité"
-
-#~ msgid ""
-#~ "System policy prevents PulseAudio from acquiring real-time scheduling."
-#~ msgstr ""
-#~ "La politique du système empêche PulseAudio d'acquérir un ordonnancement "
-#~ "en temps réel"
-
-#~ msgid "read() failed: %s\n"
-#~ msgstr "Échec de read() : %s\n"
-
-#~ msgid "pa_context_connect() failed: %s\n"
-#~ msgstr "Échec de pa_context_connect() : %s"
-
-#~ msgid "We're in the group '%s', allowing high-priority scheduling."
-#~ msgstr ""
-#~ "Nous sommes dans le groupe « %s », permettant une planification à haute "
-#~ "priorité."
-
-#~ msgid "We're in the group '%s', allowing real-time scheduling."
-#~ msgstr ""
-#~ "Nous sommes dans le groupe « %s », permettant un ordonnancement en temps "
-#~ "réel."
-
-#~ msgid "PolicyKit grants us acquire-high-priority privilege."
-#~ msgstr ""
-#~ "PolicyKit a accordé l'acquisition des permissions de haute priorité."
-
-#~ msgid "PolicyKit refuses acquire-high-priority privilege."
-#~ msgstr "PolicyKit a refusé l'acquisition des permissions de haute priorité."
-
-#~ msgid "PolicyKit grants us acquire-real-time privilege."
-#~ msgstr "PolicyKit a accordé l'acquisition des permissions de temps réel."
-
-#~ msgid "PolicyKit refuses acquire-real-time privilege."
-#~ msgstr "PolicyKit a refusé l'acquisition des permissions de temps réel."
-
-#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '%s', PolicyKit refuse to grant us the requested "
-#~ "privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
-#~ "limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the "
-#~ "appropriate PolicyKit privileges, or become a member of '%s', or increase "
-#~ "the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-#~ msgstr ""
-#~ "Le SUID root et l'ordonnancement en temps réel et/ou haute priorité ont "
-#~ "été spécifiés dans la configuration. Cependant, il nous manque les "
-#~ "privilèges nécessaires :\n"
-#~ "Nous ne sommes pas dans le groupe « %s », PolicyKit refuse de nous "
-#~ "accorder les privilèges demandés et nous devons augmenter les limites de "
-#~ "ressources RLIMIT_NICE/RLIMIT_RTPRIO.\n"
-#~ "Pour activer l'ordonnancement en temps réel/haute priorité, veuillez "
-#~ "acquérir les privilèges PolicyKit apropriés, ou devenir membre de « %s », "
-#~ "ou augmenter les limites de ressources RLIMIT_NICE/RLIMIT_RTPRIO pour cet "
-#~ "utilisateur."
-
-#~ msgid ""
-#~ "High-priority scheduling enabled in configuration but not allowed by "
-#~ "policy."
-#~ msgstr ""
-#~ "La planification à haute priorité est activée dans la configuration mais "
-#~ "n'est pas permise par la politique."
-
-#~ msgid "Successfully increased RLIMIT_RTPRIO"
-#~ msgstr "Augmentation de RLIMIT_RTPRIO réussie"
-
-#~ msgid "RLIMIT_RTPRIO failed: %s"
-#~ msgstr "RLIMIT_RTPRIO a échoué : %s"
-
-#~ msgid "Giving up CAP_NICE"
-#~ msgstr "Abandon de CAP_NICE"
-
-#~ msgid ""
-#~ "Real-time scheduling enabled in configuration but not allowed by policy."
-#~ msgstr ""
-#~ "La planification en temps réel est activée mais n'est pas permise par la "
-#~ "politique."
-
-#~ msgid "Limited capabilities successfully to CAP_SYS_NICE."
-#~ msgstr "Limitation des capacités à CAP_SYS_NICE réussie."
-
-#~ msgid "time_new() failed.\n"
-#~ msgstr "Échec de time_new().\n"
-
-#~ msgid "Output %s + Input %s"
-#~ msgstr "Sortie %s + Entrée %s"
-
-#~ msgid "Stream successfully created\n"
-#~ msgstr "Création du flux réussie\n"
-
-#~ msgid "Stream errror: %s\n"
-#~ msgstr "Erreur du flux : %s\n"
-
-#~ msgid "Connection established.\n"
-#~ msgstr "Connexion établie.\n"
-
-#~ msgid ""
-#~ "%s [options] [FILE]\n"
-#~ "\n"
-#~ "  -h, --help                            Show this help\n"
-#~ "      --version                         Show version\n"
-#~ "\n"
-#~ "  -v, --verbose                         Enable verbose operation\n"
-#~ "\n"
-#~ "  -s, --server=SERVER                   The name of the server to connect "
-#~ "to\n"
-#~ "  -d, --device=DEVICE                   The name of the sink to connect "
-#~ "to\n"
-#~ "  -n, --client-name=NAME                How to call this client on the "
-#~ "server\n"
-#~ "      --stream-name=NAME                How to call this stream on the "
-#~ "server\n"
-#~ "      --volume=VOLUME                   Specify the initial (linear) "
-#~ "volume in range 0...65536\n"
-#~ "      --channel-map=CHANNELMAP          Set the channel map to the use\n"
-#~ msgstr ""
-#~ "%s [options] [FICHIER]\n"
-#~ "\n"
-#~ "  -h, --help                            Affiche cette aide\n"
-#~ "      --version                         Affiche la version\n"
-#~ "\n"
-#~ "  -v, --verbose                         Active le mode verbeux\n"
-#~ "\n"
-#~ "  -s, --server=SERVEUR                  Le nom du serveur auquel se "
-#~ "connecter\n"
-#~ "  -d, --device=PÉRIPHÉRIQUE             Le nom de la destination à "
-#~ "laquelle se connecter\n"
-#~ "  -n, --client-name=NOM                 Définit le nom de ce client sur "
-#~ "le serveur\n"
-#~ "      --stream-name=NOM                 Définit le nom de ce flux sur le "
-#~ "serveur\n"
-#~ "      --volume=VOLUME                   Définit le volume initial "
-#~ "(linéaire) entre 0 et 65536\n"
-#~ "      --channel-map=PLANDESCANAUX       Définit le plan des canaux à "
-#~ "utiliser\n"
-
-#~ msgid ""
-#~ "paplay %s\n"
-#~ "Compiled with libpulse %s\n"
-#~ "Linked with libpulse %s\n"
-#~ msgstr ""
-#~ "paplay %s\n"
-#~ "Compilé avec libpulse %s\n"
-#~ "Lié avec libpulse %s\n"
-
-#~ msgid "Invalid channel map\n"
-#~ msgstr "Plan des canaux invalide\n"
-
-#~ msgid "Failed to open file '%s'\n"
-#~ msgstr "Échec lors de l'ouverture du fichier « %s »\n"
-
-#~ msgid "Channel map doesn't match file.\n"
-#~ msgstr "Le plan des canaux ne correspond pas au fichier.\n"
-
-#~ msgid "Using sample spec '%s'\n"
-#~ msgstr "Utilisation de la spécification de l'échantillon « %s »\n"
-
-#~ msgid ""
-#~ "Called SUID root and real-time and/or high-priority scheduling was "
-#~ "requested in the configuration. However, we lack the necessary "
-#~ "privileges:\n"
-#~ "We are not in group '"
-#~ msgstr ""
-#~ "Le SUID root a été appelé et la planification à haute priorité/en temps "
-#~ "réel demandée dans la configuration. Néanmoins nous n'avons pas les "
-#~ "permissions nécessaires :\n"
-#~ "nous ne somme pas dans le groupe "
-
-#~ msgid "--log-time boolean argument"
-#~ msgstr "--disallow-exit requiert un paramètre booléen"
-
-#~ msgid "Default sink name (%s) does not exist in name register."
-#~ msgstr ""
-#~ "Le nom de la destination par défaut (%s) n'existe pas dans le registre "
-#~ "des noms."
-
-#~ msgid "Buffer overrun, dropping incoming data\n"
-#~ msgstr "Saturation du tampon, abandon des données entrantes\n"
-
-#~ msgid "pa_stream_drop() failed: %s\n"
-#~ msgstr "Échec de pa_stream_drop() : %s\n"
-
-#~ msgid "muted"
-#~ msgstr "en sourdine"
-
-#~ msgid ""
-#~ "*** Autoload Entry #%u ***\n"
-#~ "Name: %s\n"
-#~ "Type: %s\n"
-#~ "Module: %s\n"
-#~ "Argument: %s\n"
-#~ msgstr ""
-#~ "*** Entrée de chargement automatique #%u ***\n"
-#~ "Nom : %s\n"
-#~ "Type : %s\n"
-#~ "Module : %s\n"
-#~ "Paramètre : %s\n"
-
-#~ msgid ""
-#~ "' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
-#~ "For enabling real-time scheduling please acquire the appropriate "
-#~ "PolicyKit priviliges, or become a member of '"
-#~ msgstr ""
-#~ " et PolicyKit refuse de nous accorder les permissions. Abandon du SUID à "
-#~ "nouveau.\n"
-#~ "Pour activer la planification en temps réel, veuillez aquérir les "
-#~ "permissions PolicyKit appropriées, ou devenez membre de "
-
-#~ msgid ""
-#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
-#~ "user."
-#~ msgstr ""
-#~ ", ou augmentez les limites de ressource RLIMIT_NICE/RLIMIT_RTPRIO pour "
-#~ "cet utilisateur."
-
-#~ msgid "socketpair(): %s"
-#~ msgstr "socketpair() : %s"
diff --git a/po/tr.po b/po/hr.po
similarity index 52%
copy from po/tr.po
copy to po/hr.po
index da121d5..3afd720 100644
--- a/po/tr.po
+++ b/po/hr.po
@@ -1,27 +1,24 @@
-# Turkish translation for PulseAudio.
-# Copyright (C) 2014 PulseAudio's COPYRIGHT HOLDER
-# This file is distributed under the same license as the PulseAudio package.
-# Necdet Yücel <necdetyucel at gmail.com>, 2014.
-# Kaan Özdinçer <kaanozdincer at gmail.com>, 2014.
-# Muhammet Kara <muhammetk at gmail.com>, 2015, 2016.
+# Croatian translation for pulseaudio
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the pulseaudio package.
+# gogo <trebelnik2 at gmail.com>, 2017.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PulseAudio master\n"
-"Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?"
-"product=PulseAudio&keywords=I18N+L10N&component=misc\n"
-"POT-Creation-Date: 2016-03-11 02:23+0000\n"
-"PO-Revision-Date: 2016-04-17 01:04+0300\n"
-"Last-Translator: Muhammet Kara <muhammetk at gmail.com>\n"
-"Language-Team: Türkçe <gnome-turk at gnome.org>\n"
-"Language: tr\n"
+"Project-Id-Version: pulseaudio\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-04-27 14:44+0200\n"
+"PO-Revision-Date: 2017-04-27 14:48+0200\n"
+"Last-Translator: gogo <trebelnik2 at gmail.com>\n"
+"Language-Team: Croatian <hr at li.org>\n"
+"Language: hr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Gtranslator 2.91.7\n"
+"X-Launchpad-Export-Date: 2017-04-20 21:04+0000\n"
+"X-Generator: Poedit 1.8.7.1\n"
 
-#: ../src/daemon/cmdline.c:111
+#: ../src/daemon/cmdline.c:113
 #, c-format
 msgid ""
 "%s [options]\n"
@@ -80,6 +77,7 @@ msgid ""
 "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
 "                                        platforms that support it.\n"
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+"      --enable-memfd[=BOOL]             Enable memfd shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
 "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
@@ -92,643 +90,643 @@ msgid ""
 "\n"
 "  -n                                    Don't load default script file\n"
 msgstr ""
-"%s [seçenekler]\n"
+"%s [mogućnosti]\n"
 "\n"
-"KOMUTLAR:\n"
-"  -h, --help                            Bu yardımı gösterir\n"
-"      --version                         Sürümü gösterir\n"
-"      --dump-conf                       Öntanımlı yapılandırmayı döker\n"
-"      --dump-modules                    Mevcut modüllerin listesini döker\n"
-"      --dump-resample-methods           Kullanılabilir yeniden örnekleme "
-"yöntemlerini döker\n"
-"      --cleanup-shm                     Eski paylaşımlı bellek segmentlerini "
-"temizler\n"
-"      --start                           Eğer çalışmıyorsa artalan işlemleri "
-"başlatır\n"
-"  -k  --kill                             Çalışan bir artalan işlemi "
-"sonlandırır\n"
-"      --check                         Çalışan bir artalan işlemi kontrol "
-"eder (sadece çıkış kodu döner)\n"
+"NAREDBE:\n"
+"  -h, --help                            Prikaži ovu pomoć\n"
+"      --version                         Prikaži inačicu\n"
+"      --dump-conf                       Ispiši zadano podešavanje\n"
+"      --dump-modules                    Ispiši popis dostupnih modula\n"
+"      --dump-resample-methods           Ispiši dostupne načine normalizacije "
+"zvuka\n"
+"      --cleanup-shm                     Čišćenje dijeljenih segmenata "
+"memorije\n"
+"      --start                           Pokreni pozadinski program ako nije "
+"pokrenut\n"
+"  -k  --kill                            Ubij pokrenuti pozadinski program\n"
+"      --check                           Provjeri pozadinski program (samo "
+"vraća izlazni kôd)\n"
 "\n"
-"SEÇENEKLER:\n"
-"      --system[=BOOL]                   Sistem çapında örnek olarak "
-"çalıştırır\n"
-"  -D, --daemonize[=BOOL]                Başladıktan sonra bir artalan işlem "
-"gibi çalıştırır\n"
-"      --fail[=BOOL]                     Başlangıç başarısız olduğunda çıkar\n"
-"      --high-priority[=BOOL]            Yüksek seviye ayarlamayı dener\n"
-"                                        (SUID ya da yüksek RLIMIT_NICE ile\n"
-"                                        sadece root olarak kullanılabilir)\n"
-"      --realtime[=BOOL]                 Gerçek zamanlı zamanlamayı "
-"etkinleştirmeyi dener\n"
-"                                        (SUID ya da yüksek RLIMIT_RTPRIO "
-"ile\n"
-"                                        sadece root olarak kullanılabilir)\n"
-"      --disallow-module-loading[=BOOL]  Başlangıçtan sonra kullanıcının\n"
-"                                        yükleme/kaldırma istediği modüllere "
-"izin vermez\n"
-"      --disallow-exit[=BOOL]            Kullanıcının çıkış isteğine izin "
-"vermez\n"
-"      --exit-idle-time=SECS             Boştayken ve  zamanı geçtiğinde\n"
-"                                        artalan işlemi sonlandırır\n"
-"      --scache-idle-time=SECS           Boştayken ve zamanı geçtiğinde "
-"otomatik\n"
-"                                        yüklenmiş örnekleri kaldırır\n"
-"      --log-level[=LEVEL]               Ayrıntı seviyesini ayarlar ya da "
-"artırır\n"
-"  -v  --verbose                         Ayrıntı seviyesini artırır\n"
-"      --log-target={auto,syslog,stderr,dosya:PATH,yenidosya:PATH}\n"
-"                                        Logların bulunacağı hedefi yolu "
-"belirtir\n"
-"      --log-meta[=BOOL]                 Log iletilerinde kod konumları "
-"bulunur\n"
-"      --log-time[=BOOL]                  Log iletilerinde zaman damgası "
-"bulunur\n"
-"      --log-backtrace=FRAMES            Log iletilerinde bir geri izleme "
-"bulunur\n"
-"  -p, --dl-search-path=PATH             Dinamik paylaşımlı nesneler "
-"(eklentiler)\n"
-"                                        için arama yolu ayarlar\n"
-"      --resample-method=METHOD          Belirtilen yeniden "
-"örneklendirme                                          yöntemini kullanır\n"
-"                                        (Olası değerler için şuna bakın\n"
-"                                         --dump-resample-methods)\n"
-"      --use-pid-file[=BOOL]             Bir PID dosyası oluştur\n"
-"      --no-cpu-limit[=BOOL]             Desteklendiği platformlarda\n"
-"                                        CPU yükü sınırlayıcı kurmaz.\n"
-"      --disable-shm[=BOOL]              Paylaşımlı bellek desteğini devre "
-"dışı bırakır.\n"
+"OPTIONS:\n"
+"      --system[=BOOL]                   Pokreni na cijelom sustavu\n"
+"  -D, --daemonize[=BOOL]                Pokreni kao pozadinski program nakon "
+"pokretanja\n"
+"      --fail[=BOOL]                     Zatvori kada pokretanje ne uspije\n"
+"      --high-priority[=BOOL]            Pokušaj postaviti najvišu "
+"prihvatljivu razinu\n"
+"                                        (Samo je dostupno korijenskom "
+"korisniku, pri SUID-u ili\n"
+"                                        s povišenim RLIMIT_NICE)\n"
+"      --realtime[=BOOL]                 Pokušaj omogućiti raspored u "
+"stvarnom vremenu\n"
+"                                        (samo je dostupno korijenskom "
+"korisniku, pri SUID-u ili\n"
+"                                        s povišenim RLIMIT_RTPRIO)\n"
+"      --disallow-module-loading[=BOOL]  Zabrani modulu korisnika zahtijevani "
+"modul\n"
+"                                        učitavanja/uklanjanja nakon "
+"pokretanja\n"
+"      --disallow-exit[=BOOL]            Zabrani zahtjev izlaza korisnika\n"
+"      --exit-idle-time=SEK             Zatvori pozadinski program u "
+"mirovanju i ovaj\n"
+"                                        puta proslijedi\n"
+"      --scache-idle-time=SEK           Ukloni automatski učitane uzorke u "
+"mirovanju i\n"
+"                                        ovaj puta proslijedi\n"
+"      --log-level[=RAZINA]               Povećaj ili postavi razinu "
+"opširnijeg zapisivanja\n"
+"  -v  --verbose                         Povećaj razinu opširnosti\n"
+"      --log-target={auto,syslog,stderr,datoteka:PUTANJA,nova datoteka:"
+"PUTANJA}\n"
+"                                        Određuje mete zapisa\n"
+"      --log-meta[=BOOL]                 Uključi kôd lokacije u poruke "
+"zapisa\n"
+"      --log-time[=BOOL]                 Uključi vremenske oznake u poruke "
+"zapisa\n"
+"      --log-backtrace=OKVIRI            Uključi povratno praćenje u poruke "
+"zapisa\n"
+"  -p, --dl-search-path=PUTANJA             Postavi putanju pretrage za "
+"promjenljivo dijeljene\n"
+"                                        objekte (priključke)\n"
+"      --resample-method=NAČIN          Koristi određeni način normalizacije "
+"zvuka\n"
+"                                        (Pogledaj --dump-resample-methods "
+"za\n"
+"                                        moguće vrijednosti)\n"
+"      --use-pid-file[=BOOL]             Stvori PID datoteku\n"
+"      --no-cpu-limit[=BOOL]             Nemoj instalirati CPU ograničivač "
+"učitavanja na\n"
+"                                        platforme koje ga podržavaju.\n"
+"      --disable-shm[=BOOL]              Onemogući podršku dijeljenja "
+"memorije.\n"
+"      --enable-memfd[=BOOL]             Omogući memfd podršku dijeljenja "
+"memorije.\n"
 "\n"
-"BAŞLATMA KOMUT DOSYALARI:\n"
-"  -L, --load=\"MODÜL DEĞİŞKENLERİ\"         Belirtilen değişkenler ile\n"
-"                                        belirtilen eklenti modüllerini "
-"yükler.\n"
-"  -F, --file=DOSYAADI                   Belirtilen betiği çalıştırır\n"
-"  -C                                  Başlangıçtan sonra çalışan TTY "
-"üzerinde\n"
-"                                        bir komut satırı açar\n"
+"SKRIPTE POKRETANJA:\n"
+"  -L, --load=\"ARGUMENTI MODULA\"         Učitaj određeni priključak sa\n"
+"                                        određenim argumentom\n"
+"  -F, --file=NAZIV DATOTEKE                   Pokreni određenu skriptu\n"
+"  -C                                    Otvori naredbeni redak u pokrenutom "
+"TTY-jem\n"
+"                                        nakon pokretanja\n"
 "\n"
-"  -n                                    Öntanımlı betik dosyasını yüklemez\n"
+"  -n                                    Ne učitavaj zadanu datoteku skripte\n"
 
-#: ../src/daemon/cmdline.c:243
+#: ../src/daemon/cmdline.c:246
 msgid "--daemonize expects boolean argument"
-msgstr "--daemonize boolean değişken bekler"
+msgstr "--deamonize očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:251
+#: ../src/daemon/cmdline.c:254
 msgid "--fail expects boolean argument"
-msgstr "--fail boolean değişken bekler"
+msgstr "--fail očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:262
+#: ../src/daemon/cmdline.c:265
 msgid ""
 "--log-level expects log level argument (either numeric in range 0..4 or one "
 "of debug, info, notice, warn, error)."
 msgstr ""
-"--log-level log seviyesi değişkeni bekler (ya 0..4 aralığında sayısal değer "
-"ya da debug, info, notice, warn, error değişkenlerinden birini)."
+"--log-level očekuje argument na razini zapisa (ili brojeve u rasponu 0..4 "
+"ili jedan od zapisa uklanjanja grešaka,informacija,bilješka,upozorenje,"
+"greška)"
 
-#: ../src/daemon/cmdline.c:274
+#: ../src/daemon/cmdline.c:277
 msgid "--high-priority expects boolean argument"
-msgstr "--high-priority boolean değişken bekler"
+msgstr "--high-priority očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:282
+#: ../src/daemon/cmdline.c:285
 msgid "--realtime expects boolean argument"
-msgstr "--realtime boolean değişken bekler"
+msgstr "--realtime očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:290
+#: ../src/daemon/cmdline.c:293
 msgid "--disallow-module-loading expects boolean argument"
-msgstr "--disallow-module-loading boolean değişken bekler"
+msgstr "--disallow-module-loading očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:298
+#: ../src/daemon/cmdline.c:301
 msgid "--disallow-exit expects boolean argument"
-msgstr "--disallow-exit boolean değişken bekler"
+msgstr "--disallow-exit očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:306
+#: ../src/daemon/cmdline.c:309
 msgid "--use-pid-file expects boolean argument"
-msgstr "--use-pid-file boolean değişken bekler"
+msgstr "--use-pid-file očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:325
+#: ../src/daemon/cmdline.c:328
 msgid ""
 "Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a "
 "valid file name 'file:<path>', 'newfile:<path>'."
 msgstr ""
-"Geçersiz log hedefi: ya 'syslog', 'journal', 'stderr', 'auto' ya da geçerli "
-"bir dosya adı 'dosya: <path>','yenidosya:<path>' kullan."
+"Neispravno odredište zapisa: koristite ili 'syslog', 'journal','stderr',  "
+"'auto' ili valjani naziv datoteke 'datoteka:<putanja>', 'nova datoteka:"
+"<putanja>'."
 
-#: ../src/daemon/cmdline.c:327
+#: ../src/daemon/cmdline.c:330
 msgid ""
 "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
 "name 'file:<path>', 'newfile:<path>'."
 msgstr ""
-"Geçersiz log hedefi: ya 'syslog', 'stderr', 'auto' ya da geçerli bir dosya "
-"adı 'dosya: <path>','yenidosya:<path>' kullan."
+"Neispravno odredište zapisa: koristite ili 'syslog', 'stderr' ili 'auto' ili "
+"valjani naziv datoteke 'datoteka:<putanja>', 'nova-datoteka:<putanja>'."
 
-#: ../src/daemon/cmdline.c:335
+#: ../src/daemon/cmdline.c:338
 msgid "--log-time expects boolean argument"
-msgstr "--log-time boolean değişken bekler"
+msgstr "--log-time očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:343
+#: ../src/daemon/cmdline.c:346
 msgid "--log-meta expects boolean argument"
-msgstr "--log-meta boolean değişken bekler"
+msgstr "--log-meta očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:363
+#: ../src/daemon/cmdline.c:366
 #, c-format
 msgid "Invalid resample method '%s'."
-msgstr "Geçersiz yeniden örneklendirme yöntemi '%s'."
+msgstr "Neispravan način normalizacije zvuka '%s'."
 
-#: ../src/daemon/cmdline.c:370
+#: ../src/daemon/cmdline.c:373
 msgid "--system expects boolean argument"
-msgstr "--system boolean değişken bekler"
+msgstr "--system očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:378
+#: ../src/daemon/cmdline.c:381
 msgid "--no-cpu-limit expects boolean argument"
-msgstr "--no-cpu-limit boolean değişken bekler"
+msgstr "--no-cpu-limit očekuje boolean argument"
 
-#: ../src/daemon/cmdline.c:386
+#: ../src/daemon/cmdline.c:389
 msgid "--disable-shm expects boolean argument"
-msgstr "--disable-shm boolean değişken bekler"
+msgstr "--disable-shm očekuje boolean argument"
+
+#: ../src/daemon/cmdline.c:397
+msgid "--enable-memfd expects boolean argument"
+msgstr "--enable-memfd očekuje boolean argument"
 
-#: ../src/daemon/daemon-conf.c:259
+#: ../src/daemon/daemon-conf.c:262
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
-msgstr "[%s:%u] Geçersiz log hedefi '%s'."
+msgstr "[%s:%u] neispravno odredište zapisa '%s'."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:277
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
-msgstr "[%s:%u] Geçersiz log seviyesi '%s'."
+msgstr "[%s:%u] neispravna razina zapisa '%s'."
 
-#: ../src/daemon/daemon-conf.c:289
+#: ../src/daemon/daemon-conf.c:292
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "[%s:%u] Geçersiz yeniden örneklendirme yöntemi '%s'."
+msgstr "[%s:%u] neispravan način normalizacije zvuka '%s'."
 
-#: ../src/daemon/daemon-conf.c:311
+#: ../src/daemon/daemon-conf.c:314
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "[%s:%u] Geçersiz rlimit '%s'."
+msgstr "[%s:%u] neispravan rlimit '%s'."
 
-#: ../src/daemon/daemon-conf.c:331
+#: ../src/daemon/daemon-conf.c:334
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "[%s:%u] Geçersiz örnekleme biçimi '%s'."
+msgstr "[%s:%u] neispravan format uzorka '%s'."
 
-#: ../src/daemon/daemon-conf.c:348 ../src/daemon/daemon-conf.c:365
+#: ../src/daemon/daemon-conf.c:351 ../src/daemon/daemon-conf.c:368
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr "[%s:%u] Geçersiz örnekleme oranı '%s'."
+msgstr "[%s:%u] neispravna frekvencija '%s'."
 
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:391
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr "[%s:%u] Geçersiz örnekleme kanalları '%s'."
+msgstr "[%s:%u] neispravan uzorak kanala '%s'."
 
-#: ../src/daemon/daemon-conf.c:405
+#: ../src/daemon/daemon-conf.c:408
 #, c-format
 msgid "[%s:%u] Invalid channel map '%s'."
-msgstr "[%s:%u] Geçersiz kanal adresleme '%s'."
+msgstr "[%s:%u] neispravno mapiranje kanala '%s'."
 
-#: ../src/daemon/daemon-conf.c:422
+#: ../src/daemon/daemon-conf.c:425
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr "[%s:%u] Geçersiz bölümlenme sayısı '%s'."
+msgstr "[%s:%u] neispravan broj fragmenta '%s'."
 
-#: ../src/daemon/daemon-conf.c:439
+#: ../src/daemon/daemon-conf.c:442
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "[%s:%u] Geçersiz bölümlenme boyutu '%s'."
+msgstr "[%s:%u] neispravna veličina fragmenta '%s'."
 
-#: ../src/daemon/daemon-conf.c:456
+#: ../src/daemon/daemon-conf.c:459
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "[%s:%u] Geçersiz nice seviyesi '%s'."
+msgstr "[%s:%u] neispravna prihvatljiva razina '%s'."
 
-#: ../src/daemon/daemon-conf.c:499
+#: ../src/daemon/daemon-conf.c:502
 #, c-format
 msgid "[%s:%u] Invalid server type '%s'."
-msgstr "[%s:%u] Geçersiz sunucu türü '%s'."
+msgstr "[%s:%u] neispravna vrsta poslužitelja '%s'."
 
-#: ../src/daemon/daemon-conf.c:613
+#: ../src/daemon/daemon-conf.c:620
 #, c-format
 msgid "Failed to open configuration file: %s"
-msgstr "Yapılandırma dosyası açılamadı: %s"
+msgstr "Nemoguće otvaranje datoteke podešavanja: %s"
 
-#: ../src/daemon/daemon-conf.c:629
+#: ../src/daemon/daemon-conf.c:636
 msgid ""
 "The specified default channel map has a different number of channels than "
 "the specified default number of channels."
 msgstr ""
-"Belirtilen öntanımlı kanal adresleme belirtilmiş öntanımlı kanal sayısından "
-"farklı sayıda kanala sahiptir."
+"Određeno zadano mapiranje kanala ima različit broj kanala od određenih "
+"zadanih broja kanala."
 
-#: ../src/daemon/daemon-conf.c:716
+#: ../src/daemon/daemon-conf.c:723
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
-msgstr "### Yapılandırma dosyasından oku: %s ###\n"
+msgstr "### Čitano iz datoteke podešavanja: %s ###\n"
 
 #: ../src/daemon/dumpmodules.c:57
 #, c-format
 msgid "Name: %s\n"
-msgstr "Ad: %s\n"
+msgstr "Naziv: %s\n"
 
 #: ../src/daemon/dumpmodules.c:60
 #, c-format
 msgid "No module information available\n"
-msgstr "Hiçbir modül bilgisi bulunamadı\n"
+msgstr "Nedostupna informacija modula\n"
 
 #: ../src/daemon/dumpmodules.c:63
 #, c-format
 msgid "Version: %s\n"
-msgstr "Sürüm: %s\n"
+msgstr "Inačica: %s\n"
 
 #: ../src/daemon/dumpmodules.c:65
 #, c-format
 msgid "Description: %s\n"
-msgstr "Açıklama: %s\n"
+msgstr "Opis: %s\n"
 
 #: ../src/daemon/dumpmodules.c:67
 #, c-format
 msgid "Author: %s\n"
-msgstr "Yazar: %s\n"
+msgstr "Autor: %s\n"
 
 #: ../src/daemon/dumpmodules.c:69
 #, c-format
 msgid "Usage: %s\n"
-msgstr "Kullanım: %s\n"
+msgstr "Korištenje: %s\n"
 
 #: ../src/daemon/dumpmodules.c:70
 #, c-format
 msgid "Load Once: %s\n"
-msgstr "Bir kez Yükle: %s\n"
+msgstr "Učitano jednom: %s\n"
 
 #: ../src/daemon/dumpmodules.c:72
 #, c-format
 msgid "DEPRECATION WARNING: %s\n"
-msgstr "UYGUNSUZLUK UYARISI: %s\n"
+msgstr "UPOZORENJE NEODOBRAVANJA: %s\n"
 
 #: ../src/daemon/dumpmodules.c:76
 #, c-format
 msgid "Path: %s\n"
-msgstr "Yol: %s\n"
+msgstr "Putanja: %s\n"
 
 #: ../src/daemon/ltdl-bind-now.c:75
 #, c-format
 msgid "Failed to open module %s: %s"
-msgstr "'%s' modülü açılamadı: %s"
+msgstr "Neuspjelo otvaranje modula %s: %s"
 
 #: ../src/daemon/ltdl-bind-now.c:126
 msgid "Failed to find original lt_dlopen loader."
-msgstr "Orjinal lt_dlopen yükleyicisi bulunamadı."
+msgstr "Neuspjelo traženje izvornog lt_dlopen učitača."
 
 #: ../src/daemon/ltdl-bind-now.c:131
 msgid "Failed to allocate new dl loader."
-msgstr "Yeni dl yükleyici ayırma işlemi başarısız oldu."
+msgstr "Neuspjela dodijela novog dl učitača."
 
 #: ../src/daemon/ltdl-bind-now.c:144
 msgid "Failed to add bind-now-loader."
-msgstr "Bind-now-loader eklenemedi."
+msgstr "Neuspjelo dodavanje bind-now-loadera"
 
 #: ../src/daemon/main.c:160
 #, c-format
 msgid "Failed to find user '%s'."
-msgstr "Kullanıcı '%s' bulunamadı."
+msgstr "Neuspjelo pronalaženje korisnika '%s'"
 
 #: ../src/daemon/main.c:165
 #, c-format
 msgid "Failed to find group '%s'."
-msgstr "Grup '%s' bulunamadı."
+msgstr "Neuspjelo pronalaženje grupe '%s'"
 
 #: ../src/daemon/main.c:174
 #, c-format
 msgid "GID of user '%s' and of group '%s' don't match."
-msgstr "'%s' kullanıcısı ve '%s' grubunun GID eşleşmiyor."
+msgstr "GID korisnika '%s' i grupe '%s' se ne podudaraju."
 
 #: ../src/daemon/main.c:179
 #, c-format
 msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr "Kullanıcı '%s''nin ev dizini '%s' değildir, yoksayılıyor."
+msgstr "Osobna mapa korisnika '%s' nije '%s', zanemarujem."
 
 #: ../src/daemon/main.c:182 ../src/daemon/main.c:187
 #, c-format
 msgid "Failed to create '%s': %s"
-msgstr "'%s' oluşturulamadı: %s"
+msgstr "Neuspjelo stvaranje '%s': %s"
 
 #: ../src/daemon/main.c:194
 #, c-format
 msgid "Failed to change group list: %s"
-msgstr "Grup listesi değiştirilemedi: %s"
+msgstr "Neuspjela promjena grupnog popisa: %s"
 
 #: ../src/daemon/main.c:210
 #, c-format
 msgid "Failed to change GID: %s"
-msgstr "GID değiştirilemedi: %s"
+msgstr "Neuspjela promjena GID-a: %s"
 
 #: ../src/daemon/main.c:226
 #, c-format
 msgid "Failed to change UID: %s"
-msgstr "UID değiştirilemedi: %s"
+msgstr "Neuspjela promjena UID-a: %s"
 
 #: ../src/daemon/main.c:255
 msgid "System wide mode unsupported on this platform."
-msgstr "Sistem geneli kipi bu platformda desteklenmiyor."
+msgstr "Način širom sustava nije podržan na ovoj platformi."
 
 #: ../src/daemon/main.c:484
 msgid "Failed to parse command line."
-msgstr "Komut satırı çözümlenemedi."
+msgstr "Neuspjela obrada naredbenog redka."
 
 #: ../src/daemon/main.c:523
 msgid ""
 "System mode refused for non-root user. Only starting the D-Bus server lookup "
 "service."
 msgstr ""
-"Sistem kipi root olmayan kullanıcıyı reddetti. Sadece D-Bus sunucu arama "
-"servisi başlatıyor."
+"Način rada sustava  je nedostupan za nekorijenske korinike. Samo pokreni D-"
+"Bus poslužitelja usluge pretraživanja."
 
 #: ../src/daemon/main.c:622
 #, c-format
 msgid "Failed to kill daemon: %s"
-msgstr "Artalan işlem durdurulamadı: %s"
+msgstr "Nuspjelo ubijanje pozadinskog programa: %s"
 
 #: ../src/daemon/main.c:651
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
 msgstr ""
-"Bu programın root kullanıcı ile çalıştırılması amaçlanmamıştır (--system "
-"belirtilmediyse)."
+"Ovaj program nije namijenjen za korijensko pokretanje (osim -- ako je "
+"određeno sustavom)"
 
 #: ../src/daemon/main.c:654
 msgid "Root privileges required."
-msgstr "Root hakları gereklidir."
+msgstr "Potrebne su korijenske ovlasti."
 
 #: ../src/daemon/main.c:661
 msgid "--start not supported for system instances."
-msgstr "--start sistem örnekleri için desteklenmiyor."
+msgstr "-- start nije podržan za primjerke sustava"
 
 #: ../src/daemon/main.c:701
 #, c-format
 msgid "User-configured server at %s, refusing to start/autospawn."
-msgstr ""
-"Kullanıcı tarafından yapılandırılmış şuradaki sunucu: %s, başlamayı/otomatik "
-"başlamayı reddediyor."
+msgstr "Korisnički podešen poslužitelj na %s, odbija pokretanje/auto-množenje."
 
 #: ../src/daemon/main.c:707
 #, c-format
 msgid ""
 "User-configured server at %s, which appears to be local. Probing deeper."
 msgstr ""
-"Kullanıcı tarafından yapılandırılmış, yerel olarak görülen şuradaki sunucu: "
-"%s. "
+"Korisnički podešen poslužitelj na %s, izgleda da je lokalan. Dublje "
+"sondiranje."
 
 #: ../src/daemon/main.c:712
-#| msgid "Running in system mode, but --disallow-exit not set!"
 msgid "Running in system mode, but --disallow-exit not set."
-msgstr "Sistem kipinde çalıştırılıyor fakat --disallow-exit ayarlı değil."
+msgstr "Pokrenuto u načinu rada sustava, ali --disallow-exit nije postavljen."
 
 #: ../src/daemon/main.c:715
-#| msgid "Running in system mode, but --disallow-module-loading not set!"
 msgid "Running in system mode, but --disallow-module-loading not set."
 msgstr ""
-"Sistem kipinde çalıştırılıyor fakat --disallow-module-loading ayarlı değil."
+"Pokrenuto u načinu rada sustava, ali --disallow-module-loading nije "
+"postavljen."
 
 #: ../src/daemon/main.c:718
-#| msgid "Running in system mode, forcibly disabling SHM mode!"
 msgid "Running in system mode, forcibly disabling SHM mode."
-msgstr "Sistem kipinde çalıştırılıyor, SHM kipi zorla devre dışı bırakılıyor."
+msgstr "Pokrenuto u načinu rada sustava, prisilno onemogućavanje SHM načina."
 
 #: ../src/daemon/main.c:723
-#| msgid "Running in system mode, forcibly disabling exit idle time!"
 msgid "Running in system mode, forcibly disabling exit idle time."
 msgstr ""
-"Sistem kipinde çalıştırılıyor, boşta kalma süresi çıkışı zorla devre dışı "
-"bırakılıyor."
+"Pokrenuto u načinu rada sustava, prisilno onemogućavanje izlaza vremena "
+"mirovanja."
 
 #: ../src/daemon/main.c:756
 msgid "Failed to acquire stdio."
-msgstr "Stdio alınamadı."
+msgstr "Neuspjelo dobivanje stdio."
 
 #: ../src/daemon/main.c:762 ../src/daemon/main.c:833
 #, c-format
 msgid "pipe() failed: %s"
-msgstr "pipe() başarısız oldu: %s"
+msgstr "pipe() neuspjelo: %s"
 
 #: ../src/daemon/main.c:767 ../src/daemon/main.c:838
 #, c-format
 msgid "fork() failed: %s"
-msgstr "fork() başarısız oldu: %s"
+msgstr "fork() neuspjelo: %s"
 
-#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:568
+#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:562
 #, c-format
 msgid "read() failed: %s"
-msgstr "read() başarısız oldu: %s"
+msgstr "read() neuspjelo: %s"
 
 #: ../src/daemon/main.c:788
 msgid "Daemon startup failed."
-msgstr "Artalan işlemleri başlatma başarısız oldu."
+msgstr "Neuspjelo pokretanje pozadinskog programa."
 
 #: ../src/daemon/main.c:821
 #, c-format
 msgid "setsid() failed: %s"
-msgstr "setsid() başarısız oldu: %s"
+msgstr "setsid() neuspjelo: %s"
 
 #: ../src/daemon/main.c:948
 msgid "Failed to get machine ID"
-msgstr "Makine kimliği alınamadı"
+msgstr "Neuspjelo dobivanje ID-a računala"
 
 #: ../src/daemon/main.c:974
 msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
+"OK, so you are running PA in system mode. Please make sure that you actually "
+"do want to do that.\n"
 "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
 "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
 "mode is usually a bad idea."
 msgstr ""
-"Tamam, sistem kipinde PA çalıştırıyorsunuz. Lütfen bunu yapmamanız "
-"gerektiğini aklınızda bulundurun.\n"
-"Eğer bunu yine de yaparsanız, bir şeyler beklendiği şekilde çalışmazsa o "
-"zaman bu sizin suçunuzdur.\n"
-"Lütfen sistem kipinin neden genellikle kötü bir fikir olduğunun açıklamasını "
-"http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/"
-"WhatIsWrongWithSystemWide/ adresinden okuyunuz."
+"U redu, pokrenuli ste PA u načinu rada sustava. Pobrinite se da to zaista "
+"želite učiniti.\n"
+"Pročitajte http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/"
+"User/WhatIsWrongWithSystemWide/ za objašnjenje zašto je način rada sustava "
+"uobičajeno loša ideja."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:990
 msgid "pa_pid_file_create() failed."
-msgstr "pa_pid_file_create() başarısız oldu."
+msgstr "pa_pid_file_create() neuspjelo."
 
-#: ../src/daemon/main.c:1021
+#: ../src/daemon/main.c:1022
 msgid "pa_core_new() failed."
-msgstr "pa_core_new() başarısız oldu."
+msgstr "pa_core_new() neuspjelo"
 
-#: ../src/daemon/main.c:1089
+#: ../src/daemon/main.c:1092
 msgid "Failed to initialize daemon."
-msgstr "Artalan işlem başlatılamadı."
+msgstr "Neuspjelo pokretanje pozadinskog programa."
 
-#: ../src/daemon/main.c:1094
+#: ../src/daemon/main.c:1097
 msgid "Daemon startup without any loaded modules, refusing to work."
-msgstr "Hiç yüklü modül olmadan artalan işlemlerin çalışması reddediliyor."
+msgstr ""
+"Pozadinski program je pokrenut bez ijednog učitanog modula, odbija raditi."
 
 #: ../src/daemon/pulseaudio.desktop.in.h:1
 msgid "PulseAudio Sound System"
-msgstr "PulseAudio Ses Sistemi"
+msgstr "PulseAudio zvučni sustav"
 
 #: ../src/daemon/pulseaudio.desktop.in.h:2
 msgid "Start the PulseAudio Sound System"
-msgstr "PulseAudio Ses Sistemini Başlat"
+msgstr "Pokreni PulseAudio zvučni sustav"
 
 #: ../src/modules/alsa/alsa-mixer.c:2378
 msgid "Input"
-msgstr "Giriş"
+msgstr "Ulaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:2379
 msgid "Docking Station Input"
-msgstr "Yerleştirme İstasyonu Girişi"
+msgstr "Ulaz priključne stanice"
 
 #: ../src/modules/alsa/alsa-mixer.c:2380
 msgid "Docking Station Microphone"
-msgstr "Yerleştirme İstasyonu Mikrofonu"
+msgstr "Mikrofon priključne stanice"
 
 #: ../src/modules/alsa/alsa-mixer.c:2381
 msgid "Docking Station Line In"
-msgstr "Yerleştirme İstasyonu Hat Girişi"
+msgstr "Ulaz priključne stanice"
 
 #: ../src/modules/alsa/alsa-mixer.c:2382 ../src/modules/alsa/alsa-mixer.c:2467
 msgid "Line In"
-msgstr "Hat girişi"
+msgstr "Ulaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:2383 ../src/modules/alsa/alsa-mixer.c:2461
-#: ../src/modules/bluetooth/module-bluez4-device.c:2099
-#: ../src/modules/bluetooth/module-bluez5-device.c:1710
+#: ../src/modules/bluetooth/module-bluez4-device.c:2104
+#: ../src/modules/bluetooth/module-bluez5-device.c:1696
 msgid "Microphone"
 msgstr "Mikrofon"
 
 #: ../src/modules/alsa/alsa-mixer.c:2384 ../src/modules/alsa/alsa-mixer.c:2462
 msgid "Front Microphone"
-msgstr "Ön Mikrofon"
+msgstr "Prednji mikrofon"
 
 #: ../src/modules/alsa/alsa-mixer.c:2385 ../src/modules/alsa/alsa-mixer.c:2463
 msgid "Rear Microphone"
-msgstr "Arka Mikrofon"
+msgstr "Stražnji mikrofon"
 
 #: ../src/modules/alsa/alsa-mixer.c:2386
 msgid "External Microphone"
-msgstr "Harici Mikrofon"
+msgstr "Vanjski mikrofon"
 
 #: ../src/modules/alsa/alsa-mixer.c:2387 ../src/modules/alsa/alsa-mixer.c:2465
 msgid "Internal Microphone"
-msgstr "Dahili Mikrofon"
+msgstr "Unutarnji mikrofon"
 
 #: ../src/modules/alsa/alsa-mixer.c:2388 ../src/modules/alsa/alsa-mixer.c:2468
 msgid "Radio"
-msgstr "Radyo"
+msgstr "Radio"
 
 #: ../src/modules/alsa/alsa-mixer.c:2389 ../src/modules/alsa/alsa-mixer.c:2469
 msgid "Video"
-msgstr "Görüntü"
+msgstr "Video"
 
 #: ../src/modules/alsa/alsa-mixer.c:2390
 msgid "Automatic Gain Control"
-msgstr "Otomatik Kazanç Kontrolü"
+msgstr "Automatska kontrola pojačanja"
 
 #: ../src/modules/alsa/alsa-mixer.c:2391
 msgid "No Automatic Gain Control"
-msgstr "Otomatik Kazanç Kontrolü Yok"
+msgstr "Bez automatske kontrole pojačanja"
 
 #: ../src/modules/alsa/alsa-mixer.c:2392
 msgid "Boost"
-msgstr "Artır"
+msgstr "Pojačanje"
 
 #: ../src/modules/alsa/alsa-mixer.c:2393
 msgid "No Boost"
-msgstr "Artırma Yok"
+msgstr "Bez pojačanja"
 
 #: ../src/modules/alsa/alsa-mixer.c:2394
 msgid "Amplifier"
-msgstr "Yükseltici"
+msgstr "Pojačalo"
 
 #: ../src/modules/alsa/alsa-mixer.c:2395
 msgid "No Amplifier"
-msgstr "Anfi Yok"
+msgstr "Bez pojačala"
 
 #: ../src/modules/alsa/alsa-mixer.c:2396
 msgid "Bass Boost"
-msgstr "Bas Artır"
+msgstr "Pojačanje basa"
 
 #: ../src/modules/alsa/alsa-mixer.c:2397
 msgid "No Bass Boost"
-msgstr "Bas Artırma"
+msgstr "Bez pojačanja basa"
 
 #: ../src/modules/alsa/alsa-mixer.c:2398
-#: ../src/modules/bluetooth/module-bluez4-device.c:2104
-#: ../src/modules/bluetooth/module-bluez5-device.c:1717
+#: ../src/modules/bluetooth/module-bluez4-device.c:2109
+#: ../src/modules/bluetooth/module-bluez5-device.c:1703
 msgid "Speaker"
-msgstr "Hoparlör"
+msgstr "Zvučnik"
 
 #: ../src/modules/alsa/alsa-mixer.c:2399 ../src/modules/alsa/alsa-mixer.c:2471
 msgid "Headphones"
-msgstr "Kulaklıklar"
+msgstr "Slušalice"
 
 #: ../src/modules/alsa/alsa-mixer.c:2460
 msgid "Analog Input"
-msgstr "Analog Giriş"
+msgstr "Analogni ulaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:2464
 msgid "Dock Microphone"
-msgstr "Yapışık Mikrofon"
+msgstr "Ugrađeni mikrofon"
 
 #: ../src/modules/alsa/alsa-mixer.c:2466
 msgid "Headset Microphone"
-msgstr "Mikrofonlu Kulaklık"
+msgstr "Mikrofon sa slušalicama"
 
 #: ../src/modules/alsa/alsa-mixer.c:2470
 msgid "Analog Output"
-msgstr "Analog Çıkış"
+msgstr "Analogni izlaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:2472
 msgid "LFE on Separate Mono Output"
-msgstr "Ayrı Tekli Çıktılar üzerinde LFE"
+msgstr "(LFE) Efekti niske frekvencije na odvojenom mono izlazu"
 
 #: ../src/modules/alsa/alsa-mixer.c:2473
 msgid "Line Out"
-msgstr "Hat Çıkışı"
+msgstr "Izlaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:2474
 msgid "Analog Mono Output"
-msgstr "Analog Tekli Çıkış"
+msgstr "Analogni mono izlaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:2475
 msgid "Speakers"
-msgstr "Hoparlörler"
+msgstr "Zvučnici"
 
 #: ../src/modules/alsa/alsa-mixer.c:2476
 msgid "HDMI / DisplayPort"
-msgstr "HDMI / ÇıkışıNoktası"
+msgstr "HDMI / DisplayPort"
 
 #: ../src/modules/alsa/alsa-mixer.c:2477
 msgid "Digital Output (S/PDIF)"
-msgstr "Dijital Çıkış (S/PDIF)"
+msgstr "Digitalni izlaz (S/PDIF)"
 
 #: ../src/modules/alsa/alsa-mixer.c:2478
 msgid "Digital Input (S/PDIF)"
-msgstr "Dijital Giriş (S/PDIF)"
+msgstr "Digitalni ulaz (S/PDIF)"
 
 #: ../src/modules/alsa/alsa-mixer.c:2479
 msgid "Digital Passthrough (S/PDIF)"
-msgstr "Sayısal Düzgeçiş (S/PDIF)"
+msgstr "Digitalni prolaz (S/PDIF)"
 
 #: ../src/modules/alsa/alsa-mixer.c:2480
-#| msgid "Multichannel"
 msgid "Multichannel Input"
-msgstr "Çok Kanallı Girdi"
+msgstr "Višekanalni ulaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:2481
-#| msgid "Multichannel"
 msgid "Multichannel Output"
-msgstr "Çok Kanallı Çıktı"
+msgstr "Višekanalni izlaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:3990
 msgid "Analog Mono"
-msgstr "Analog Mono"
+msgstr "Analogni mono"
 
 #. Note: Not translated to "Analog Stereo Input", because the source
 #. * name gets "Input" appended to it automatically, so adding "Input"
@@ -738,127 +736,119 @@ msgstr "Analog Mono"
 #: ../src/modules/alsa/alsa-mixer.c:3991 ../src/modules/alsa/alsa-mixer.c:3997
 #: ../src/modules/alsa/alsa-mixer.c:3998
 msgid "Analog Stereo"
-msgstr "Analog Stereo"
+msgstr "Analogni stereo"
 
 #: ../src/modules/alsa/alsa-mixer.c:3999 ../src/modules/alsa/alsa-mixer.c:4000
 msgid "Multichannel"
-msgstr "Çok kanallı"
+msgstr "Višekanalni"
 
 #: ../src/modules/alsa/alsa-mixer.c:4001
 msgid "Analog Surround 2.1"
-msgstr "Analog Çevresel Ses 2.1"
+msgstr "Analogni surround 2.1"
 
 #: ../src/modules/alsa/alsa-mixer.c:4002
 msgid "Analog Surround 3.0"
-msgstr "Analog Çevresel Ses 3.0"
+msgstr "Analogni surround 3.0"
 
 #: ../src/modules/alsa/alsa-mixer.c:4003
 msgid "Analog Surround 3.1"
-msgstr "Analog Çevresel Ses 3.1"
+msgstr "Analogni surround 3.1"
 
 #: ../src/modules/alsa/alsa-mixer.c:4004
 msgid "Analog Surround 4.0"
-msgstr "Analog Çevresel Ses 4.0"
+msgstr "Analogni surround 4.0"
 
 #: ../src/modules/alsa/alsa-mixer.c:4005
 msgid "Analog Surround 4.1"
-msgstr "Analog Çevresel Ses 4.1"
+msgstr "Analogni surround 4.1"
 
 #: ../src/modules/alsa/alsa-mixer.c:4006
 msgid "Analog Surround 5.0"
-msgstr "Analog Çevresel Ses 5.0"
+msgstr "Analogni surround 5.0"
 
 #: ../src/modules/alsa/alsa-mixer.c:4007
 msgid "Analog Surround 5.1"
-msgstr "Analog Çevresel Ses 5.1"
+msgstr "Analogni surround 5.1"
 
 #: ../src/modules/alsa/alsa-mixer.c:4008
 msgid "Analog Surround 6.0"
-msgstr "Analog Çevresel Ses 6.0"
+msgstr "Analogni surround 6.0"
 
 #: ../src/modules/alsa/alsa-mixer.c:4009
 msgid "Analog Surround 6.1"
-msgstr "Analog Çevresel Ses 6.1"
+msgstr "Analogni surround 6.1"
 
 #: ../src/modules/alsa/alsa-mixer.c:4010
 msgid "Analog Surround 7.0"
-msgstr "Analog Çevresel Ses 7.0"
+msgstr "Analogni surround 7.0"
 
 #: ../src/modules/alsa/alsa-mixer.c:4011
 msgid "Analog Surround 7.1"
-msgstr "Analog Çevresel Ses 7.1"
+msgstr "Analogni surround 7.1"
 
 #: ../src/modules/alsa/alsa-mixer.c:4012
 msgid "Digital Stereo (IEC958)"
-msgstr "Dijital İki Kanallı (IEC958)"
+msgstr "Digitalni stereo (IEC958)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4013
 msgid "Digital Passthrough  (IEC958)"
-msgstr "Sayısal Düzgeçiş  (IEC958)"
+msgstr "Digitalni prolaz  (IEC958)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4014
 msgid "Digital Surround 4.0 (IEC958/AC3)"
-msgstr "Dijital Çevresel Ses 4.0 (IEC958/AC3)"
+msgstr "Digitalni surround 4.0 (IEC958/AC3)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4015
 msgid "Digital Surround 5.1 (IEC958/AC3)"
-msgstr "Dijital Çevresel Ses 5.1 (IEC958/AC3)"
+msgstr "Digitalni surround 5.1 (IEC958/AC3)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4016
 msgid "Digital Surround 5.1 (IEC958/DTS)"
-msgstr "Dijital Çevresel Ses 5.1 (IEC958/DTS)"
+msgstr "Digitalni surround 5.1 (IEC958/DTS)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4017
 msgid "Digital Stereo (HDMI)"
-msgstr "Dijital İki Kanallı (HDMI)"
+msgstr "Digitalni stereo (HDMI)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4018
 msgid "Digital Surround 5.1 (HDMI)"
-msgstr "Dijital Çevresel Ses 5.1 (HDMI)"
+msgstr "Digitalni surround 5.1 (HDMI)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4151
 msgid "Analog Mono Duplex"
-msgstr "Analog Tekli İkili"
+msgstr "Analogni mono obostrani"
 
 #: ../src/modules/alsa/alsa-mixer.c:4152
 msgid "Analog Stereo Duplex"
-msgstr "Analog İkili Stereo"
+msgstr "Analogni stereo obostrani"
 
 #: ../src/modules/alsa/alsa-mixer.c:4153
 msgid "Digital Stereo Duplex (IEC958)"
-msgstr "Sayısal İkili Stereo (IEC958)"
+msgstr "Digitalni stereo obostrani (IEC958)"
 
 #: ../src/modules/alsa/alsa-mixer.c:4154
-#| msgid "Multichannel"
 msgid "Multichannel Duplex"
-msgstr "Çok Kanallı Duplex"
+msgstr "Višekanalni obostrani"
 
 #: ../src/modules/alsa/alsa-mixer.c:4155
 #: ../src/modules/alsa/module-alsa-card.c:186
-#: ../src/modules/bluetooth/module-bluez4-device.c:2295
-#: ../src/modules/bluetooth/module-bluez5-device.c:1941
+#: ../src/modules/bluetooth/module-bluez4-device.c:2324
+#: ../src/modules/bluetooth/module-bluez5-device.c:1951
 msgid "Off"
-msgstr "Kapalı"
+msgstr "Isključeno"
 
 #: ../src/modules/alsa/alsa-mixer.c:4254
 #, c-format
 msgid "%s Output"
-msgstr "%s Çıkışı"
+msgstr "%s izlaz"
 
 #: ../src/modules/alsa/alsa-mixer.c:4262
 #, c-format
 msgid "%s Input"
-msgstr "%s Girişi"
+msgstr "%s ulaz"
 
-#: ../src/modules/alsa/alsa-sink.c:570
+#: ../src/modules/alsa/alsa-sink.c:572
 #, c-format
-#| msgid ""
-#| "ALSA woke us up to write new data to the device, but there was actually "
-#| "nothing to write!\n"
-#| "Most likely this is a bug in the ALSA driver '%s'. Please report this "
-#| "issue to the ALSA developers.\n"
-#| "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-#| "returned 0 or another value < min_avail."
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
 "nothing to write.\n"
@@ -867,14 +857,14 @@ msgid ""
 "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
 "returned 0 or another value < min_avail."
 msgstr ""
-"ALSA aygıta yeni veri yazmamız için bizi uyardı fakat aslında yazılacak "
-"hiçbir şey yoktu.\n"
-"Büyük ihtimalle bu ALSA '%s' sürücüsünde bir hatadır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin.\n"
-"Biz POLLOUT ayarı ile uyandırıldık -- bununla birlikte sonraki "
-"snd_pcm_avail() 0 ya da min_avail değerinden küçük başka bir değer döndü."
+"ALSA nas budi kako bi zapisali nove podatke na uređaj, ali zapravo se nema "
+"ništa za zapisati.\n"
+"To je zacijelo greška u ALSA upravljačkom programu '%s'. Prijavite ovaj "
+"problem ALSA razvijateljima.\n"
+"Probudila nas je POLLOUT postavka -- međutim naknadno snd_pcm_avail() je "
+"vratio 0 ili drugu vrijednost < min_avail."
 
-#: ../src/modules/alsa/alsa-sink.c:747
+#: ../src/modules/alsa/alsa-sink.c:756
 #, c-format
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
@@ -884,22 +874,15 @@ msgid ""
 "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
 "returned 0 or another value < min_avail."
 msgstr ""
-"ALSA aygıta yeni veri yazmamız için bizi uyardı fakat aslında yazılacak "
-"hiçbir şey yok!\n"
-"Büyük ihtimalle bu ALSA '%s' sürücüsünde bir hatadır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin.\n"
-"Biz POLLOUT ayarı ile anladık -- ayrıca sonraki bir snd_pcm_avail() 0 ya da "
-"min_avail değerinden küçük başka bir değer döndü."
+"ALSA nas budi kako bi zapisali nove podatke na uređaj, ali zapravo se nema "
+"ništa za zapisati!\n"
+"To je zacijelo greška u ALSA upravljačkom programu '%s'. Prijavite ovaj "
+"problem ALSA razvijateljima.\n"
+"Probudila nas je POLLOUT postavka -- međutim naknadno snd_pcm_avail() je "
+"vratio 0 ili drugu vrijednost < min_avail."
 
 #: ../src/modules/alsa/alsa-source.c:529
 #, c-format
-#| msgid ""
-#| "ALSA woke us up to read new data from the device, but there was actually "
-#| "nothing to read!\n"
-#| "Most likely this is a bug in the ALSA driver '%s'. Please report this "
-#| "issue to the ALSA developers.\n"
-#| "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-#| "returned 0 or another value < min_avail."
 msgid ""
 "ALSA woke us up to read new data from the device, but there was actually "
 "nothing to read.\n"
@@ -908,12 +891,12 @@ msgid ""
 "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
 "returned 0 or another value < min_avail."
 msgstr ""
-"ALSA aygıttan yeni veri okumamız için bizi uyardı fakat aslında okunacak "
-"hiçbir şey yok.\n"
-"Büyük ihtimalle bu bir ALSA '%s' sürücüsü hatasıdır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin.\n"
-"Biz POLLIN ayarı ile uyandırıldık -- bununla birlikte sonraki bir "
-"snd_pcm_avail() 0 ya da min_avail değerinden küçük başka bir değer döndü."
+"ALSA nas budi kako bi pročitali nove podatke s uređaja, ali zapravo se nema "
+"ništa za pročitati.\n"
+"To je zacijelo greška u ALSA upravljačkom programu '%s'. Prijavite ovaj "
+"problem ALSA razvijateljima.\n"
+"Probudila nas je POLLIN postavka -- međutim naknadno snd_pcm_avail() je "
+"vratio 0 ili drugu vrijednost < min_avail."
 
 #: ../src/modules/alsa/alsa-source.c:680
 #, c-format
@@ -925,14 +908,14 @@ msgid ""
 "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
 "returned 0 or another value < min_avail."
 msgstr ""
-"ALSA aygıttan yeni veri okumamız için bizi uyardı fakat aslında okunacak "
-"hiçbir şey yok!\n"
-"Büyük ihtimalle bu bir ALSA '%s' sürücüsü hatasıdır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin.\n"
-"Biz POLLIN ayarı ile anladık -- ayrıca sonraki snd_pcm_avail() 0 ya da "
-"min_avail değerinden küçük başka bir değer döndü."
+"ALSA nas budi kako bi pročitali nove podatke s uređaja, ali zapravo se nema "
+"ništa za pročitati!\n"
+"To je zacijelo greška u ALSA upravljačkom programu '%s'. Prijavite ovaj "
+"problem ALSA razvijateljima.\n"
+"Probudila nas je POLLIN postavka -- međutim naknadno snd_pcm_avail() je "
+"vratio 0 ili drugu vrijednost < min_avail."
 
-#: ../src/modules/alsa/alsa-util.c:1166 ../src/modules/alsa/alsa-util.c:1241
+#: ../src/modules/alsa/alsa-util.c:1168 ../src/modules/alsa/alsa-util.c:1243
 #, c-format
 msgid ""
 "snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -940,11 +923,12 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"snd_pcm_avail() son derece büyük bir değer döndü: %lu bayt (%lu ms).\n"
-"Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin."
+"snd_pcm_avail() je vratio vrijednost koja je iznimno velika: %lu bajta (%lu "
+"ms).\n"
+"Najvjerojatnije je ovo greška ALSA upravljačkog programa '%s'. Prijavite "
+"problem ALSA razvijateljima."
 
-#: ../src/modules/alsa/alsa-util.c:1216
+#: ../src/modules/alsa/alsa-util.c:1218
 #, c-format
 msgid ""
 "snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s"
@@ -952,11 +936,12 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"snd_pcm_avail() son derece büyük bir değer döndü: %li bayt (%s%lu ms).\n"
-"Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin."
+"snd_pcm_delay() je vratio vrijednost koja je iznimno velika: %li bajta (%s"
+"%lu ms).\n"
+"Najvjerojatnije je ovo greška ALSA upravljačkog programa '%s'. Prijavite "
+"problem ALSA razvijateljima."
 
-#: ../src/modules/alsa/alsa-util.c:1257
+#: ../src/modules/alsa/alsa-util.c:1259
 #, c-format
 msgid ""
 "snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
@@ -964,12 +949,12 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"snd_pcm_avail_delay() garip değerler döndü: gecikme %lu kazançtan %lu daha "
-"azdır.\n"
-"Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin."
+"snd_pcm_avail_delay() je vratio nepoznate vrijednosti: kašnjenje %lu je "
+"manje od %lu.\n"
+"Najvjerojatnije je ovo greška ALSA upravljačkog programa '%s'. Prijavite "
+"problem ALSA razvijateljima."
 
-#: ../src/modules/alsa/alsa-util.c:1300
+#: ../src/modules/alsa/alsa-util.c:1302
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -977,104 +962,94 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"snd_pcm_mmap_begin() son derece büyük bir değer döndü: %lu bayt (%lu ms).\n"
-"Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
-"geliştiricilerine bildirin."
+"snd_pcm_mmap_begin() je vratio vrijednost koja je iznimno velika: %lu bajta "
+"(%lu ms).\n"
+"Najvjerojatnije je ovo greška ALSA upravljačkog programa '%s'. Prijavite "
+"problem ALSA razvijateljima."
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2089
-#: ../src/modules/bluetooth/module-bluez5-device.c:1700
+#: ../src/modules/bluetooth/module-bluez4-device.c:2094
+#: ../src/modules/bluetooth/module-bluez5-device.c:1686
 msgid "Headset"
-msgstr "Kulaklık"
+msgstr "Slušalice s mikrofonom"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2094
-#: ../src/modules/bluetooth/module-bluez5-device.c:1705
+#: ../src/modules/bluetooth/module-bluez4-device.c:2099
+#: ../src/modules/bluetooth/module-bluez5-device.c:1691
 msgid "Handsfree"
-msgstr "Ahizesiz"
+msgstr "Bez-ruku"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2109
-#: ../src/modules/bluetooth/module-bluez5-device.c:1723
+#: ../src/modules/bluetooth/module-bluez4-device.c:2114
+#: ../src/modules/bluetooth/module-bluez5-device.c:1709
 msgid "Headphone"
-msgstr "Kulaklık"
+msgstr "Slušalice"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2114
-#: ../src/modules/bluetooth/module-bluez5-device.c:1728
+#: ../src/modules/bluetooth/module-bluez4-device.c:2119
+#: ../src/modules/bluetooth/module-bluez5-device.c:1714
 msgid "Portable"
-msgstr "Taşınabilir"
+msgstr "Prijenosnik"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2119
-#: ../src/modules/bluetooth/module-bluez5-device.c:1733
+#: ../src/modules/bluetooth/module-bluez4-device.c:2124
+#: ../src/modules/bluetooth/module-bluez5-device.c:1719
 msgid "Car"
-msgstr "Araba"
+msgstr "Automobil"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2124
-#: ../src/modules/bluetooth/module-bluez5-device.c:1738
+#: ../src/modules/bluetooth/module-bluez4-device.c:2129
+#: ../src/modules/bluetooth/module-bluez5-device.c:1724
 msgid "HiFi"
-msgstr "Yüksek duyarlılık"
+msgstr "HiFi"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2129
-#: ../src/modules/bluetooth/module-bluez5-device.c:1743
+#: ../src/modules/bluetooth/module-bluez4-device.c:2134
+#: ../src/modules/bluetooth/module-bluez5-device.c:1729
 msgid "Phone"
 msgstr "Telefon"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2137
-#: ../src/modules/bluetooth/module-bluez5-device.c:1695
-#: ../src/modules/bluetooth/module-bluez5-device.c:1711
-#: ../src/modules/bluetooth/module-bluez5-device.c:1749
+#: ../src/modules/bluetooth/module-bluez4-device.c:2142
+#: ../src/modules/bluetooth/module-bluez5-device.c:1681
+#: ../src/modules/bluetooth/module-bluez5-device.c:1697
+#: ../src/modules/bluetooth/module-bluez5-device.c:1735
 msgid "Bluetooth Output"
-msgstr "Bluetooth Çıkışı"
+msgstr "Bluetooth izlaz"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2140
-#: ../src/modules/bluetooth/module-bluez5-device.c:1694
-#: ../src/modules/bluetooth/module-bluez5-device.c:1716
-#: ../src/modules/bluetooth/module-bluez5-device.c:1722
-#: ../src/modules/bluetooth/module-bluez5-device.c:1748
+#: ../src/modules/bluetooth/module-bluez4-device.c:2145
+#: ../src/modules/bluetooth/module-bluez5-device.c:1680
+#: ../src/modules/bluetooth/module-bluez5-device.c:1702
+#: ../src/modules/bluetooth/module-bluez5-device.c:1708
+#: ../src/modules/bluetooth/module-bluez5-device.c:1734
 msgid "Bluetooth Input"
-msgstr "Bluetooth Girişi"
+msgstr "Bluetooth ulaz"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2176
+#: ../src/modules/bluetooth/module-bluez4-device.c:2186
 msgid "High Fidelity Playback (A2DP)"
-msgstr "Yüksek Kaliteli Çalma (A2DP)"
+msgstr "Reprodukcija visoke autentičnosti (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2187
+#: ../src/modules/bluetooth/module-bluez4-device.c:2198
 msgid "High Fidelity Capture (A2DP)"
-msgstr "Yüksek Kaliteli Yakalama (A2DP)"
+msgstr "Snimanje visoke autentičnosti (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2198
+#: ../src/modules/bluetooth/module-bluez4-device.c:2210
 msgid "Telephony Duplex (HSP/HFP)"
-msgstr "Çift yönlü Telefon (HSP/HFP)"
+msgstr "Obostrana telefonija (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2210
+#: ../src/modules/bluetooth/module-bluez4-device.c:2223
 msgid "Handsfree Gateway"
-msgstr "Eller Serbest Geçidi"
+msgstr "Bezručni pristupnik"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1786
+#: ../src/modules/bluetooth/module-bluez5-device.c:1776
 msgid "High Fidelity Playback (A2DP Sink)"
-msgstr "Yüksek Kaliteli Çalma (A2DP Alıcı)"
+msgstr "Reprodukcija visoke autentičnosti (A2DP slivnik)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1797
+#: ../src/modules/bluetooth/module-bluez5-device.c:1788
 msgid "High Fidelity Capture (A2DP Source)"
-msgstr "Yüksek Kaliteli Yakalama (A2DP Kaynak)"
+msgstr "Snimanje visoke autentičnosti (A2DP izvor)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1808
+#: ../src/modules/bluetooth/module-bluez5-device.c:1800
 msgid "Headset Head Unit (HSP/HFP)"
-msgstr "Kulaklık Ana Birimi (HSP/HFP)"
+msgstr "Jedinica slušalice s mikrofonom (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1820
+#: ../src/modules/bluetooth/module-bluez5-device.c:1813
 msgid "Headset Audio Gateway (HSP/HFP)"
-msgstr "Kulanlık Ses Geçidi (HSP/HFP)"
+msgstr "Zvučni pristupnik slušalice s mikrofonom (HSP/HFP)"
 
 #: ../src/modules/echo-cancel/module-echo-cancel.c:61
-#| msgid ""
-#| "source_name=<name for the source> source_properties=<properties for the "
-#| "source> source_master=<name of source to filter> sink_name=<name for the "
-#| "sink> sink_properties=<properties for the sink> sink_master=<name of sink "
-#| "to filter> adjust_time=<how often to readjust rates in s> "
-#| "adjust_threshold=<how much drift to readjust after in ms> format=<sample "
-#| "format> rate=<sample rate> channels=<number of channels> "
-#| "channel_map=<channel map> aec_method=<implementation to use> "
-#| "aec_args=<parameters for the AEC engine> save_aec=<save AEC data in /tmp> "
-#| "autoloaded=<set if this module is being loaded automatically> "
-#| "use_volume_sharing=<yes or no> "
 msgid ""
 "source_name=<name for the source> source_properties=<properties for the "
 "source> source_master=<name of source to filter> sink_name=<name for the "
@@ -1087,33 +1062,34 @@ msgid ""
 "loaded automatically> use_volume_sharing=<yes or no> use_master_format=<yes "
 "or no> "
 msgstr ""
-"source_name=<kaynak adı> source_properties=<kaynak özellikleri> "
-"source_master=<süzülecek kaynağın adı> sink_name=<alıcı adı> "
-"sink_properties=<alıcı özellikleri> sink_master=<süzülecek alıcının adı> "
-"adjust_time=<hızların kaç saniyede bir yeniden ayarlanacağı> "
-"adjust_threshold=<kaç ms sonra kaymanın yeniden ayarlanacağı> format=<örnek "
-"biçimi> rate=<örnek hızı> channels=<kaynak sayısı> channel_map=<kaynak "
-"eşlem> aec_method=<kullanılacak uygulanış> aec_args=<AEC motorunun "
-"parametreleri> save_aec=<AEC verilerini /tmp içine kaydet> autoloaded=<bu "
-"modülün otomatik olarak yüklenip yüklenmeyeceğini belirle> "
-"use_volume_sharing=<yes ya da no> use_master_format=<yes ya da no> "
+"source_name=<naziv izvora> source_properties=<svojstva izvora> "
+"source_master=<naziv filtera izvora> sink_name=<naziv slivnika> "
+"sink_properties=<svojstva slivnika> sink_master=<naziv filtera slivnika> "
+"adjust_time=<koliko često prilagoditi frekvenciju u sek.> "
+"adjust_threshold=<koliko pomaknuti za naknadnu prilagodbu u msec.> "
+"format=<format uzorka> rate=<frekvencija> channels=<broj kanala> "
+"channel_map=<ulazno mapiranje kanala> aec_method=<implementacija za "
+"upotrebu> aec_args=<parameteri za AEC pogon> save_aec=<spremi AEC podatke u /"
+"tmp> autoloaded=<postavi ako se ovaj modul učitava automatski> "
+"use_volume_sharing=<da ili ne> use_master_format=<da ili ne> "
 
 #. add on profile
 #: ../src/modules/macosx/module-coreaudio-device.c:811
 msgid "On"
-msgstr "Açık"
-
-#: ../src/modules/module-always-sink.c:36
-msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "Yüklenen alıcı boş bile olsa her zaman en az bir tanesini korur"
+msgstr "Uključi"
 
+#: ../src/modules/module-allow-passthrough.c:73
 #: ../src/modules/module-always-sink.c:82
 msgid "Dummy Output"
-msgstr "Sahte Çıkış"
+msgstr "Lažni izlaz"
+
+#: ../src/modules/module-always-sink.c:36
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr "Uvijek drži bar jedan slivnik učitan čak iako se ne koristi"
 
 #: ../src/modules/module-equalizer-sink.c:70
 msgid "General Purpose Equalizer"
-msgstr "Genel Amaçlı Denkleştirici"
+msgstr "Ekvalizator opće namjene"
 
 #: ../src/modules/module-equalizer-sink.c:74
 msgid ""
@@ -1122,61 +1098,62 @@ msgid ""
 "channels=<number of channels> channel_map=<channel map> autoloaded=<set if "
 "this module is being loaded automatically> use_volume_sharing=<yes or no> "
 msgstr ""
-"alıcı_adı=<name of the sink> alıcı_özellikleri=<properties for the sink> "
-"ana_alıcı=<sink to connect to> biçim=<sample format> hız=<sample rate> "
-"kanallar=<number of channels> kanal_adresleme=<channel map> "
-"otomatikyüklenmiş=<set if this module is being loaded automatically> "
-"ses_paylaşım_kullan=<yes or no> "
+"sink_name=<naziv slivnika> sink_properties=<svojstva slivnika> "
+"sink_master=<slivnik za povezivanje s> format=<format uzorka> "
+"rate=<frekvencija> channels=<broj kanala> channel_map=<mapiranje kanala> "
+"autoloaded=<postavi ako se ovaj modul učitava automatski> "
+"use_volume_sharing=<da ili ne> "
 
-#: ../src/modules/module-filter-apply.c:46
+#: ../src/modules/module-filter-apply.c:48
 msgid "autoclean=<automatically unload unused filters?>"
-msgstr "otomatik temizle=<automatically unload unused filters?>"
+msgstr "autoclean=<automatski uklanja nekorištene filtere?>"
 
 #: ../src/modules/module-ladspa-sink.c:51
 msgid "Virtual LADSPA sink"
-msgstr "Sanal LADSPA alıcısı"
+msgstr "Virtualni LADSPA slivnik"
 
 #: ../src/modules/module-ladspa-sink.c:55
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma separated list of "
-"input control values> input_ladspaport_map=<comma separated list of input "
-"LADSPA port names> output_ladspaport_map=<comma separated list of output "
-"LADSPA port names> "
-msgstr ""
-"alıcı_adı=<name for the sink> alıcı_özellikleri=<properties for the sink> "
-"ana=<name of sink to filter> biçim=<sample format> hız=<sample rate> "
-"kanallar=<number of channels> kanal_adresleme=<input channel map> "
-"eklenti=<ladspa plugin name> etiket=<ladspa plugin label> kontrol=<comma "
-"separated list of input control values> ladspaport_giriş_listesi=<comma "
-"separated list of input LADSPA port names> ladspaport_çıkış_listesi=<comma "
-"separated list of output LADSPA port names> "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<input channel map> plugin=<ladspa plugin name> label=<ladspa "
+"plugin label> control=<comma separated list of input control values> "
+"input_ladspaport_map=<comma separated list of input LADSPA port names> "
+"output_ladspaport_map=<comma separated list of output LADSPA port names> "
+"autoloaded=<set if this module is being loaded automatically> "
+msgstr ""
+"sink_name=<naziv slivnika> sink_properties=<svojstva slivnika> master=<naziv "
+"filtera slivnika> sink_master=<naziv slivnika za filtriranje> format=<format "
+"uzorka> rate=<frekvencija> channels=<broj kanala> channel_map=<ulazno "
+"mapiranje kanala> plugin=<naziv ladspa priključka> label=<oznaka ladspa "
+"priključka> control=<zarezom odvojeni popis vrijednosti ulaznog upravljanja> "
+"input_ladspaport_map=<zarezom odvojeni popis naziva LADSPA ulaza> "
+"output_ladspaport_map=<zarezom odvojeni popis naziva LADSPA izlaza> "
 
 #: ../src/modules/module-null-sink.c:47
 msgid "Clocked NULL sink"
-msgstr "Zamanlanmış BOŞ alıcı"
+msgstr "Prikriven nekorišten slivnik"
 
-#: ../src/modules/module-null-sink.c:280
+#: ../src/modules/module-null-sink.c:284
 msgid "Null Output"
-msgstr "Boş Çıkış"
+msgstr "Nema izlaza"
 
 #: ../src/modules/module-rygel-media-server.c:508
 #: ../src/modules/module-rygel-media-server.c:546
 #: ../src/modules/module-rygel-media-server.c:905
 msgid "Output Devices"
-msgstr "Çıkış Aygıtları"
+msgstr "Izlazni uređaji"
 
 #: ../src/modules/module-rygel-media-server.c:509
 #: ../src/modules/module-rygel-media-server.c:547
 #: ../src/modules/module-rygel-media-server.c:906
 msgid "Input Devices"
-msgstr "Girdi Aygıtları"
+msgstr "Ulazni uređaji"
 
 #: ../src/modules/module-rygel-media-server.c:1063
 msgid "Audio on @HOSTNAME@"
-msgstr "@HOSTNAME@ üzerindeki SES"
+msgstr "Zvuk na @NAZIVRAČUNALA@"
 
 #. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis at lazus'
 #. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis at lazus'
@@ -1184,247 +1161,249 @@ msgstr "@HOSTNAME@ üzerindeki SES"
 #: ../src/modules/module-tunnel-source-new.c:305
 #, c-format
 msgid "Tunnel for %s@%s"
-msgstr "%s@%s için tünel"
+msgstr "Tunel za %s@%s"
 
-#: ../src/modules/module-tunnel-sink-new.c:517
-#: ../src/modules/module-tunnel-source-new.c:516
+#: ../src/modules/module-tunnel-sink-new.c:521
+#: ../src/modules/module-tunnel-source-new.c:520
 #, c-format
 msgid "Tunnel to %s/%s"
-msgstr "%s/%s tünel"
+msgstr "Tunel do %s/%s"
 
 #: ../src/modules/module-virtual-surround-sink.c:47
 msgid "Virtual surround sink"
-msgstr "Sanal çevresel ses alıcısı"
+msgstr "Virtalni surround slivnik"
 
 #: ../src/modules/module-virtual-surround-sink.c:51
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> "
-"use_volume_sharing=<yes or no> force_flat_volume=<yes or no> hrir=/path/to/"
-"left_hrir.wav "
-msgstr ""
-"alıcı_adı=<name for the sink> alıcı_özellikleri=<properties for the sink> "
-"ana=<name of sink to filter> biçim=<sample format> hız=<sample rate> "
-"kanallar=<number of channels> kanal_adresleme=<channel map> "
-"ses_paylaşımı_kullan=<yes or no> force_flat_volume=<yes or no> hrir=/path/to/"
-"left_hrir.wav "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<channel map> use_volume_sharing=<yes or no> "
+"force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav autoloaded=<set if "
+"this module is being loaded automatically> "
+msgstr ""
+"sink_name=<naziv slivnika> sink_properties=<svojstva slivnika> master=<naziv "
+"filtera slivnika> sink_master=<naziv slivnika za filtriranje> format=<format "
+"uzorka> rate=<frekvencija> channels=<broj kanala> channel_map=<ulazno "
+"mapiranje kanala> use_volume_sharing=<da ili ne> force_flat_volume=<da ili "
+"ne> hrir=/putanja/do/left_hrir.wav autoloaded=<postavi ako se ovaj modul "
+"učitava automatski> "
 
 #: ../src/modules/reserve-wrap.c:149
 msgid "PulseAudio Sound Server"
-msgstr "PulseAudio Ses Sunucusu"
+msgstr "PulseAudio zvučni poslužitelj"
 
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:771
 msgid "Mono"
-msgstr "Tek Kanallı"
+msgstr "Mono"
 
 #: ../src/pulse/channelmap.c:105
 msgid "Front Center"
-msgstr "Ön Orta"
+msgstr "Prednji srednji"
 
 #: ../src/pulse/channelmap.c:106
 msgid "Front Left"
-msgstr "Ön Sol"
+msgstr "Prednji lijevi"
 
 #: ../src/pulse/channelmap.c:107
 msgid "Front Right"
-msgstr "Ön Sağ"
+msgstr "Prednji desni"
 
 #: ../src/pulse/channelmap.c:109
 msgid "Rear Center"
-msgstr "Arka Orta"
+msgstr "Zadnji srednji"
 
 #: ../src/pulse/channelmap.c:110
 msgid "Rear Left"
-msgstr "Arka Sol"
+msgstr "Zadnji lijevi"
 
 #: ../src/pulse/channelmap.c:111
 msgid "Rear Right"
-msgstr "Arka Sağ"
+msgstr "Zadnji desni"
 
 #: ../src/pulse/channelmap.c:113
 msgid "Subwoofer"
-msgstr "Derin Bas Hoparlör"
+msgstr "Dubokotonac"
 
 #: ../src/pulse/channelmap.c:115
 msgid "Front Left-of-center"
-msgstr "Ön Ortanın Solu"
+msgstr "Prednji lijevo-od-srednjeg"
 
 #: ../src/pulse/channelmap.c:116
 msgid "Front Right-of-center"
-msgstr "Ön Ortanın Sağı"
+msgstr "Prednji desno-od-srednjeg"
 
 #: ../src/pulse/channelmap.c:118
 msgid "Side Left"
-msgstr "Sol Yan"
+msgstr "Srednji lijevi"
 
 #: ../src/pulse/channelmap.c:119
 msgid "Side Right"
-msgstr "Sağ Yan"
+msgstr "Srednji desni"
 
 #: ../src/pulse/channelmap.c:121
 msgid "Auxiliary 0"
-msgstr "Harici 0"
+msgstr "Pomoćni 0"
 
 #: ../src/pulse/channelmap.c:122
 msgid "Auxiliary 1"
-msgstr "Harici 1"
+msgstr "Pomoćni 1"
 
 #: ../src/pulse/channelmap.c:123
 msgid "Auxiliary 2"
-msgstr "Harici 2"
+msgstr "Pomoćni 2"
 
 #: ../src/pulse/channelmap.c:124
 msgid "Auxiliary 3"
-msgstr "Harici 3"
+msgstr "Pomoćni 3"
 
 #: ../src/pulse/channelmap.c:125
 msgid "Auxiliary 4"
-msgstr "Harici 4"
+msgstr "Pomoćni 4"
 
 #: ../src/pulse/channelmap.c:126
 msgid "Auxiliary 5"
-msgstr "Harici 5"
+msgstr "Pomoćni 5"
 
 #: ../src/pulse/channelmap.c:127
 msgid "Auxiliary 6"
-msgstr "Harici 6"
+msgstr "Pomoćni 6"
 
 #: ../src/pulse/channelmap.c:128
 msgid "Auxiliary 7"
-msgstr "Harici 7"
+msgstr "Pomoćni 7"
 
 #: ../src/pulse/channelmap.c:129
 msgid "Auxiliary 8"
-msgstr "Harici 8"
+msgstr "Pomoćni 8"
 
 #: ../src/pulse/channelmap.c:130
 msgid "Auxiliary 9"
-msgstr "Harici 9"
+msgstr "Pomoćni 9"
 
 #: ../src/pulse/channelmap.c:131
 msgid "Auxiliary 10"
-msgstr "Harici 10"
+msgstr "Pomoćni 10"
 
 #: ../src/pulse/channelmap.c:132
 msgid "Auxiliary 11"
-msgstr "Harici 11"
+msgstr "Pomoćni 11"
 
 #: ../src/pulse/channelmap.c:133
 msgid "Auxiliary 12"
-msgstr "Harici 12"
+msgstr "Pomoćni 12"
 
 #: ../src/pulse/channelmap.c:134
 msgid "Auxiliary 13"
-msgstr "Harici 13"
+msgstr "Pomoćni 13"
 
 #: ../src/pulse/channelmap.c:135
 msgid "Auxiliary 14"
-msgstr "Harici 14"
+msgstr "Pomoćni 14"
 
 #: ../src/pulse/channelmap.c:136
 msgid "Auxiliary 15"
-msgstr "Harici 15"
+msgstr "Pomoćni 15"
 
 #: ../src/pulse/channelmap.c:137
 msgid "Auxiliary 16"
-msgstr "Harici 16"
+msgstr "Pomoćni 16"
 
 #: ../src/pulse/channelmap.c:138
 msgid "Auxiliary 17"
-msgstr "Harici 17"
+msgstr "Pomoćni 17"
 
 #: ../src/pulse/channelmap.c:139
 msgid "Auxiliary 18"
-msgstr "Harici 18"
+msgstr "Pomoćni 18"
 
 #: ../src/pulse/channelmap.c:140
 msgid "Auxiliary 19"
-msgstr "Harici 19"
+msgstr "Pomoćni 19"
 
 #: ../src/pulse/channelmap.c:141
 msgid "Auxiliary 20"
-msgstr "Harici 20"
+msgstr "Pomoćni 20"
 
 #: ../src/pulse/channelmap.c:142
 msgid "Auxiliary 21"
-msgstr "Harici 21"
+msgstr "Pomoćni 21"
 
 #: ../src/pulse/channelmap.c:143
 msgid "Auxiliary 22"
-msgstr "Harici 22"
+msgstr "Pomoćni 22"
 
 #: ../src/pulse/channelmap.c:144
 msgid "Auxiliary 23"
-msgstr "Harici 23"
+msgstr "Pomoćni 23"
 
 #: ../src/pulse/channelmap.c:145
 msgid "Auxiliary 24"
-msgstr "Harici 24"
+msgstr "Pomoćni 24"
 
 #: ../src/pulse/channelmap.c:146
 msgid "Auxiliary 25"
-msgstr "Harici 25"
+msgstr "Pomoćni 25"
 
 #: ../src/pulse/channelmap.c:147
 msgid "Auxiliary 26"
-msgstr "Harici 26"
+msgstr "Pomoćni 26"
 
 #: ../src/pulse/channelmap.c:148
 msgid "Auxiliary 27"
-msgstr "Harici 27"
+msgstr "Pomoćni 27"
 
 #: ../src/pulse/channelmap.c:149
 msgid "Auxiliary 28"
-msgstr "Harici 28"
+msgstr "Pomoćni 28"
 
 #: ../src/pulse/channelmap.c:150
 msgid "Auxiliary 29"
-msgstr "Harici 29"
+msgstr "Pomoćni 29"
 
 #: ../src/pulse/channelmap.c:151
 msgid "Auxiliary 30"
-msgstr "Harici 30"
+msgstr "Pomoćni 30"
 
 #: ../src/pulse/channelmap.c:152
 msgid "Auxiliary 31"
-msgstr "Harici 31"
+msgstr "Pomoćni 31"
 
 #: ../src/pulse/channelmap.c:154
 msgid "Top Center"
-msgstr "Üst Orta"
+msgstr "Gornji srednji"
 
 #: ../src/pulse/channelmap.c:156
 msgid "Top Front Center"
-msgstr "Üst Ön Orta"
+msgstr "Gornji prednji srednji"
 
 #: ../src/pulse/channelmap.c:157
 msgid "Top Front Left"
-msgstr "Üst Ön Sol"
+msgstr "Gornji prednji lijevi"
 
 #: ../src/pulse/channelmap.c:158
 msgid "Top Front Right"
-msgstr "Üst Ön Sağ"
+msgstr "Gornji prednji desni"
 
 #: ../src/pulse/channelmap.c:160
 msgid "Top Rear Center"
-msgstr "Üst Arka Orta"
+msgstr "Gornji zadnji srednji"
 
 #: ../src/pulse/channelmap.c:161
 msgid "Top Rear Left"
-msgstr "Üst Arka Sol"
+msgstr "Gornji zadnji lijevi"
 
 #: ../src/pulse/channelmap.c:162
 msgid "Top Rear Right"
-msgstr "Üst Arka Sağ"
+msgstr "Gornji zadnji desni"
 
-#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:127
-#: ../src/pulse/sample.c:175 ../src/pulse/volume.c:294
+#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:121
+#: ../src/pulse/sample.c:177 ../src/pulse/volume.c:294
 #: ../src/pulse/volume.c:320 ../src/pulse/volume.c:340
 #: ../src/pulse/volume.c:372 ../src/pulse/volume.c:412
 #: ../src/pulse/volume.c:431
 msgid "(invalid)"
-msgstr "(geçersiz)"
+msgstr "(neispravno)"
 
 #: ../src/pulse/channelmap.c:775
 msgid "Stereo"
@@ -1432,426 +1411,428 @@ msgstr "Stereo"
 
 #: ../src/pulse/channelmap.c:780
 msgid "Surround 4.0"
-msgstr "Çevresel Ses 4.0"
+msgstr "Surround 4.0"
 
 #: ../src/pulse/channelmap.c:786
 msgid "Surround 4.1"
-msgstr "Çevresel Ses 4.1"
+msgstr "Surround 4.1"
 
 #: ../src/pulse/channelmap.c:792
 msgid "Surround 5.0"
-msgstr "Çevresel Ses 5.0"
+msgstr "Surround 5.0"
 
 #: ../src/pulse/channelmap.c:798
 msgid "Surround 5.1"
-msgstr "Çevresel Ses 5.1"
+msgstr "Surround 5.1"
 
 #: ../src/pulse/channelmap.c:805
 msgid "Surround 7.1"
-msgstr "Çevresel Ses 7.1"
+msgstr "Surround 7.1"
 
 #: ../src/pulse/client-conf-x11.c:53 ../src/utils/pax11publish.c:97
 msgid "xcb_connect() failed"
-msgstr "xcb_connect() başarısız oldu"
+msgstr "xcb_connect() neuspjelo"
 
 #: ../src/pulse/client-conf-x11.c:58 ../src/utils/pax11publish.c:102
 msgid "xcb_connection_has_error() returned true"
-msgstr "xcb_connection_has_error() doğru değer döndü"
+msgstr "xcb_connection_has_error() vratilo je 'true'"
 
 #: ../src/pulse/client-conf-x11.c:94
 msgid "Failed to parse cookie data"
-msgstr "Çerez veri ayrıştırılamadı"
+msgstr "Neuspjela obrada podataka kolačića"
 
-#: ../src/pulse/context.c:660
+#: ../src/pulse/context.c:702
 #, c-format
 msgid "fork(): %s"
 msgstr "fork(): %s"
 
-#: ../src/pulse/context.c:715
+#: ../src/pulse/context.c:757
 #, c-format
 msgid "waitpid(): %s"
 msgstr "waitpid(): %s"
 
-#: ../src/pulse/context.c:1421
+#: ../src/pulse/context.c:1463
 #, c-format
 msgid "Received message for unknown extension '%s'"
-msgstr "Bilinmeyen eklenti '%s' için ileti alındı"
+msgstr "Primljena poruka za nepoznato proširenje '%s'"
 
 #: ../src/pulse/direction.c:37
 msgid "input"
-msgstr "girdi"
+msgstr "ulaz"
 
 #: ../src/pulse/direction.c:39
 msgid "output"
-msgstr "çıktı"
+msgstr "izlaz"
 
 #: ../src/pulse/direction.c:41
 msgid "bidirectional"
-msgstr "çift yönlü"
+msgstr "dvosmjerno"
 
 #: ../src/pulse/direction.c:43
 msgid "invalid"
-msgstr "geçersiz"
+msgstr "neispravno"
 
-#: ../src/pulsecore/core-util.c:1836
+#: ../src/pulsecore/core-util.c:1856
 #, c-format
 msgid ""
 "XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
 "e g happen if you try to connect to a non-root PulseAudio as a root user, "
 "over the native protocol. Don't do that.)"
 msgstr ""
-"XDG_RUNTIME_DIR (%s) bize ait değil (uid %d), ancak şunun uid %d! (Eğer bir "
-"root kullanıcısı olarak root olmayan bir PulseAudio ya bağlanmaya "
-"çalışırsanız, doğal protokol üstüne bu bir örnek olabilirdi. Bunu yapmayın.)"
+"XDG_RUNTIME_DIR (%s) nije u našem vlasništvu (uid %d), nego u uid %d! (To se "
+"npr. može dogoditi ako se pokušate povezati na nekorijenski PulseAudio kao "
+"korijenski korisnik, preko izvornog protokola. Ne činite to.)"
 
 #: ../src/pulsecore/core-util.h:97
 msgid "yes"
-msgstr "evet"
+msgstr "da"
 
 #: ../src/pulsecore/core-util.h:97
 msgid "no"
-msgstr "hayır"
+msgstr "ne"
 
 #: ../src/pulsecore/lock-autospawn.c:141 ../src/pulsecore/lock-autospawn.c:227
 msgid "Cannot access autospawn lock."
-msgstr "Otomatik oluşturma kilidine erişim yok."
+msgstr "Nemoguć pristup zaključavanju auto-množenja."
 
-#: ../src/pulsecore/log.c:154
+#: ../src/pulsecore/log.c:165
 #, c-format
 msgid "Failed to open target file '%s'."
-msgstr "Hedef dosya '%s' açılamadı."
+msgstr "Nemoguće otvaranje odredišne datoteke '%s'."
 
-#: ../src/pulsecore/log.c:177
+#: ../src/pulsecore/log.c:188
 #, c-format
 msgid ""
 "Tried to open target file '%s', '%s.1', '%s.2' ... '%s.%d', but all failed."
 msgstr ""
-"Hedef dosyaları '%s', '%s.1', '%s.2' ... '%s.%d' açmayı denedi fakat hiçbiri "
-"açılamadı."
+"Pokušaj otvaranja odredišne datoteke '%s', '%s.1', '%s.2' ... '%s.%d', ali "
+"ništa nije uspjelo."
 
-#: ../src/pulsecore/log.c:640
+#: ../src/pulsecore/log.c:651
 msgid "Invalid log target."
-msgstr "Geçersiz log hedefi."
+msgstr "Neispravno odredište zapisa."
 
-#: ../src/pulsecore/sink.c:3460
+#: ../src/pulsecore/sink.c:3457
 msgid "Built-in Audio"
-msgstr "Dahili Ses"
+msgstr "Ugrađeni zvuk"
 
-#: ../src/pulsecore/sink.c:3465
+#: ../src/pulsecore/sink.c:3462
 msgid "Modem"
 msgstr "Modem"
 
 #: ../src/pulse/error.c:38
 msgid "OK"
-msgstr "TAMAM"
+msgstr "U redu"
 
 #: ../src/pulse/error.c:39
 msgid "Access denied"
-msgstr "Erişim engellendi"
+msgstr "Pristup odbijen"
 
 #: ../src/pulse/error.c:40
 msgid "Unknown command"
-msgstr "Bilinmeyen komut"
+msgstr "Nepoznata naredba"
 
 #: ../src/pulse/error.c:41
 msgid "Invalid argument"
-msgstr "Geçersiz değişken"
+msgstr "Neispravan argument"
 
 #: ../src/pulse/error.c:42
 msgid "Entity exists"
-msgstr "Giriş var"
+msgstr "Unos postoji"
 
 #: ../src/pulse/error.c:43
 msgid "No such entity"
-msgstr "Hiçbir giriş yok"
+msgstr "Nepostojeći unos"
 
 #: ../src/pulse/error.c:44
 msgid "Connection refused"
-msgstr "Bağlantı reddedildi"
+msgstr "Povezivanje odbijeno"
 
 #: ../src/pulse/error.c:45
 msgid "Protocol error"
-msgstr "Protokol hatası"
+msgstr "Greška protokola"
 
 #: ../src/pulse/error.c:46
 msgid "Timeout"
-msgstr "Zaman aşımı"
+msgstr "Istek vremena"
 
 #: ../src/pulse/error.c:47
 msgid "No authentication key"
-msgstr "Kimlik doğrulama anahtarı yok"
+msgstr "Nema ključa ovjere"
 
 #: ../src/pulse/error.c:48
 msgid "Internal error"
-msgstr "İç hata"
+msgstr "Unutarnja greška"
 
 #: ../src/pulse/error.c:49
 msgid "Connection terminated"
-msgstr "Bağlantı sonlandırıldı"
+msgstr "Povezivanje prekinuto"
 
 #: ../src/pulse/error.c:50
 msgid "Entity killed"
-msgstr "Giriş durduruldu"
+msgstr "Entitet ubijen"
 
 #: ../src/pulse/error.c:51
 msgid "Invalid server"
-msgstr "Geçersiz sunucu"
+msgstr "Neispravan poslužitelj"
 
 #: ../src/pulse/error.c:52
 msgid "Module initialization failed"
-msgstr "Modül başlatma başarısız oldu"
+msgstr "Neuspjelo pokretanje modula"
 
 #: ../src/pulse/error.c:53
 msgid "Bad state"
-msgstr "Kötü durum"
+msgstr "Loše stanje"
 
 #: ../src/pulse/error.c:54
 msgid "No data"
-msgstr "Veri yok"
+msgstr "Nema podataka"
 
 #: ../src/pulse/error.c:55
 msgid "Incompatible protocol version"
-msgstr "Uyumsuz protokol sürümü"
+msgstr "Nekompatibilna inačica protokola"
 
 #: ../src/pulse/error.c:56
 msgid "Too large"
-msgstr "Çok büyük"
+msgstr "Preveliko"
 
 #: ../src/pulse/error.c:57
 msgid "Not supported"
-msgstr "Desteklenmeyen"
+msgstr "Nije podržano"
 
 #: ../src/pulse/error.c:58
 msgid "Unknown error code"
-msgstr "Bilinmeyen hata kodu"
+msgstr "Nepoznat kôd greške"
 
 #: ../src/pulse/error.c:59
 msgid "No such extension"
-msgstr "Böyle bir uzantı yok"
+msgstr "Nema takvog proširenja"
 
 #: ../src/pulse/error.c:60
 msgid "Obsolete functionality"
-msgstr "Kullanılmayan işlev"
+msgstr "Zastarjela funkcionalnost"
 
 #: ../src/pulse/error.c:61
 msgid "Missing implementation"
-msgstr "Eksik uygulama"
+msgstr "Implementacija nedostaje"
 
 #: ../src/pulse/error.c:62
 msgid "Client forked"
-msgstr "Müşteri çatallandı"
+msgstr "Klijent odvojen"
 
 #: ../src/pulse/error.c:63
 msgid "Input/Output error"
-msgstr "Giriş/Çıkış hatası"
+msgstr "Izlazno/Ulazna greška"
 
 #: ../src/pulse/error.c:64
 msgid "Device or resource busy"
-msgstr "Aygıt ya da kaynak meşgul"
+msgstr "Uređaj ili resurs zauzet"
 
-#: ../src/pulse/sample.c:177
+#: ../src/pulse/sample.c:179
 #, c-format
 msgid "%s %uch %uHz"
 msgstr "%s %uch %uHz"
 
-#: ../src/pulse/sample.c:189
+#: ../src/pulse/sample.c:191
 #, c-format
 msgid "%0.1f GiB"
 msgstr "%0.1f GiB"
 
-#: ../src/pulse/sample.c:191
+#: ../src/pulse/sample.c:193
 #, c-format
 msgid "%0.1f MiB"
 msgstr "%0.1f MiB"
 
-#: ../src/pulse/sample.c:193
+#: ../src/pulse/sample.c:195
 #, c-format
 msgid "%0.1f KiB"
 msgstr "%0.1f KiB"
 
-#: ../src/pulse/sample.c:195
+#: ../src/pulse/sample.c:197
 #, c-format
 msgid "%u B"
 msgstr "%u B"
 
-#: ../src/utils/pacat.c:117
+#: ../src/utils/pacat.c:134
 #, c-format
 msgid "Failed to drain stream: %s"
-msgstr "Akış boşaltma başarısız oldu: %s"
+msgstr "Neuspjeli istek toka: %s"
 
-#: ../src/utils/pacat.c:122
+#: ../src/utils/pacat.c:139
 msgid "Playback stream drained."
-msgstr "Playback akışı boşaltıldı."
+msgstr "Reprodukcija toka istekla."
 
-#: ../src/utils/pacat.c:133
+#: ../src/utils/pacat.c:150
 msgid "Draining connection to server."
-msgstr "Sunucuya akış bağlantısı."
+msgstr "Istek povezivanja s poslužiteljem."
 
-#: ../src/utils/pacat.c:146
+#: ../src/utils/pacat.c:163
 #, c-format
 msgid "pa_stream_drain(): %s"
 msgstr "pa_stream_drain(): %s"
 
-#: ../src/utils/pacat.c:169
-#, c-format
-msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write() başarısız oldu: %s"
-
-#: ../src/utils/pacat.c:210
+#: ../src/utils/pacat.c:194 ../src/utils/pacat.c:543
 #, c-format
 msgid "pa_stream_begin_write() failed: %s"
-msgstr "pa_stream_begin_write() başarısız oldu: %s"
+msgstr "pa_stream_begin_write() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:260 ../src/utils/pacat.c:290
+#: ../src/utils/pacat.c:244 ../src/utils/pacat.c:274
 #, c-format
 msgid "pa_stream_peek() failed: %s"
-msgstr "pa_stream_peek() başarısız oldu: %s"
+msgstr "pa_stream_peek() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:340
+#: ../src/utils/pacat.c:324
 msgid "Stream successfully created."
-msgstr "Akış başarılı bir şekilde oluşturuldu."
+msgstr "Tok uspješno stvoren"
 
-#: ../src/utils/pacat.c:343
+#: ../src/utils/pacat.c:327
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s"
-msgstr "pa_stream_get_buffer_attr() başarısız oldu: %s"
+msgstr "pa_stream_get_buffer_attr() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:331
 #, c-format
 msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
-msgstr "Tampon ölçüleri: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
+msgstr ""
+"Mjerenja međuspremnika: najveća-duljina=%u, ukupna-duljina=%u, "
+"predmeđuspremnik=%u, najmanji-zahtjev=%u"
 
-#: ../src/utils/pacat.c:350
+#: ../src/utils/pacat.c:334
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u"
-msgstr "Tampon ölçüleri: maxlength=%u, fragsize=%u"
+msgstr "Mjerenja međuspremnika: najveća-duljina=%u, veličina-fragmenta=%u"
 
-#: ../src/utils/pacat.c:354
+#: ../src/utils/pacat.c:338
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'."
-msgstr "Örnekleme tanımı '%s', kanal listesi '%s' kullanma."
+msgstr "Koriste se specifikacije uzorka '%s', mapiranje kanala '%s'."
 
-#: ../src/utils/pacat.c:358
+#: ../src/utils/pacat.c:342
 #, c-format
 msgid "Connected to device %s (index: %u, suspended: %s)."
-msgstr "Aygıta %s bağlanıldı (dizin: %u, askıda kalan: %s)."
+msgstr "Povezano s uređajem %s (sadržaj: %u, suspendirano: %s)."
 
-#: ../src/utils/pacat.c:368
+#: ../src/utils/pacat.c:352
 #, c-format
 msgid "Stream error: %s"
-msgstr "Akış hatası: %s"
+msgstr "Greška toka: %s"
 
-#: ../src/utils/pacat.c:378
+#: ../src/utils/pacat.c:362
 #, c-format
 msgid "Stream device suspended.%s"
-msgstr "Akış aygıtı askıda. %s"
+msgstr "Uređaj toka suspendiran.%s"
 
-#: ../src/utils/pacat.c:380
+#: ../src/utils/pacat.c:364
 #, c-format
 msgid "Stream device resumed.%s"
-msgstr "Akış aygıtı devam ettirildi.%s"
+msgstr "Uređaj toka ponovno pokrenut.%s"
 
-#: ../src/utils/pacat.c:388
+#: ../src/utils/pacat.c:372
 #, c-format
 msgid "Stream underrun.%s"
-msgstr "Akış yetersiz.%s"
+msgstr "Tok neiskorišten.%s"
 
-#: ../src/utils/pacat.c:395
+#: ../src/utils/pacat.c:379
 #, c-format
 msgid "Stream overrun.%s"
-msgstr "Akış taşması.%s"
+msgstr "Tok zauzet.%s"
 
-#: ../src/utils/pacat.c:402
+#: ../src/utils/pacat.c:386
 #, c-format
 msgid "Stream started.%s"
-msgstr "Akış başladı. %s"
+msgstr "Tok pokrenut.%s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 #, c-format
 msgid "Stream moved to device %s (%u, %ssuspended).%s"
-msgstr "Akış %s aygıtına taşındı (%u, %sertelenmiş).%s"
+msgstr "Tok premješten na uređaj %s (%u, %ssuspended).%s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 msgid "not "
-msgstr "değil "
+msgstr "nije "
 
-#: ../src/utils/pacat.c:416
+#: ../src/utils/pacat.c:400
 #, c-format
 msgid "Stream buffer attributes changed.%s"
-msgstr "Akış tampon bellek özellikleri değişti. %s"
+msgstr "Svojstva međuspremnika toka promijenjena.%s"
 
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:415
 msgid "Cork request stack is empty: corking stream"
-msgstr "Durdurma isteği yığını boş: akış durduruluyor"
+msgstr "Spremište zahtjeva zatvaranja je prazno: zatvaranje toka"
 
-#: ../src/utils/pacat.c:437
+#: ../src/utils/pacat.c:421
 msgid "Cork request stack is empty: uncorking stream"
-msgstr "Durdurma isteği yığını boş: akış durdurma sonlandırılıyor"
+msgstr "Spremište zahtjeva zatvaranja je prazno: otvaranje toka"
 
-#: ../src/utils/pacat.c:441
-#| msgid "Warning: Received more uncork requests than cork requests!"
+#: ../src/utils/pacat.c:425
 msgid "Warning: Received more uncork requests than cork requests."
-msgstr "Uyarı: Durdurma isteğinden daha fazla devam ettirme isteği alındı."
+msgstr ""
+"Upozorenje: primljeno je više zahtjeva za otvaranje od zahtjeva zatvaranja."
 
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:450
 #, c-format
 msgid "Connection established.%s"
-msgstr "Bağlantı kuruldu.%s"
+msgstr "Povezivanje uspostavljeno.%s"
 
-#: ../src/utils/pacat.c:469
+#: ../src/utils/pacat.c:453
 #, c-format
 msgid "pa_stream_new() failed: %s"
-msgstr "pa_stream_new() başarısız oldu: %s"
+msgstr "pa_stream_new() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:507
+#: ../src/utils/pacat.c:491
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s"
-msgstr "pa_stream_connect_playback() başarısız oldu: %s"
+msgstr "pa_stream_connect_playback() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:513
+#: ../src/utils/pacat.c:497
 #, c-format
 msgid "Failed to set monitor stream: %s"
-msgstr "Akış izleme ayarlanamadı: %s"
+msgstr "Neuspjelo postavljanje nadgeldanja toka: %s"
 
-#: ../src/utils/pacat.c:517
+#: ../src/utils/pacat.c:501
 #, c-format
 msgid "pa_stream_connect_record() failed: %s"
-msgstr "pa_stream_connect_record() başarısız oldu: %s"
+msgstr "pa_stream_connect_record() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:530 ../src/utils/pactl.c:1446
+#: ../src/utils/pacat.c:514 ../src/utils/pactl.c:1446
 #, c-format
 msgid "Connection failure: %s"
-msgstr "Bağlantı hatası: %s"
+msgstr "Povezivanje neuspjelo: %s"
 
-#: ../src/utils/pacat.c:563
+#: ../src/utils/pacat.c:557
 msgid "Got EOF."
-msgstr "EOF Al."
+msgstr "EOF."
 
-#: ../src/utils/pacat.c:600
+#: ../src/utils/pacat.c:581
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "pa_stream_write() neuspjelo: %s"
+
+#: ../src/utils/pacat.c:605
 #, c-format
 msgid "write() failed: %s"
-msgstr "write() başarısız oldu: %s"
+msgstr "write() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:621
+#: ../src/utils/pacat.c:626
 msgid "Got signal, exiting."
-msgstr "Sinyal alındı, çıkılıyor."
+msgstr "Signal dobiven, izlazim."
 
-#: ../src/utils/pacat.c:635
+#: ../src/utils/pacat.c:640
 #, c-format
 msgid "Failed to get latency: %s"
-msgstr "Gecikme alınamadı: %s"
+msgstr "Neuspjelo dobivanje latencije: %s"
 
-#: ../src/utils/pacat.c:640
+#: ../src/utils/pacat.c:645
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec."
-msgstr "Zaman: %0.3f saniye; Gecikme: %0.0f usec."
+msgstr "Vrijeme: %0.3f sek; Latencija: %0.0f usek."
 
-#: ../src/utils/pacat.c:661
+#: ../src/utils/pacat.c:666
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s"
-msgstr "pa_stream_update_timing_info() başarısız oldu: %s"
+msgstr "pa_stream_update_timing_info() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:671
+#: ../src/utils/pacat.c:676
 #, c-format
 msgid ""
 "%s [options]\n"
@@ -1918,98 +1899,96 @@ msgid ""
 "      --monitor-stream=INDEX            Record from the sink input with "
 "index INDEX.\n"
 msgstr ""
-"%s [seçenekler]\n"
+"%s [mogućnosti]\n"
 "%s\n"
 "\n"
-"  -h, --help                          Yardımı gösterir\n"
-"      --version                       Sürümü gösterir\n"
+"  -h, --help                            Prikazuje ovu pomoć\n"
+"      --version                         Prikazuje inačicu\n"
 "\n"
-"  -r, --record                        Kayıt için bir bağlantı oluşturur\n"
-"  -p, --playback                      Çalmak için bir bağlantı oluşturur\n"
+"  -r, --record                          Stvara povezivanje za snimanje\n"
+"  -p, --playback                        Stvara povezivanje za reprodukciju\n"
 "\n"
-"  -v, --verbose                       Ayrıntılı işlemleri etkinleştirir\n"
+"  -v, --verbose                         Omogućuje opširnije radnje\n"
 "\n"
-"  -s, --server=SUNUCU                 Bağlanılacak sunucunun adı\n"
-"  -d, --device=AYGIT                  Bağlanılacak alıcı/kaynak adı\n"
-"  -n, --client-name=AD                Sunucu üzerinde bu istemciye ne ad "
-"verileceği\n"
-"      --stream-name=AD                Sunucu üzerinde bu akışa ne ad "
-"verileceği\n"
-"      --volume=SESDÜZEYİ              0...65536 aralığında başlangıç ses "
-"düzeyini (doğrusal) belirtir\n"
-"      --rate=ÖRNEKLEMEHIZI            Hz cinsinde örnekleme oranı (öntanımlı "
-"değer 44100)\n"
-"      --format=ÖRNEKLEMEBİÇİMİ        Örnekleme türü, s16le, s16be, u8, "
-"float32le,\n"
-"                                      float32be, ulaw, alaw, s32le, s32be, "
+"  -s, --server=POSLUŽITELJ                   Naziv poslužitelja za "
+"povezivanje\n"
+"  -d, --device=UREĐAJ                   Naziv slivnika/izvora za "
+"povezivanje\n"
+"  -n, --client-name=NAZIV                Naziv klijenta na poslužitelju\n"
+"      --stream-name=NAZIV                Naziv toka na poslužitelju\n"
+"      --volume=GLASNOĆA ZVUKA                   Određuje početnu (linearnu) "
+"glasnoću zvuka u rasponu 0...65536\n"
+"      --rate=FREKVENCIJA                 Frekvencija u Hz (zadano 44100)\n"
+"      --format=FORMAT UZORKA             Vrsta uzorka, jedna od s16le, "
+"s16be, u8, float32le,\n"
+"                                        float32be, ulaw, alaw, s32le, s32be, "
 "s24le, s24be,\n"
-"                                      s24-32le, s24-32be değerlerinden biri "
-"(öntanımlı: s16ne)\n"
-"      --channels=KANALLAR             Kanal sayısı, mono için 1, stereo için "
-"2\n"
-"                                      (öntanımlı değer: 2)\n"
-"      --channel-map=KANALADRESLEME    Öntanımlı yerine kullanılacak kanal "
-"eşleme\n"
-"      --fix-format                    Alıcı/kaynaktan bağlı olunan akışın "
-"örnekleme türünü alır.\n"
-"      --fix-rate                      Alıcı/kaynaktan bağlı olunan akışın "
-"örnekleme türünü alır.\n"
-"      --fix-channels                  Alıcı/kaynaktan bağlı olunan akışın "
-"kanal eşlemesini\n"
-"                                      ve kanal sayısını alır.\n"
-"      --no-remix                      Kanalları indirgemez ya da "
-"çoğaltamaz.\n"
-"      --no-remap                      Ad yerine dizin ile kanalları eşler.\n"
-"      --latency=BAYT                  Bayt cinsinden belirtilen gecikmeyi "
-"ister.\n"
-"      --process-time=BAYT             Bayt cinsinden her talep başına "
-"belirtilen işlem\n"
-"                                      zamanını ister.\n"
-"      --latency-msec=MİLİSANİYE       Milisaniye cinsinde belirtilen "
-"gecikmeyi ister.\n"
-"      --process-time-msec=MİLİSANİYE  Milisaniye cinsinde her talep başına "
-"belirtilen\n"
-"                                      işlem zamanını ister.\n"
-"      --property=ÖZELLİK=DEĞER        Belirtilen özelliği, belirtilen değere "
-"ayarlar.\n"
-"      --raw                           Ham PCM veri kaydeder/çalar.\n"
-"      --passthrough                   Doğrudan veri geçişi.\n"
-"      --file-format[=DBİÇİMİ]         Biçimlendirilmiş PCM verilerini "
-"kaydeder/çalar.\n"
-"      --list-file-formats             Kullanılabilir dosya biçimlerini "
-"listeler.\n"
-"      --monitor-stream=INDEKS         INDEKS indeksine sahip alıcı "
-"girişinden kayıt yapar.\n"
-
-#: ../src/utils/pacat.c:788
+"                                        s24-32le, s24-32be (zadano s16ne)\n"
+"      --channels=KANALI               Broj kanala, 1 za mono, 2 za stereo\n"
+"                                        (zadano 2)\n"
+"      --channel-map=MAPIRANJE KANALA          Korištenje mapiranja kanala "
+"umjesto zadanog\n"
+"      --fix-format                      Uzima uzorak formata iz slivnika/"
+"izvora s kojim\n"
+"                                        je tok povezan.\n"
+"      --fix-rate                        Uzima frekvenciju iz slivnika/izvora "
+"s kojim\n"
+"                                        je tok povezan.\n"
+"      --fix-channels                    Uzima broj kanala i mapiranje "
+"kanala\n"
+"                                        iz slivnika/izvora s kojim je tok "
+"povezan.\n"
+"      --no-remix                        Ne smanjuj ili pojačavaj kanale.\n"
+"      --no-remap                        Mapiraj kanale prema sadržaju "
+"umjesto nazivu.\n"
+"      --latency=BAJTOVI                   Zahtijevaj određenu latenciju u "
+"bajtima.\n"
+"      --process-time=BAJTOVI              Zahtijevaj određeno vrijeme "
+"procesa po zahtjevu u bajtima.\n"
+"      --latency-msec=MSEK               Zahtijevaj određenu latenciju u "
+"msek.\n"
+"      --process-time-msec=MSEK          Zahtijevaj određeno vrijeme procesa "
+"po zahtjevu u msek.\n"
+"      --property=VLASNIŠTVO=VRIJEDNOST         Postavi određeno vlasništvo "
+"za određenu vrijednost.\n"
+"      --raw                             Snimaj/Reproduciraj osnovne PCM "
+"podatke.\n"
+"      --passthrough                     Prolaz podataka.\n"
+"      --file-format[=FFORMAT]           Snimaj/Reproduciraj formatirane PCM "
+"podatke.\n"
+"      --list-file-formats               Prikaži dostupne formate datoteka.\n"
+"      --monitor-stream=SADRŽAJ            Snimaj s ulaza slivnika sa "
+"sadržajem SADRŽAJ.\n"
+
+#: ../src/utils/pacat.c:793
 msgid "Play back encoded audio files on a PulseAudio sound server."
 msgstr ""
-"Bir PulseAudio ses sunucusu üzerinde kodlanmış ses dosyalarını oynatın."
+"Reproduciraj enkôdirane zvučne datoteke na PulseAudio zvučnom poslužitelju."
 
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:797
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to a file."
 msgstr ""
-"Bir PulseAudio ses sunucusundan ses verilerini yakalayın ve bir dosyaya "
-"yazın."
+"Snimi zvučne podatke s PulseAudio zvučnog poslužitelja i spremi ih u "
+"datoteku."
 
-#: ../src/utils/pacat.c:796
+#: ../src/utils/pacat.c:801
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to STDOUT or "
 "the specified file."
 msgstr ""
-"Bir PulseAudio ses sunucusundan ses verilerini yakalayın ve STDOUT'a ya da "
-"belirtilen dosyaya yazın."
+"Snimi zvučne podatke s PulseAudio zvučnog poslužitelja i spremi ih u STDOUT "
+"ili određenu datoteku."
 
-#: ../src/utils/pacat.c:800
+#: ../src/utils/pacat.c:805
 msgid ""
 "Play back audio data from STDIN or the specified file on a PulseAudio sound "
 "server."
 msgstr ""
-"Bir PulseAudio ses sunucusu üzerinde STDIN'den ya da belirtilen dosyadan ses "
-"verilerini oynatın."
+"Reproduciraj zvučne datoteke sa STDIN-a ili određene datoteke na PulseAudio "
+"zvučnom poslužitelju."
 
-#: ../src/utils/pacat.c:814
+#: ../src/utils/pacat.c:819
 #, c-format
 msgid ""
 "pacat %s\n"
@@ -2017,202 +1996,200 @@ msgid ""
 "Linked with libpulse %s\n"
 msgstr ""
 "pacat %s\n"
-"Libpulse %s ile derlendi\n"
-"Libpulse %s ile bağlantılı\n"
+"Kompiliran s libpulse %s\n"
+"Povezan s libpulse %s\n"
 
-#: ../src/utils/pacat.c:847 ../src/utils/pactl.c:1648
+#: ../src/utils/pacat.c:852 ../src/utils/pactl.c:1648
 #, c-format
 msgid "Invalid client name '%s'"
-msgstr "Geçersiz istemci adı '%s'"
+msgstr "Neispravan naziv klijenta '%s'"
 
-#: ../src/utils/pacat.c:862
+#: ../src/utils/pacat.c:867
 #, c-format
 msgid "Invalid stream name '%s'"
-msgstr "Geçersiz akış adı '%s'"
+msgstr "Neispravan naziv toka '%s'"
 
-#: ../src/utils/pacat.c:899
+#: ../src/utils/pacat.c:904
 #, c-format
 msgid "Invalid channel map '%s'"
-msgstr "Geçersiz kanal adresleme '%s'"
+msgstr "Neispravno mapiranje kanala '%s'"
 
-#: ../src/utils/pacat.c:928 ../src/utils/pacat.c:942
+#: ../src/utils/pacat.c:933 ../src/utils/pacat.c:947
 #, c-format
 msgid "Invalid latency specification '%s'"
-msgstr "Geçersiz gecikme tanımı '%s'"
+msgstr "Pogrešan opis latencije '%s'"
 
-#: ../src/utils/pacat.c:935 ../src/utils/pacat.c:949
+#: ../src/utils/pacat.c:940 ../src/utils/pacat.c:954
 #, c-format
 msgid "Invalid process time specification '%s'"
-msgstr "Geçersiz işlem zaman tanımı '%s'"
+msgstr "Neispravno vrijeme obrade opisa '%s'"
 
-#: ../src/utils/pacat.c:961
+#: ../src/utils/pacat.c:966
 #, c-format
 msgid "Invalid property '%s'"
-msgstr "Geçersiz özellik '%s'"
+msgstr "Nevaljano vlasništvo '%s'"
 
-#: ../src/utils/pacat.c:980
+#: ../src/utils/pacat.c:985
 #, c-format
 msgid "Unknown file format %s."
-msgstr "Bilinmeyen dosya biçimi %s."
+msgstr "Nepoznata vrsta datoteke %s."
 
-#: ../src/utils/pacat.c:995
+#: ../src/utils/pacat.c:1000
 msgid "Failed to parse the argument for --monitor-stream"
-msgstr "--monitor-stream için değişken ayrıştırılamadı"
+msgstr "Neuspjela obrada argumenta za --monitor-stream"
 
-#: ../src/utils/pacat.c:1006
+#: ../src/utils/pacat.c:1011
 msgid "Invalid sample specification"
-msgstr "Geçersiz örnekleme tanımı"
+msgstr "Nepoznat opis uzorka"
 
-#: ../src/utils/pacat.c:1016
+#: ../src/utils/pacat.c:1021
 #, c-format
 msgid "open(): %s"
 msgstr "open(): %s"
 
-#: ../src/utils/pacat.c:1021
+#: ../src/utils/pacat.c:1026
 #, c-format
 msgid "dup2(): %s"
 msgstr "dup2(): %s"
 
-#: ../src/utils/pacat.c:1028
+#: ../src/utils/pacat.c:1033
 msgid "Too many arguments."
-msgstr "Çok fazla değişken."
+msgstr "Previše argumenata."
 
-#: ../src/utils/pacat.c:1039
+#: ../src/utils/pacat.c:1044
 msgid "Failed to generate sample specification for file."
-msgstr "Dosya için örnekleme tanımı oluşturulamadı."
+msgstr "Neuspjelo generiranje opisa uzorka za datoteku."
 
-#: ../src/utils/pacat.c:1065
+#: ../src/utils/pacat.c:1070
 msgid "Failed to open audio file."
-msgstr "Ses dosyası açılamadı."
+msgstr "Neuspjelo otvaranje zvučne datoteke."
 
-#: ../src/utils/pacat.c:1071
+#: ../src/utils/pacat.c:1076
 msgid ""
 "Warning: specified sample specification will be overwritten with "
 "specification from file."
 msgstr ""
-"Uyarı: belirtilmiş örnek tanımlama, dosyadan alınacak başka bir tanımlama "
-"ile üzerine yazılacak."
+"Upozorenje: određeni opis uzorka biti će prepisan s opisom iz datoteke."
 
-#: ../src/utils/pacat.c:1074 ../src/utils/pactl.c:1712
+#: ../src/utils/pacat.c:1079 ../src/utils/pactl.c:1712
 msgid "Failed to determine sample specification from file."
-msgstr "Dosyadan örnekleme tanımı belirlenemedi."
+msgstr "Neuspjelo određivanje opisa uzorka iz datoteke."
 
-#: ../src/utils/pacat.c:1083
+#: ../src/utils/pacat.c:1088
 msgid "Warning: Failed to determine channel map from file."
-msgstr "Uyarı: Dosyadan kanal adresleme belirlenemedi."
+msgstr "Upozorenje: neuspjelo određivanje mapiranja kanala iz datoteke."
 
-#: ../src/utils/pacat.c:1094
+#: ../src/utils/pacat.c:1099
 msgid "Channel map doesn't match sample specification"
-msgstr "Kanal adresleme örnekleme tanımı ile eşleşmiyor"
+msgstr "Mapiranje kanala se ne podudara s opisom uzorka"
 
-#: ../src/utils/pacat.c:1105
+#: ../src/utils/pacat.c:1110
 msgid "Warning: failed to write channel map to file."
-msgstr "Uyarı: kanal adresleme dosyaya yazılamadı."
+msgstr "Upozorenje: neuspjelo zapisivanje mapiranja kanala u datoteku."
 
-#: ../src/utils/pacat.c:1120
+#: ../src/utils/pacat.c:1125
 #, c-format
 msgid ""
 "Opening a %s stream with sample specification '%s' and channel map '%s'."
-msgstr ""
-"Örnekleme tanımı '%s' ve kanal adresleme '%s' ile bir %s akışı açılıyor."
+msgstr "Otvaranje %s toka s opisom uzorka '%s' i mapiranja kanala '%s'."
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "recording"
-msgstr "kaydediliyor"
+msgstr "snimanje"
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "playback"
-msgstr "çal"
+msgstr "reprodukcija"
 
-#: ../src/utils/pacat.c:1145
+#: ../src/utils/pacat.c:1150
 msgid "Failed to set media name."
-msgstr "Ortam adı ayarlanamadı."
+msgstr "Neuspjelo postavljanje medijskog naziva."
 
-#: ../src/utils/pacat.c:1152 ../src/utils/pactl.c:2062
+#: ../src/utils/pacat.c:1160 ../src/utils/pactl.c:2062
 msgid "pa_mainloop_new() failed."
-msgstr "pa_mainloop_new() başarısız oldu."
+msgstr "pa_mainloop_new() neuspjelo."
 
-#: ../src/utils/pacat.c:1175
+#: ../src/utils/pacat.c:1183
 msgid "io_new() failed."
-msgstr "io_new() başarısız oldu."
+msgstr "io_new() neuspjelo."
 
-#: ../src/utils/pacat.c:1182 ../src/utils/pactl.c:2074
+#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2074
 msgid "pa_context_new() failed."
-msgstr "pa_context_new() başarısız oldu."
+msgstr "pa_context_new() neuspjelo."
 
-#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2080
+#: ../src/utils/pacat.c:1198 ../src/utils/pactl.c:2080
 #, c-format
 msgid "pa_context_connect() failed: %s"
-msgstr "pa_context_connect() başarısız oldu: %s"
+msgstr "pa_context_connect() neuspjelo: %s"
 
-#: ../src/utils/pacat.c:1196
+#: ../src/utils/pacat.c:1204
 msgid "pa_context_rttime_new() failed."
-msgstr "pa_context_rttime_new() başarısız oldu."
+msgstr "pa_context_rttime_new() neuspjelo."
 
-#: ../src/utils/pacat.c:1203 ../src/utils/pactl.c:2085
+#: ../src/utils/pacat.c:1211 ../src/utils/pactl.c:2085
 msgid "pa_mainloop_run() failed."
-msgstr "pa_mainloop_run() başarısız oldu."
+msgstr "pa_mainloop_run() neuspjelo."
 
 #: ../src/utils/pacmd.c:51 ../src/utils/pactl.c:1570
 msgid "NAME [ARGS ...]"
-msgstr "AD [DEĞİŞKENLER ...]"
+msgstr "NAZIV [ARGU ...]"
 
 #: ../src/utils/pacmd.c:52 ../src/utils/pacmd.c:60 ../src/utils/pactl.c:1571
 msgid "NAME|#N"
-msgstr "AD|#A"
+msgstr "NAZIV|#N"
 
 #: ../src/utils/pacmd.c:53 ../src/utils/pacmd.c:63 ../src/utils/pactl.c:1569
 #: ../src/utils/pactl.c:1575
 msgid "NAME"
-msgstr "AD"
+msgstr "NAZIV"
 
 #: ../src/utils/pacmd.c:54
 msgid "NAME|#N VOLUME"
-msgstr "AD|#A SES"
+msgstr "NAZIV|#N UREĐAJ"
 
 #: ../src/utils/pacmd.c:55
 msgid "#N VOLUME"
-msgstr "#N SES"
+msgstr "#N UREĐAJ"
 
 #: ../src/utils/pacmd.c:56 ../src/utils/pacmd.c:70 ../src/utils/pactl.c:1573
 msgid "NAME|#N 1|0"
-msgstr "AD|#A 1|0"
+msgstr "NAZIV|#N 1|0"
 
 #: ../src/utils/pacmd.c:57
 msgid "#N 1|0"
-msgstr "#A 1|0"
+msgstr "#N 1|0"
 
 #: ../src/utils/pacmd.c:58
 msgid "NAME|#N KEY=VALUE"
-msgstr "AD|#A ANAHTAR=DEĞER"
+msgstr "NAZIV|#N TIPKA=VRIJEDNOST"
 
 #: ../src/utils/pacmd.c:59
 msgid "#N KEY=VALUE"
-msgstr "#A ANAHTAR=DEĞER"
+msgstr "#N TIPKA=VRIJEDNOST"
 
 #: ../src/utils/pacmd.c:61
 msgid "#N"
-msgstr "#A"
+msgstr "#N"
 
 #: ../src/utils/pacmd.c:62
 msgid "NAME SINK|#N"
-msgstr "AD ALICI|#A"
+msgstr "NAZIV SLIVNIKA|#N"
 
 #: ../src/utils/pacmd.c:64 ../src/utils/pacmd.c:65
 msgid "NAME FILENAME"
-msgstr "AD DOSYAADI"
+msgstr "NAZIV NAZIV DATOTEKE"
 
 #: ../src/utils/pacmd.c:66
 msgid "PATHNAME"
-msgstr "YOLADI"
+msgstr "NAZIV PUTANJE"
 
 #: ../src/utils/pacmd.c:67
 msgid "FILENAME SINK|#N"
-msgstr "DOSYAADI ALICI|#A"
+msgstr "NAZIV DATOTEKE SLIVNIKA|#N"
 
 #: ../src/utils/pacmd.c:69 ../src/utils/pactl.c:1572
 msgid "#N SINK|SOURCE"
-msgstr "#A ALICI|KAYNAK"
+msgstr "#N SLIVNIK|IZVOR"
 
 #: ../src/utils/pacmd.c:71 ../src/utils/pacmd.c:77 ../src/utils/pacmd.c:78
 msgid "1|0"
@@ -2220,28 +2197,27 @@ msgstr "1|0"
 
 #: ../src/utils/pacmd.c:72 ../src/utils/pactl.c:1574
 msgid "CARD PROFILE"
-msgstr "KART PROFİLİ"
+msgstr "PROFIL KARTICE"
 
 #: ../src/utils/pacmd.c:73 ../src/utils/pactl.c:1576
 msgid "NAME|#N PORT"
-msgstr "AD|#A BAĞLANTI NOKTASI"
+msgstr "NAZIV|#N ULAZ"
 
 #: ../src/utils/pacmd.c:74 ../src/utils/pactl.c:1582
 msgid "CARD-NAME|CARD-#N PORT OFFSET"
-msgstr "KART-ADI|KART-#N PORT UZAKLIK"
+msgstr "NAZIV-KARTICE|KARTICA-#N POMAK ULAZA"
 
 #: ../src/utils/pacmd.c:75
 msgid "TARGET"
-msgstr "HEDEF"
+msgstr "ODREDIŠTE"
 
 #: ../src/utils/pacmd.c:76
-#| msgid "NUMERIC LEVEL"
 msgid "NUMERIC-LEVEL"
-msgstr "SAYISAL-SEVİYE"
+msgstr "BROJČANA-RAZINA"
 
 #: ../src/utils/pacmd.c:79
 msgid "FRAMES"
-msgstr "KARELER"
+msgstr "OKVIRI"
 
 #: ../src/utils/pacmd.c:81
 #, c-format
@@ -2252,9 +2228,9 @@ msgid ""
 "When no command is given pacmd starts in the interactive mode.\n"
 msgstr ""
 "\n"
-"  -h, --help                            Yardım gösterir\n"
-"      --version                         Sürüm gösterir\n"
-"pacmd için komut verilmediğinde karşılıklı konuşma kipinde başlar.\n"
+"  -h, --help                            Prikaži ovu pomoć\n"
+"      --version                         Prikaži pomoć\n"
+"Kada nema zadanih naredbi pacmd se pokreće u interaktivnom načinu.\n"
 
 #: ../src/utils/pacmd.c:128
 #, c-format
@@ -2264,14 +2240,14 @@ msgid ""
 "Linked with libpulse %s\n"
 msgstr ""
 "pacmd %s\n"
-"libpulse %s ile derlendi\n"
-"libpulse %s ile bağlantılı\n"
+"Kompilirano s libpulse %s\n"
+"Povezano s libpulse %s\n"
 
 #: ../src/utils/pacmd.c:142
 msgid "No PulseAudio daemon running, or not running as session daemon."
 msgstr ""
-"Hiçbir PulseAudio artalan işlemi çalıştırılmıyor ya da bir artalan işlem "
-"oturumu olarak çalıştırılmıyor."
+"Nema PulseAudio pozadinskog programa pokrenutog, ili nije pokrenut kao "
+"pozadinski program sesije."
 
 #: ../src/utils/pacmd.c:147
 #, c-format
@@ -2285,11 +2261,11 @@ msgstr "connect(): %s"
 
 #: ../src/utils/pacmd.c:172
 msgid "Failed to kill PulseAudio daemon."
-msgstr "PulseAudio artalan işlemi durdurulamadı."
+msgstr "Neuspjelo ubijanje PulseAudio pozadinskog programa."
 
 #: ../src/utils/pacmd.c:180
 msgid "Daemon not responding."
-msgstr "Artalan işlem yanıt vermiyor."
+msgstr "Pozadinski program ne regira."
 
 #: ../src/utils/pacmd.c:212 ../src/utils/pacmd.c:321 ../src/utils/pacmd.c:339
 #, c-format
@@ -2309,27 +2285,29 @@ msgstr "read(): %s"
 #: ../src/utils/pactl.c:164
 #, c-format
 msgid "Failed to get statistics: %s"
-msgstr "İstatistikler alınamadı: %s"
+msgstr "Neuspjelo dobivanje statistike: %s"
 
 #: ../src/utils/pactl.c:170
 #, c-format
 msgid "Currently in use: %u blocks containing %s bytes total.\n"
-msgstr "Şu anda kullanımda: %u bloklar toplamda %s bayt içeriyor.\n"
+msgstr "Trenutno u upotrebi: %u blokova sadrži %s ukupno bajta.\n"
 
 #: ../src/utils/pactl.c:173
 #, c-format
 msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "Tüm ömrü boyunca ayrılmış: %u blokları toplamda %s bayt içeriyor.\n"
+msgstr ""
+"Dodijeljeno tijekom cijelog vijeka trajanja: %u blokova sadrži %s ukupno "
+"bajta.\n"
 
 #: ../src/utils/pactl.c:176
 #, c-format
 msgid "Sample cache size: %s\n"
-msgstr "Örnekleme ön bellek boyutu: %s\n"
+msgstr "Veličina predmemorije uzorka: %s\n"
 
 #: ../src/utils/pactl.c:185
 #, c-format
 msgid "Failed to get server information: %s"
-msgstr "Sunucu bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija poslužitelja: %s"
 
 #: ../src/utils/pactl.c:190
 #, c-format
@@ -2341,12 +2319,12 @@ msgid ""
 "Client Index: %u\n"
 "Tile Size: %zu\n"
 msgstr ""
-"Sunucu Karakter Dizisi: %s\n"
-"Kütüphane Protokol Sürümü: %u\n"
-"Sunucu Protokol Sürümü: %u\n"
-"Yerelde Mi: %s\n"
-"İstemci Dizini: %u\n"
-"Desen Boyutu: %zu\n"
+"Niz poslužitelja: %s\n"
+"Inačica biblioteke protokola: %u\n"
+"Inačica protokola poslužitelja: %u\n"
+"Je lokalan: %s\n"
+"Sadržaj klijenta: %u\n"
+"Veličina pločice: %zu\n"
 
 #: ../src/utils/pactl.c:206
 #, c-format
@@ -2361,20 +2339,20 @@ msgid ""
 "Default Source: %s\n"
 "Cookie: %04x:%04x\n"
 msgstr ""
-"Kullanıcı Adı: %s\n"
-"Makine Adı: %s\n"
-"Sunucu Adı: %s\n"
-"Sunucu Sürümü: %s\n"
-"Varsayılan Örnekleme Tanımı: %s\n"
-"Varsayılan Kanal Adresleme: %s\n"
-"Varsayılan Alıcı: %s\n"
-"Varsayılan Kaynak: %s\n"
-"Çerez: %04x:%04x\n"
+"Ime korisnika: %s\n"
+"Naziv računala: %s\n"
+"Naziv poslužitelja: %s\n"
+"Inačica poslužitelja: %s\n"
+"Zadane specifikacije uzorka: %s\n"
+"Zadano mapiranje kanala: %s\n"
+"Zadani slivnik: %s\n"
+"Zadani  izvor: %s\n"
+"Kolačić: %04x:%04x\n"
 
 #: ../src/utils/pactl.c:255 ../src/utils/pactl.c:900 ../src/utils/pactl.c:978
 #, c-format
 msgid "Failed to get sink information: %s"
-msgstr "Alıcı bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija slivnika: %s"
 
 #: ../src/utils/pactl.c:281
 #, c-format
@@ -2397,43 +2375,43 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"Alıcı #%u\n"
-"\tDurum: %s\n"
-"\tAd: %s\n"
-"\tAçıklama: %s\n"
-"\tSürücü: %s\n"
-"\tÖrnekleme Tanımı: %s\n"
-"\tKanal Adresleme: %s\n"
-"\tModül Sahibi: %u\n"
-"\tSessiz: %s\n"
-"\tSes: %s\n"
-"\t        denge %0.2f\n"
-"\tTemel Ses: %s\n"
-"\tİzleme Kaynağı: %s\n"
-"\tGecikme: %0.0f usec, yapılandırılmış %0.0f usec\n"
-"\tBayraklar: %s%s%s%s%s%s%s\n"
-"\tÖzellikler:\n"
+"Slivnik #%u\n"
+"\tStanje: %s\n"
+"\tNaziv: %s\n"
+"\tOpis: %s\n"
+"\tUpravljački program: %s\n"
+"\tSpecifikacije uzorka: %s\n"
+"\tMapiranje kanala: %s\n"
+"\tVlasnik modula: %u\n"
+"\tUtišano: %s\n"
+"\tGlasnoća zvuka: %s\n"
+"\t        uravnoteženje %0.2f\n"
+"\tIzvorna glasnoća zvuka: %s\n"
+"\tNadgledanje izvora: %s\n"
+"\tLatencija: %0.0f usek, podešeno %0.0f usek\n"
+"\tOznake: %s%s%s%s%s%s%s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:325 ../src/utils/pactl.c:431 ../src/utils/pactl.c:592
 #, c-format
 msgid "\tPorts:\n"
-msgstr "\tBağlantı Noktaları:\n"
+msgstr "\tUlazi:\n"
 
 #: ../src/utils/pactl.c:332 ../src/utils/pactl.c:438
 #, c-format
 msgid "\tActive Port: %s\n"
-msgstr "\tEtkin Bağlantı Noktası: %s\n"
+msgstr "\tAktivni ulaz: %s\n"
 
 #: ../src/utils/pactl.c:338 ../src/utils/pactl.c:444
 #, c-format
 msgid "\tFormats:\n"
-msgstr "\tBiçimler:\n"
+msgstr "\tVrste:\n"
 
 #: ../src/utils/pactl.c:362 ../src/utils/pactl.c:920 ../src/utils/pactl.c:993
 #, c-format
 msgid "Failed to get source information: %s"
-msgstr "Kaynak bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija izvora: %s"
 
 #: ../src/utils/pactl.c:388
 #, c-format
@@ -2456,22 +2434,22 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"Kaynak #%u\n"
-"\tDurum: %s\n"
-"\tAd: %s\n"
-"\tAçıklama: %s\n"
-"\tSürücü: %s\n"
-"\tÖrnekleme Tanımı: %s\n"
-"\tKanal Adresleme: %s\n"
-"\tModül Sahibi: %u\n"
-"\tSessiz: %s\n"
-"\tSes: %s\n"
-"\t        denge %0.2f\n"
-"\tTemel Ses: %s\n"
-"\tAlıcı İzleme: %s\n"
-"\tGecikme: %0.0f usec, yapılandırılmış %0.0f usec\n"
-"\tBayraklar: %s%s%s%s%s%s\n"
-"\tÖzellikler:\n"
+"Izvor #%u\n"
+"\tStanje: %s\n"
+"\tNaziv: %s\n"
+"\tOpis: %s\n"
+"\tUpravljački program: %s\n"
+"\tSpecifikacije uzorka: %s\n"
+"\tMapiranje kanala: %s\n"
+"\tVlasnik modula: %u\n"
+"\tUtišano: %s\n"
+"\tGlasnoća zvuka: %s\n"
+"\t        uravnoteženje %0.2f\n"
+"\tIzvorna glasnoća zvuka: %s\n"
+"\tNadgledanje slivnika: %s\n"
+"\tLatencija: %0.0f usek, podešeno %0.0f usek\n"
+"\tOznake: %s%s%s%s%s%s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:416 ../src/utils/pactl.c:486 ../src/utils/pactl.c:529
@@ -2480,12 +2458,12 @@ msgstr ""
 #: ../src/utils/pactl.c:751 ../src/utils/pactl.c:802 ../src/utils/pactl.c:803
 #: ../src/utils/pactl.c:809
 msgid "n/a"
-msgstr "yok"
+msgstr "nedostupno"
 
 #: ../src/utils/pactl.c:455 ../src/utils/pactl.c:859
 #, c-format
 msgid "Failed to get module information: %s"
-msgstr "Modül bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija modula: %s"
 
 #: ../src/utils/pactl.c:478
 #, c-format
@@ -2497,17 +2475,17 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"Modül #%u\n"
-"\tAdı: %s\n"
-"\tDeğişken: %s\n"
-"\tKullanım Sayacı: %s\n"
-"\tÖzellikler:\n"
+"Modul #%u\n"
+"\tNaziv: %s\n"
+"\tArgument: %s\n"
+"\tBrojač korištenja: %s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:497
 #, c-format
 msgid "Failed to get client information: %s"
-msgstr "İstemci bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija klijenta: %s"
 
 #: ../src/utils/pactl.c:523
 #, c-format
@@ -2518,16 +2496,16 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"İstemci #%u\n"
-"\tSürücü: %s\n"
-"\tModül Sahibi: %s\n"
-"\tÖzellikler:\n"
+"Klijent #%u\n"
+"\tUpravljački program: %s\n"
+"\tVlasnik modula: %s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:540
 #, c-format
 msgid "Failed to get card information: %s"
-msgstr "Kart bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija kartice: %s"
 
 #: ../src/utils/pactl.c:563
 #, c-format
@@ -2539,28 +2517,27 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"Kart #%u\n"
-"\tAdı: %s\n"
-"\tSürücü: %s\n"
-"\tModül Sahibi: %s\n"
-"\tÖzellikler:\n"
+"Kartice #%u\n"
+"\tNaziv: %s\n"
+"\tUpravljački program: %s\n"
+"\tVlasnik modula: %s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:579
 #, c-format
 msgid "\tProfiles:\n"
-msgstr "\tProfiller:\n"
+msgstr "\tProfili:\n"
 
 #: ../src/utils/pactl.c:581
 #, c-format
 msgid "\t\t%s: %s (sinks: %u, sources: %u, priority: %u, available: %s)\n"
-msgstr ""
-"\t\t%s: %s (alıcılar: %u, kaynaklar: %u, öncelik: %u, kullanılabilir: %s)\n"
+msgstr "\t\t%s: %s (slivnici: %u, izvori: %u, prioritet: %u, dostupno: %s)\n"
 
 #: ../src/utils/pactl.c:586
 #, c-format
 msgid "\tActive Profile: %s\n"
-msgstr "\tEtkin Profil: %s\n"
+msgstr "\tAktivni profil: %s\n"
 
 #: ../src/utils/pactl.c:600
 #, c-format
@@ -2568,18 +2545,18 @@ msgid ""
 "\t\t\tProperties:\n"
 "\t\t\t\t%s\n"
 msgstr ""
-"\t\t\tÖzellikler:\n"
+"\t\t\tSvojstva:\n"
 "\t\t\t\t%s\n"
 
 #: ../src/utils/pactl.c:605
 #, c-format
 msgid "\t\t\tPart of profile(s): %s"
-msgstr "\t\t\\Profil(ler)in parçası: %s"
+msgstr "\t\t\tDio profila: %s"
 
 #: ../src/utils/pactl.c:622 ../src/utils/pactl.c:940 ../src/utils/pactl.c:1008
 #, c-format
 msgid "Failed to get sink input information: %s"
-msgstr "Alıcı giriş bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija ulaza slivnika: %s"
 
 #: ../src/utils/pactl.c:651
 #, c-format
@@ -2602,28 +2579,28 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"Alıcı Girişi #%u\n"
-"\tSürücü: %s\n"
-"\tModül Sahibi: %s\n"
-"\tİstemci: %s\n"
-"\tAlıcı: %u\n"
-"\tÖrnekleme Tanımı: %s\n"
-"\tKanal Adresleme: %s\n"
-"\tBiçim: %s\n"
-"\tDurduruldu: %s\n"
-"\tSessiz: %s\n"
-"\tSes: %s\n"
-"\t        denge %0.2f\n"
-"\tTampon Bellek Gecikmesi: %0.0f usec\n"
-"\tAlıcı Gecikmesi: %0.0f usec\n"
-"\tÖrnekleme Yöntemi: %s\n"
-"\tÖzellikler:\n"
+"Ulaz slivnika #%u\n"
+"\tUpravljački program: %s\n"
+"\tVlasnik modula: %s\n"
+"\tKlijent: %s\n"
+"\tSlivnik: %u\n"
+"\tSpecifikacije uzorka: %s\n"
+"\tMapiranje kanala: %s\n"
+"\tFormat: %s\n"
+"\tZatvoreno: %s\n"
+"\tUtišano: %s\n"
+"\tGlasnoća zvuka: %s\n"
+"\t        uravnoteženje %0.2f\n"
+"\tLatencija međuspremnika: %0.0f usek\n"
+"\tLatencija slivnika: %0.0f usek\n"
+"\tNačin normalizacije zvuka: %s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:692 ../src/utils/pactl.c:960 ../src/utils/pactl.c:1023
 #, c-format
 msgid "Failed to get source output information: %s"
-msgstr "Kaynak çıktı bilgileri alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija izvora izlaza: %s"
 
 #: ../src/utils/pactl.c:721
 #, c-format
@@ -2646,28 +2623,28 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"Kaynak Çıktısı #%u\n"
-"\tSürücü: %s\n"
-"\tModül Sahibi: %s\n"
-"\tİstemci: %s\n"
-"\tKaynak: %u\n"
-"\tÖrnekleme Tanımı: %s\n"
-"\tKanal Adresleme: %s\n"
-"\tBiçim: %s\n"
-"\tVeri Akışı Durduruldu: %s\n"
-"\tSessiz: %s\n"
-"\tSes: %s\n"
-"\t        denge %0.2f\n"
-"\tTampon Bellek Gecikmesi: %0.0f usec\n"
-"\tKaynak Gecikmesi: %0.0f usec\n"
-"\tYeniden Örnekleme yöntemi: %s\n"
-"\tÖzellikler:\n"
+"Izlaz izvora #%u\n"
+"\tUpravljački program: %s\n"
+"\tVlasnik modula: %s\n"
+"\tKlijent: %s\n"
+"\tSlivnik: %u\n"
+"\tSpecifikacije uzorka: %s\n"
+"\tMapiranje kanala: %s\n"
+"\tFormat: %s\n"
+"\tZatvoreno: %s\n"
+"\tUtišano: %s\n"
+"\tGlasnoća zvuka: %s\n"
+"\t        uravnoteženje %0.2f\n"
+"\tLatencija međuspremnika: %0.0f usek\n"
+"\tLatencija izlaza: %0.0f usek\n"
+"\tNačin normalizacije zvuka: %s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:762
 #, c-format
 msgid "Failed to get sample information: %s"
-msgstr "Örnekleme bilgisi alınamadı: %s"
+msgstr "Neuspjelo dobivanje informacija uzorka: %s"
 
 #: ../src/utils/pactl.c:789
 #, c-format
@@ -2685,28 +2662,28 @@ msgid ""
 "\tProperties:\n"
 "\t\t%s\n"
 msgstr ""
-"Örnekleme #%u\n"
-"\tAd: %s\n"
-"\tÖrnekleme Tanımı: %s\n"
-"\tKanal Adresleme: %s\n"
-"\tSes: %s\n"
-"\t        denge %0.2f\n"
-"\tSüre: %0.1fs\n"
-"\tBoyut: %s\n"
-"\tYavaş: %s\n"
-"\tDosya adı: %s\n"
-"\tÖzellikler:\n"
+"Uzorak #%u\n"
+"\tNaziv: %s\n"
+"\tSpecifikacije uzorka: %s\n"
+"\tMapiranje kanala: %s\n"
+"\tGlasnoća zvuka: %s\n"
+"\t        uravnoteženje %0.2f\n"
+"\tTrajanje: %0.1fs\n"
+"\tVeličina: %s\n"
+"\tNespremno: %s\n"
+"\tNaziv datoteke: %s\n"
+"\tSvojstva:\n"
 "\t\t%s\n"
 
 #: ../src/utils/pactl.c:817 ../src/utils/pactl.c:827
 #, c-format
 msgid "Failure: %s"
-msgstr "Hata: %s"
+msgstr "Neuspjeh: %s"
 
 #: ../src/utils/pactl.c:866
 #, c-format
 msgid "Failed to unload module: Module %s not loaded"
-msgstr "Modül kaldırılamadı: Modül %s yüklenemedi"
+msgstr "Neuspjelo uklanjanje modula: Modul %s nije učitan"
 
 #: ../src/utils/pactl.c:884
 #, c-format
@@ -2714,99 +2691,99 @@ msgid ""
 "Failed to set volume: You tried to set volumes for %d channels, whereas "
 "channel/s supported = %d\n"
 msgstr ""
-"Ses ayarlanamadı: %d kanal için ses ayarlamayı denediniz, halbuki "
-"desteklenen kanal sayısı %d\n"
+"Neuspjelo postavljanje glasnoće zvuka: pokušali ste postaviti glasnoću zvuka "
+"za %d kanale, dok su kanal/i podržani = %d\n"
 
 #: ../src/utils/pactl.c:1050
 #, c-format
 msgid "Failed to set format: invalid format string %s"
-msgstr "Biçim ayarlanamadı: geçersiz biçim dizisi %s"
+msgstr "Neuspjelo postavljanje formata: neispravni znak formata %s"
 
 #: ../src/utils/pactl.c:1093
 #, c-format
 msgid "Failed to upload sample: %s"
-msgstr "Örnekleme yüklenemedi: %s"
+msgstr "Neuspjelo učitavanje uzorka: %s"
 
 #: ../src/utils/pactl.c:1110
 msgid "Premature end of file"
-msgstr "Dosyanın erken bitişi"
+msgstr "Prerani kraj datoteke"
 
 #: ../src/utils/pactl.c:1130
 msgid "new"
-msgstr "yeni"
+msgstr "novi"
 
 #: ../src/utils/pactl.c:1133
 msgid "change"
-msgstr "değiştir"
+msgstr "promijeni"
 
 #: ../src/utils/pactl.c:1136
 msgid "remove"
-msgstr "kaldır"
+msgstr "ukloni"
 
 #: ../src/utils/pactl.c:1139 ../src/utils/pactl.c:1174
 msgid "unknown"
-msgstr "bilinmeyen"
+msgstr "nepoznat"
 
 #: ../src/utils/pactl.c:1147
 msgid "sink"
-msgstr "alıcı"
+msgstr "slivnik"
 
 #: ../src/utils/pactl.c:1150
 msgid "source"
-msgstr "kaynak"
+msgstr "izvor"
 
 #: ../src/utils/pactl.c:1153
 msgid "sink-input"
-msgstr "alıcı-girişi"
+msgstr "slivnik-izlaz"
 
 #: ../src/utils/pactl.c:1156
 msgid "source-output"
-msgstr "alıcı-çıkışı"
+msgstr "izvor-izlaz"
 
 #: ../src/utils/pactl.c:1159
 msgid "module"
-msgstr "modül"
+msgstr "modul"
 
 #: ../src/utils/pactl.c:1162
 msgid "client"
-msgstr "istemci"
+msgstr "klijent"
 
 #: ../src/utils/pactl.c:1165
 msgid "sample-cache"
-msgstr "örnek-önbellek"
+msgstr "uzorak-predmemorija"
 
 #: ../src/utils/pactl.c:1168
 msgid "server"
-msgstr "sunucu"
+msgstr "poslužitelj"
 
 #: ../src/utils/pactl.c:1171
 msgid "card"
-msgstr "kart"
+msgstr "kartica"
 
 #: ../src/utils/pactl.c:1180
 #, c-format
 msgid "Event '%s' on %s #%u\n"
-msgstr "%2$s #%3$u üzerinde '%1$s' olayı\n"
+msgstr "Događaj '%s' na %s #%u\n"
 
 #: ../src/utils/pactl.c:1452
 msgid "Got SIGINT, exiting."
-msgstr "SIGINT alındı, çıkılıyor."
+msgstr "SIGINT, izlazim."
 
 #: ../src/utils/pactl.c:1485
 msgid "Invalid volume specification"
-msgstr "Geçersiz ses tanımı"
+msgstr "Neispravan opis glasoće zvuka"
 
 #: ../src/utils/pactl.c:1508
 msgid "Volume outside permissible range.\n"
-msgstr "İzin verilebilir aralık dışındaki ses.\n"
+msgstr "Glasnoća zvuka je izvan dopuštenog raspona.\n"
 
 #: ../src/utils/pactl.c:1521
 msgid "Invalid number of volume specifications.\n"
-msgstr "Geçersiz ses tanımı numarası.\n"
+msgstr "Pogrešan broj specifikacija glasnoće zvuka.\n"
 
 #: ../src/utils/pactl.c:1533
 msgid "Inconsistent volume specification.\n"
-msgstr "Tutarsız ses tanımı.\n"
+msgstr "Nedosljedna specifikacija glasnoće zvuka.\n"
 
 #: ../src/utils/pactl.c:1563 ../src/utils/pactl.c:1564
 #: ../src/utils/pactl.c:1565 ../src/utils/pactl.c:1566
@@ -2820,39 +2797,39 @@ msgstr "Tutarsız ses tanımı.\n"
 #: ../src/utils/pactl.c:1581 ../src/utils/pactl.c:1582
 #: ../src/utils/pactl.c:1583
 msgid "[options]"
-msgstr "[seçenekler]"
+msgstr "[mogućnosti]"
 
 #: ../src/utils/pactl.c:1565
 msgid "[TYPE]"
-msgstr "[TÜR]"
+msgstr "[VRSTA]"
 
 #: ../src/utils/pactl.c:1567
 msgid "FILENAME [NAME]"
-msgstr "DOSYAADI [AD]"
+msgstr "NAZIV-DATOTEKE [NAZIV]"
 
 #: ../src/utils/pactl.c:1568
 msgid "NAME [SINK]"
-msgstr "AD [ALICI]"
+msgstr "NAZIV [SLIVNIK]"
 
 #: ../src/utils/pactl.c:1577
 msgid "NAME|#N VOLUME [VOLUME ...]"
-msgstr "AD|#A SES [SES ...]"
+msgstr "NAZIV|#N GLASNOĆA ZVUKA [GLASNOĆA ZVUKA ...]"
 
 #: ../src/utils/pactl.c:1578
 msgid "#N VOLUME [VOLUME ...]"
-msgstr "#A SES [SES ...]"
+msgstr "#N GLASNOĆA ZVUKA [GLASNOĆA ZVUKA ...]"
 
 #: ../src/utils/pactl.c:1579
 msgid "NAME|#N 1|0|toggle"
-msgstr "İSİM|#N 1|0|geçiş"
+msgstr "NAZIV|#N 1|0|prebacivanje"
 
 #: ../src/utils/pactl.c:1580
 msgid "#N 1|0|toggle"
-msgstr "#N 1|0|geçiş"
+msgstr "#N 1|0|prebacivanje"
 
 #: ../src/utils/pactl.c:1581
 msgid "#N FORMATS"
-msgstr "#A BİÇİMLER"
+msgstr "#N FORMATI"
 
 #: ../src/utils/pactl.c:1584
 #, c-format
@@ -2862,8 +2839,8 @@ msgid ""
 "can be used to specify the default sink, source and monitor.\n"
 msgstr ""
 "\n"
-"Özel isimler @DEFAULT_SINK@, @DEFAULT_SOURCE@ ve @DEFAULT_MONITOR@\n"
-"varsayılan alıcıyı, kaynağı ve ekranı belirtmek için kullanılabilir.\n"
+"Posebni nazivi @DEFAULT_SINK@, @DEFAULT_SOURCE@ i @DEFAULT_MONITOR@\n"
+"mogu se koristiti za određivanje zadanog slivnika, izvora i nadgledanja.\n"
 
 #: ../src/utils/pactl.c:1587
 #, c-format
@@ -2878,12 +2855,12 @@ msgid ""
 "server\n"
 msgstr ""
 "\n"
-"  -h, --help                            Yardım gösterir\n"
-"      --version                         Sürüm gösterir\n"
+"  -h, --help                            Prikazuje ovu pomoć\n"
+"      --version                         Prikazuje inačicu\n"
 "\n"
-"  -s, --server=SUNUCU                   Bağlantı kurulacak sunucu adı\n"
-"  -n, --client-name=AD                Sunucu üzerinde bu istemci nasıl "
-"çağrılacak\n"
+"  -s, --server=SERVER                   Naziv poslužitelja za povezivanje\n"
+"  -n, --client-name=NAME                Kako nazvati ovaj klijent na "
+"poslužitelju\n"
 
 #: ../src/utils/pactl.c:1628
 #, c-format
@@ -2893,179 +2870,174 @@ msgid ""
 "Linked with libpulse %s\n"
 msgstr ""
 "pactl %s\n"
-"Libpulse %s ile derlendi\n"
-"Libpulse %s ile bağlantılı\n"
+"Kompilirano s libpulse %s\n"
+"Povezano s libpulse %s\n"
 
 #: ../src/utils/pactl.c:1684
 #, c-format
 msgid "Specify nothing, or one of: %s"
-msgstr "Şunlardan birini belirtin ya da hiçbir şey belirtmeyin: %s"
+msgstr "Ne određuj ništa, ili jedan od: %s"
 
 #: ../src/utils/pactl.c:1694
 msgid "Please specify a sample file to load"
-msgstr "Lütfen yüklemek için bir örnekleme dosyası belirtin"
+msgstr "Odredi datoteku uzorka za učitavanje"
 
 #: ../src/utils/pactl.c:1707
 msgid "Failed to open sound file."
-msgstr "Ses dosyası açılamadı."
+msgstr "Neuspjelo otvaranje datoteke zvuka."
 
 #: ../src/utils/pactl.c:1719
 msgid "Warning: Failed to determine sample specification from file."
-msgstr "Uyarı: Dosyadan örnekleme tanımı belirlenemedi."
+msgstr "Upozorenje: neuspjelo otkrivanje specifikacija uzorka iz datoteke"
 
 #: ../src/utils/pactl.c:1729
 msgid "You have to specify a sample name to play"
-msgstr "Çalmak için örnek ad belirtmelisiniz"
+msgstr "Morate odrediti naziv uzorka za reprodukciju"
 
 #: ../src/utils/pactl.c:1741
 msgid "You have to specify a sample name to remove"
-msgstr "Kaldırmak için örnek ad belirtmelisiniz"
+msgstr "Morate odrediti naziv uzorka za uklanjanje"
 
 #: ../src/utils/pactl.c:1750
 msgid "You have to specify a sink input index and a sink"
-msgstr "Bir alıcı giriş göstergesi ve alıcı belirtmelisiniz"
+msgstr "Morate odrediti sadržaj ulaza slivnika i slivnik"
 
 #: ../src/utils/pactl.c:1760
 msgid "You have to specify a source output index and a source"
-msgstr "Bir kaynak çıkış indeksi ve kaynak belirtmelisiniz"
+msgstr "Morate odrediti sadržaj izlaza izvora i izvor"
 
 #: ../src/utils/pactl.c:1775
 msgid "You have to specify a module name and arguments."
-msgstr "Bir modül adı ve değişken belirtmelisiniz."
+msgstr "Morate odrediti naziv modula i argumente"
 
 #: ../src/utils/pactl.c:1795
 msgid "You have to specify a module index or name"
-msgstr "Bir modül dizini ya da adı belirtmelisiniz"
+msgstr "Morate odrediti sadržaj modula ili naziv"
 
 #: ../src/utils/pactl.c:1808
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean value."
 msgstr ""
-"Birden daha fazla alıcı belirtemezsiniz. Bir boolean değer belirtmelisiniz."
+"Možda niste odredili više od jednog slivnika. Morate odrediti boolean "
+"vrijednosti"
 
 #: ../src/utils/pactl.c:1813 ../src/utils/pactl.c:1833
 msgid "Invalid suspend specification."
-msgstr "Geçersiz bekletme tanımlaması"
+msgstr "Neispravna specifikacija suspendiranja."
 
 #: ../src/utils/pactl.c:1828
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value."
 msgstr ""
-"Bir kaynaktan daha fazlasını belirtemezsiniz. Bir boolean değer "
-"belirtmelisiniz."
+"Možda niste odredili više od jednog izvora. Morate odrediti boolean "
+"vrijednosti"
 
 #: ../src/utils/pactl.c:1845
 msgid "You have to specify a card name/index and a profile name"
-msgstr "Bir kart adı/dizin ve bir profil adı belirtmelisiniz"
+msgstr "Morate odrediti naziv kartice/sadržaj i naziv profila"
 
 #: ../src/utils/pactl.c:1856
 msgid "You have to specify a sink name/index and a port name"
-msgstr "Bir alıcı adı/indeksi ve bağlantı noktası adı belirtmelisiniz"
+msgstr "Morate odrediti naziv slivnika/sadržaj i naziv ulaza"
 
 #: ../src/utils/pactl.c:1867
 msgid "You have to specify a sink name"
-msgstr "Bir alıcı adı belirtmelisiniz"
+msgstr "Morate odrediti naziv slivnika"
 
 #: ../src/utils/pactl.c:1877
 msgid "You have to specify a source name/index and a port name"
-msgstr "Bir kaynak adı/dizini ve bir bağlantı noktası adı belirtmelisiniz"
+msgstr "Morate odrediti naziv izvora/sadržaj i naziv ulaza"
 
 #: ../src/utils/pactl.c:1888
 msgid "You have to specify a source name"
-msgstr "Bir kaynak adı belirtmelisiniz"
+msgstr "Morate odrediti naziv izvora"
 
 #: ../src/utils/pactl.c:1898
 msgid "You have to specify a sink name/index and a volume"
-msgstr "Bir alıcı adı/indeksi ve ses belirtmelisiniz"
+msgstr "Morate odrediti naziv slivnika/sadržaj i glasnoću zvuka"
 
 #: ../src/utils/pactl.c:1911
 msgid "You have to specify a source name/index and a volume"
-msgstr "Bir kaynak adı/dizini ve bir ses belirtmelisiniz"
+msgstr "Morate odrediti naziv izvora/sadržaj i glasnoću zvuka"
 
 #: ../src/utils/pactl.c:1924
 msgid "You have to specify a sink input index and a volume"
-msgstr "Bir alıcı girdisi indeksi ve bir ses belirtmek zorundasınız"
+msgstr "Morate odrediti sadržaj ulaza slivnika i glasnoću zvuka"
 
 #: ../src/utils/pactl.c:1929
 msgid "Invalid sink input index"
-msgstr "Geçersiz alıcı giriş indeksi"
+msgstr "Neispravan sadržaj ulaza slivnika"
 
 #: ../src/utils/pactl.c:1940
 msgid "You have to specify a source output index and a volume"
-msgstr "Bir kaynak çıktı dizini ve bir ses belirtmelisiniz"
+msgstr "Morate odrediti sadržaj izlaza izvora i glasanoću zvuka"
 
 #: ../src/utils/pactl.c:1945
 msgid "Invalid source output index"
-msgstr "Geçersiz kaynak çıktı dizini"
+msgstr "Neispravan sadržaj izlaza izvora"
 
 #: ../src/utils/pactl.c:1956
-#| msgid "You have to specify a sink name/index and a mute boolean"
 msgid ""
 "You have to specify a sink name/index and a mute action (0, 1, or 'toggle')"
 msgstr ""
-"Bir alıcı adı/indeksi ve bir sessizlik eylemi (0, 1 ya da 'toggle') "
-"belirtmek zorundasınız"
+"Morate odrediti naziv slivnika/sadržaj i radnju utišavanja (0, 1, ili "
+"'prebacivanje')"
 
 #: ../src/utils/pactl.c:1961 ../src/utils/pactl.c:1976
 #: ../src/utils/pactl.c:1996 ../src/utils/pactl.c:2014
 msgid "Invalid mute specification"
-msgstr "Geçersiz sessiz tanımı"
+msgstr "Neispravne specifikacije utišavanja"
 
 #: ../src/utils/pactl.c:1971
-#| msgid "You have to specify a source name/index and a mute boolean"
 msgid ""
 "You have to specify a source name/index and a mute action (0, 1, or 'toggle')"
 msgstr ""
-"Bir kaynak adı/dizini ve bir sessizlik eylemi (0, 1 yada 'toggle') "
-"belirtmelisiniz"
+"Morate odrediti naziv izvora/sadržaj i radnju utišavanja (0, 1, ili "
+"'prebacivanje')"
 
 #: ../src/utils/pactl.c:1986
-#| msgid "You have to specify a sink input index and a mute boolean"
 msgid ""
 "You have to specify a sink input index and a mute action (0, 1, or 'toggle')"
 msgstr ""
-"Bir alıcı girdi dizini ve bir sessizlik eylemi (0, 1 ya da 'toggle') "
-"belirtmek zorundasınız"
+"Morate odrediti naziv sadržaj ulaza slivnika i radnju utišavanja (0, 1, ili "
+"'prebacivanje')"
 
 #: ../src/utils/pactl.c:1991
 msgid "Invalid sink input index specification"
-msgstr "Geçersiz alıcı girişi indeks tanımı"
+msgstr "Neispravna specifikacija sadržaja ulaza slivnika"
 
 #: ../src/utils/pactl.c:2004
-#| msgid "You have to specify a source output index and a mute boolean"
 msgid ""
 "You have to specify a source output index and a mute action (0, 1, or "
 "'toggle')"
 msgstr ""
-"Bir kaynak çıktı dizini ve bir sessizlik eylemi (0, 1 ya da 'toggle') "
-"belirtmek zorundasınız"
+"Morate odrediti sadržaj izlaza izvora i radnju utišavanja (0, 1, ili "
+"'prebacivanje')"
 
 #: ../src/utils/pactl.c:2009
 msgid "Invalid source output index specification"
-msgstr "Geçersiz kaynak çıktısı indeksi tanımlaması"
+msgstr "Neispravna specifikacija sadržaja izlaza izvora"
 
 #: ../src/utils/pactl.c:2026
 msgid ""
 "You have to specify a sink index and a semicolon-separated list of supported "
 "formats"
 msgstr ""
-"Bir alıcı indeksi ve desteklenen biçimlerin, noktalı virgülle ayrılmış "
-"listesini belirtmek zorundasınız"
+"Morate odrediti sadržaj slivnika i popis podržanih formata odvojenih točka-"
+"zarezom"
 
 #: ../src/utils/pactl.c:2038
 msgid "You have to specify a card name/index, a port name and a latency offset"
-msgstr ""
-"Bir kart adı/indeksi, bir bağlantı noktası adı ve bir gecikme uzaklığı "
-"belirtmek zorundasınız"
+msgstr "Morate odrediti naziv kartice/sadržaj, naziv ulaza i pomak latencije"
 
 #: ../src/utils/pactl.c:2045
 msgid "Could not parse latency offset"
-msgstr "Gecikme uzaklığı ayrıştırılamadı"
+msgstr "Nemoguća obrada pomaka latencije"
 
 #: ../src/utils/pactl.c:2057
 msgid "No valid command specified."
-msgstr "Belirtilen geçerli komut yok."
+msgstr "Nema određenih valjanih naredbi."
 
 #: ../src/utils/pasuspender.c:79
 #, c-format
@@ -3080,32 +3052,32 @@ msgstr "execvp(): %s\n"
 #: ../src/utils/pasuspender.c:111
 #, c-format
 msgid "Failure to resume: %s\n"
-msgstr "Devam edilemedi: %s\n"
+msgstr "Neuspjelo ponovno pokretanje: %s\n"
 
 #: ../src/utils/pasuspender.c:145
 #, c-format
 msgid "Failure to suspend: %s\n"
-msgstr "Bekletilemedi: %s\n"
+msgstr "Neuspjela suspenzija: %s\n"
 
 #: ../src/utils/pasuspender.c:170
 #, c-format
 msgid "WARNING: Sound server is not local, not suspending.\n"
-msgstr "UYARI: Ses sunucusu yerel değil, askıya alınamıyor.\n"
+msgstr "UPOZORENJE: zvučni poslužitelj nije lokalan, ne suspendira se.\n"
 
 #: ../src/utils/pasuspender.c:183
 #, c-format
 msgid "Connection failure: %s\n"
-msgstr "Bağlantı hatası: %s\n"
+msgstr "Povezivanje neuspjelo: %s\n"
 
 #: ../src/utils/pasuspender.c:201
 #, c-format
 msgid "Got SIGINT, exiting.\n"
-msgstr "SIGINT sinyali alındı, çıkılıyor.\n"
+msgstr "SIGINT, izlazim.\n"
 
 #: ../src/utils/pasuspender.c:219
 #, c-format
 msgid "WARNING: Child process terminated by signal %u\n"
-msgstr "UYARI: Alt işlem %u sinyali ile sonlandırıldı\n"
+msgstr "WARNING: podređeni proces je završen sa signalom %u\n"
 
 #: ../src/utils/pasuspender.c:228
 #, c-format
@@ -3118,11 +3090,11 @@ msgid ""
 "to\n"
 "\n"
 msgstr ""
-"%s [seçenekler] ... \n"
+"%s [mogućnosti] ... \n"
 "\n"
-"  -h, --help                            Yardımı gösterir\n"
-"      --version                         Sürüm gösterir\n"
-"  -s, --server=SUNUCU                   Bağlanılacak sunucunun adı\n"
+"  -h, --help                            Prikazuje ovu pomoć\n"
+"      --version                         Prikazuje inačicu\n"
+"  -s, --server=SERVER                   Naziv poslužitelja za povezivanje\n"
 "\n"
 
 #: ../src/utils/pasuspender.c:266
@@ -3133,23 +3105,23 @@ msgid ""
 "Linked with libpulse %s\n"
 msgstr ""
 "pasuspender %s\n"
-"Libpulse %s ile derlendi\n"
-"Libpulse %s ile bağlantılı\n"
+"Kompilirano s libpulse %s\n"
+"Povezano s libpulse %s\n"
 
 #: ../src/utils/pasuspender.c:295
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
-msgstr "pa_mainloop_new() başarısız oldu.\n"
+msgstr "pa_mainloop_new() neuspjelo.\n"
 
 #: ../src/utils/pasuspender.c:308
 #, c-format
 msgid "pa_context_new() failed.\n"
-msgstr "pa_context_new() başarısız oldu.\n"
+msgstr "pa_context_new() neuspjelo.\n"
 
 #: ../src/utils/pasuspender.c:320
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
-msgstr "pa_mainloop_run() başarısız oldu.\n"
+msgstr "pa_mainloop_run() neuspjelo.\n"
 
 #: ../src/utils/pax11publish.c:58
 #, c-format
@@ -3162,124 +3134,82 @@ msgid ""
 "variables and cookie file.\n"
 " -r    Remove PulseAudio data from X11 display\n"
 msgstr ""
-"%s [-D ekran] [-S sunucu] [-O alıcı] [-I kaynak] [-c dosya]  [-d|-e|-i|-r]\n"
+"%s [-D prikaz] [-S poslužitelj] [-O slivnik] [-I izvor] [-c datoteka]  [-d|-"
+"e|-i|-r]\n"
 "\n"
-" -d    X11 ekranına bağlı mevcut PulseAudio verilerini gösterir "
-"(varsayılan)\n"
-" -e    X11 ekranına bağlı yerel PulseAudio verilerini dışa aktarır\n"
-" -i    X11 ekranından PulseAudio verilerini yerel çevresel değişkenlere ve "
-"çerez dosyalarına aktarır.\n"
-" -r    X11 ekranından PulseAudio verilerini kaldırır\n"
+" -d    Prikazuje trenutne PulseAudio podatke povezane s X11 zaslonom "
+"(zadano)\n"
+" -e    Izvezi lokalne PulseAudio podatke na X11 zaslon\n"
+" -i    Uvezi PulseAudio podatke s X11 zaslona u varijable lokalnog okruženja "
+"i datoteku kolačića.\n"
+" -r    Ukloni PulseAudio podatke s X11 zaslona\n"
 
 #: ../src/utils/pax11publish.c:91
 #, c-format
 msgid "Failed to parse command line.\n"
-msgstr "Komut satırı ayrıştırılamadı.\n"
+msgstr "Neuspjela obrada naredbenog redka.\n"
 
 #: ../src/utils/pax11publish.c:110
 #, c-format
 msgid "Server: %s\n"
-msgstr "Sunucu: %s\n"
+msgstr "Poslužitelj: %s\n"
 
 #: ../src/utils/pax11publish.c:112
 #, c-format
 msgid "Source: %s\n"
-msgstr "Kaynak: %s\n"
+msgstr "Izvor: %s\n"
 
 #: ../src/utils/pax11publish.c:114
 #, c-format
 msgid "Sink: %s\n"
-msgstr "Alıcı: %s\n"
+msgstr "Slivnik: %s\n"
 
 #: ../src/utils/pax11publish.c:116
 #, c-format
 msgid "Cookie: %s\n"
-msgstr "Çerez: %s\n"
+msgstr "Kolačić: %s\n"
 
 #: ../src/utils/pax11publish.c:134
 #, c-format
 msgid "Failed to parse cookie data\n"
-msgstr "Çerez veriler çözümlenemedi\n"
+msgstr "Neuspjela obrada podataka kolačića\n"
 
 #: ../src/utils/pax11publish.c:139
 #, c-format
 msgid "Failed to save cookie data\n"
-msgstr "Çerez veriler kaydedilemedi\n"
+msgstr "Neuspjelo spremanje podataka kolačića\n"
 
 #: ../src/utils/pax11publish.c:168
 #, c-format
 msgid "Failed to get FQDN.\n"
-msgstr "FQDN alınamadı.\n"
+msgstr "Neuspjelo FQDN dobivanje.\n"
 
 #: ../src/utils/pax11publish.c:188
 #, c-format
 msgid "Failed to load cookie data\n"
-msgstr "Çerez veriler yüklenemedi\n"
+msgstr "Neuspjelo učitavanje podataka kolačića\n"
 
 #: ../src/utils/pax11publish.c:206
 #, c-format
 msgid "Not yet implemented.\n"
-msgstr "Henüz uygulanmadı.\n"
+msgstr "Još nije implementirano.\n"
+
+#~ msgid "wants to record audio."
+#~ msgstr "želi snimiti zvuk."
 
 #~ msgid ""
-#~ "%s [options]\n"
-#~ "\n"
-#~ "-h, --help                            Show this help\n"
-#~ "-v, --verbose                         Print debug messages\n"
-#~ "      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
-#~ "44100)\n"
-#~ "      --from-format=SAMPLEFORMAT      From sample type (defaults to "
-#~ "s16le)\n"
-#~ "      --from-channels=CHANNELS        From number of channels (defaults "
-#~ "to 1)\n"
-#~ "      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
-#~ "44100)\n"
-#~ "      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
-#~ "      --to-channels=CHANNELS          To number of channels (defaults to "
-#~ "1)\n"
-#~ "      --resample-method=METHOD        Resample method (defaults to auto)\n"
-#~ "      --seconds=SECONDS               From stream duration (defaults to "
-#~ "60)\n"
-#~ "\n"
-#~ "If the formats are not specified, the test performs all formats "
-#~ "combinations,\n"
-#~ "back and forth.\n"
-#~ "\n"
-#~ "Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
-#~ "alaw,\n"
-#~ "s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
-#~ "\n"
-#~ "See --dump-resample-methods for possible values of resample methods.\n"
+#~ "OK, so you are running PA in system mode. Please note that you most "
+#~ "likely shouldn't be doing that.\n"
+#~ "If you do it nonetheless then it's your own fault if things don't work as "
+#~ "expected.\n"
+#~ "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
+#~ "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why "
+#~ "system mode is usually a bad idea."
 #~ msgstr ""
-#~ "%s [seçenekler]\n"
-#~ "\n"
-#~ "-h, --help                            Yardımı gösterir\n"
-#~ "-v, --verbose                         Hata ayıklama iletilerini yazdırır\n"
-#~ "      --from-rate=ÖRNEKLEMEHIZ          Hz cinsinde örnekleme hızından "
-#~ "(varsayılan - 44100)\n"
-#~ "      --from-format=ÖRNEKLEMEBİÇİMİ      Örnekleme türünden (varsayılan - "
-#~ "s16le)\n"
-#~ "      --from-channels=KANALLAR        Kanal sayılarından (varsayılan - "
-#~ "1)\n"
-#~ "      --to-rate=ÖRNEKLEMEHIZI            Hz cinsinde örnekleme hızına "
-#~ "(varsayılan - 44100)\n"
-#~ "      --to-format=ÖRNEKLEMEBİÇİMİ        Örnekleme türüne (varsayılan - "
-#~ "s16le)\n"
-#~ "      --to-channels=KANALLAR          Kanal sayılarına (varsayılan - 1)\n"
-#~ "      --resample-method=YÖNTEM        Yöntemi yeniden örnekleme "
-#~ "(varsayılan otomatik)\n"
-#~ "      --seconds=SANİYE               Akış süresinden (varsayılan - 60)\n"
-#~ "\n"
-#~ "Eğer biçimler belirtilmezse, test bütün biçimlerin birleşiminde ileri "
-#~ "geri\n"
-#~ "gerçekleştirilir.\n"
-#~ "\n"
-#~ "Örnek tür şunlardan biri olmalıdır; s16le, s16be, u8, float32le, "
-#~ "float32be, ulaw, alaw,\n"
-#~ "s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
-#~ "\n"
-#~ "Yeniden örnekleme yöntemlerinin olası değerlerini --dump-resample-methods "
-#~ "gösterir.\n"
-
-#~ msgid "%s %s\n"
-#~ msgstr "%s %s\n"
+#~ "U redu, PA je pokrenut u načinu rada sustava. Zapamtite kako to uglavnom "
+#~ "ne biste trebali raditi.\n"
+#~ "Ako ste ipak to učinili, vi ste odgovorni ako stvari ne rade kako bi se "
+#~ "od njih očekivalo.\n"
+#~ "Pročitajte http://www.freedesktop.org/wiki/Software/PulseAudio/"
+#~ "Documentation/User/WhatIsWrongWithSystemWide/ za objašnjenje zašto je "
+#~ "način rada sustava uobičajeno loša ideja."
diff --git a/po/it.po b/po/it.po
index 45f3134..d71d74c 100644
--- a/po/it.po
+++ b/po/it.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-04-06 11:53+0200\n"
-"PO-Revision-Date: 2016-04-06 11:53+0200\n"
+"POT-Creation-Date: 2017-06-08 13:18+0200\n"
+"PO-Revision-Date: 2017-06-08 13:26+0200\n"
 "Last-Translator: Milo Casagrande <milo at milo.name>\n"
 "Language-Team: Italian <tp at lists.linux.it>\n"
 "Language: it\n"
@@ -19,10 +19,10 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.7\n"
+"X-Generator: Poedit 1.8.12\n"
 
 # mamma mia che impressione
-#: ../src/daemon/cmdline.c:111
+#: ../src/daemon/cmdline.c:113
 #, c-format
 msgid ""
 "%s [options]\n"
@@ -81,6 +81,7 @@ msgid ""
 "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
 "                                        platforms that support it.\n"
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+"      --enable-memfd[=BOOL]             Enable memfd shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
 "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
@@ -140,10 +141,6 @@ msgstr ""
 "      --exit-idle-time=SECONDI          Termina il demone quando inattivo e "
 "una\n"
 "                                        volta trascorso questo tempo\n"
-"      --module-idle-time=SECONDI        Rimuove i moduli caricati in modo\n"
-"                                        automatico quando inattivo e una "
-"volta\n"
-"                                        trascorso questo tempo\n"
 "      --scache-idle-time=SECONDI        Rimuove i campioni caricati in modo\n"
 "                                        automatico quando inattivo e una "
 "volta\n"
@@ -177,6 +174,8 @@ msgstr ""
 "                                        supportano.\n"
 "      --disable-shm[=BOOL]              Disabilita il supporto alla memoria\n"
 "                                        condivisa.\n"
+"      --enable-memfd[=BOOL]             Abilita il support alla memoria\n"
+"                                        condivisa memfd\n"
 "\n"
 "SCRIPT DI AVVIO:\n"
 "  -L, --load=\"MODULO ARGOMENTI\"       Carica il modulo di plugin "
@@ -189,15 +188,15 @@ msgstr ""
 "  -n                                    Non carica il file script "
 "predefinito\n"
 
-#: ../src/daemon/cmdline.c:243
+#: ../src/daemon/cmdline.c:246
 msgid "--daemonize expects boolean argument"
 msgstr "--daemonize richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:251
+#: ../src/daemon/cmdline.c:254
 msgid "--fail expects boolean argument"
 msgstr "--fail richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:262
+#: ../src/daemon/cmdline.c:265
 msgid ""
 "--log-level expects log level argument (either numeric in range 0..4 or one "
 "of debug, info, notice, warn, error)."
@@ -206,27 +205,27 @@ msgstr ""
 "nell'intervallo numerico 0..4 oppure uno tra debug, info, notice, warn, "
 "error)."
 
-#: ../src/daemon/cmdline.c:274
+#: ../src/daemon/cmdline.c:277
 msgid "--high-priority expects boolean argument"
 msgstr "--high-priority richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:282
+#: ../src/daemon/cmdline.c:285
 msgid "--realtime expects boolean argument"
 msgstr "--realtime richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:290
+#: ../src/daemon/cmdline.c:293
 msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:298
+#: ../src/daemon/cmdline.c:301
 msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:306
+#: ../src/daemon/cmdline.c:309
 msgid "--use-pid-file expects boolean argument"
 msgstr "--use-pid-file richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:325
+#: ../src/daemon/cmdline.c:328
 msgid ""
 "Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a "
 "valid file name 'file:<path>', 'newfile:<path>'."
@@ -235,7 +234,7 @@ msgstr ""
 "\" o \"auto\" oppure un nome di file valido \"file:<percorso>\", \"newfile:"
 "<percorso>\"."
 
-#: ../src/daemon/cmdline.c:327
+#: ../src/daemon/cmdline.c:330
 msgid ""
 "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
 "name 'file:<path>', 'newfile:<path>'."
@@ -243,98 +242,102 @@ msgstr ""
 "Destinazione del registro non valida: usare \"syslog\", \"stderr\" o \"auto"
 "\" oppure un nome di file valido \"file:<percorso>\", \"newfile:<percorso>\"."
 
-#: ../src/daemon/cmdline.c:335
+#: ../src/daemon/cmdline.c:338
 msgid "--log-time expects boolean argument"
 msgstr "--log-time richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:343
+#: ../src/daemon/cmdline.c:346
 msgid "--log-meta expects boolean argument"
 msgstr "--log-meta richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:363
+#: ../src/daemon/cmdline.c:366
 #, c-format
 msgid "Invalid resample method '%s'."
 msgstr "Metodo di ricampionamento \"%s\" non valido."
 
-#: ../src/daemon/cmdline.c:370
+#: ../src/daemon/cmdline.c:373
 msgid "--system expects boolean argument"
 msgstr "--system richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:378
+#: ../src/daemon/cmdline.c:381
 msgid "--no-cpu-limit expects boolean argument"
 msgstr "--no-cpu-limit richiede un argomento booleano"
 
-#: ../src/daemon/cmdline.c:386
+#: ../src/daemon/cmdline.c:389
 msgid "--disable-shm expects boolean argument"
 msgstr "--disable-shm richiede un argomento booleano"
 
-#: ../src/daemon/daemon-conf.c:259
+#: ../src/daemon/cmdline.c:397
+msgid "--enable-memfd expects boolean argument"
+msgstr "--enable-memfd richiede un argomento booleano"
+
+#: ../src/daemon/daemon-conf.c:262
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Destinazione di registro \"%s\" non valida."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:277
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Livello di registro \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:289
+#: ../src/daemon/daemon-conf.c:292
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Metodo di ricampionamento \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:311
+#: ../src/daemon/daemon-conf.c:314
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] rlimit \"%s\" non valido."
 
 # o campionamento?? ma campionamento non è sampling?
-#: ../src/daemon/daemon-conf.c:331
+#: ../src/daemon/daemon-conf.c:334
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Formato di campionamento \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:348 ../src/daemon/daemon-conf.c:365
+#: ../src/daemon/daemon-conf.c:351 ../src/daemon/daemon-conf.c:368
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Frequenza di campionamento '%s' non valida."
 
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:391
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Canali di campionamento \"%s\" non validi."
 
-#: ../src/daemon/daemon-conf.c:405
+#: ../src/daemon/daemon-conf.c:408
 #, c-format
 msgid "[%s:%u] Invalid channel map '%s'."
 msgstr "[%s:%u] Mappa del canale \"%s\" non valida."
 
-#: ../src/daemon/daemon-conf.c:422
+#: ../src/daemon/daemon-conf.c:425
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Numero di frammenti \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:439
+#: ../src/daemon/daemon-conf.c:442
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Dimensione dei frammenti \"%s\" non valida."
 
-#: ../src/daemon/daemon-conf.c:456
+#: ../src/daemon/daemon-conf.c:459
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Livello di nice \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:499
+#: ../src/daemon/daemon-conf.c:502
 #, c-format
 msgid "[%s:%u] Invalid server type '%s'."
 msgstr "[%s:%u] Tipo di server \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:613
+#: ../src/daemon/daemon-conf.c:620
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Apertura del file di configurazione non riuscita: %s"
 
-#: ../src/daemon/daemon-conf.c:629
+#: ../src/daemon/daemon-conf.c:636
 msgid ""
 "The specified default channel map has a different number of channels than "
 "the specified default number of channels."
@@ -342,7 +345,7 @@ msgstr ""
 "La mappa del canale predefinita specificata presenta un numero diverso di "
 "canali rispetto a quello predefinito specificato."
 
-#: ../src/daemon/daemon-conf.c:716
+#: ../src/daemon/daemon-conf.c:723
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Lettura dal file di configurazione: %s ###\n"
@@ -539,7 +542,7 @@ msgstr "pipe() non riuscita: %s"
 msgid "fork() failed: %s"
 msgstr "fork() non riuscita: %s"
 
-#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:568
+#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:562
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() non riuscita: %s"
@@ -559,35 +562,31 @@ msgstr "Recupero dell'ID della macchina non riuscito"
 
 #: ../src/daemon/main.c:974
 msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
+"OK, so you are running PA in system mode. Please make sure that you actually "
+"do want to do that.\n"
 "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
 "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
 "mode is usually a bad idea."
 msgstr ""
-"PulseAudio è in esecuzione in modalità sistema. È sconsigliato eseguire "
-"PulseAudio in questa modalità.\n"
-"Continuando a usarlo in questo modo molte cose potrebbero non funzionare "
-"come atteso.\n"
+"PulseAudio è in esecuzione in modalità sistema. Assicurarsi che sia "
+"esattamente ciò che si desidera fare.\n"
 "Consultare http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/"
 "User/WhatIsWrongWithSystemWide/ per maggiori informazioni sul perché la "
 "modalità sistema è una pessima idea."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:990
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() non riuscita."
 
-#: ../src/daemon/main.c:1021
+#: ../src/daemon/main.c:1022
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() non riuscita."
 
-#: ../src/daemon/main.c:1089
+#: ../src/daemon/main.c:1092
 msgid "Failed to initialize daemon."
 msgstr "Inizializzazione del demone non riuscita."
 
-#: ../src/daemon/main.c:1094
+#: ../src/daemon/main.c:1097
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Avvio del demone senza alcun modulo caricato, rifiuta di lavorare."
 
@@ -620,8 +619,8 @@ msgid "Line In"
 msgstr "Line-In"
 
 #: ../src/modules/alsa/alsa-mixer.c:2383 ../src/modules/alsa/alsa-mixer.c:2461
-#: ../src/modules/bluetooth/module-bluez4-device.c:2099
-#: ../src/modules/bluetooth/module-bluez5-device.c:1710
+#: ../src/modules/bluetooth/module-bluez4-device.c:2104
+#: ../src/modules/bluetooth/module-bluez5-device.c:1750
 msgid "Microphone"
 msgstr "Microfono"
 
@@ -682,8 +681,8 @@ msgid "No Bass Boost"
 msgstr "Nessun incremento bassi"
 
 #: ../src/modules/alsa/alsa-mixer.c:2398
-#: ../src/modules/bluetooth/module-bluez4-device.c:2104
-#: ../src/modules/bluetooth/module-bluez5-device.c:1717
+#: ../src/modules/bluetooth/module-bluez4-device.c:2109
+#: ../src/modules/bluetooth/module-bluez5-device.c:1757
 msgid "Speaker"
 msgstr "Altoparlante"
 
@@ -837,40 +836,48 @@ msgstr "Stereo digitale (HDMI)"
 msgid "Digital Surround 5.1 (HDMI)"
 msgstr "Surround digitale 5.1 (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4151
+#: ../src/modules/alsa/alsa-mixer.c:4019 ../src/pulse/channelmap.c:775
+msgid "Stereo"
+msgstr "Stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:4152
 msgid "Analog Mono Duplex"
 msgstr "Duplex mono analogico"
 
-#: ../src/modules/alsa/alsa-mixer.c:4152
+#: ../src/modules/alsa/alsa-mixer.c:4153
 msgid "Analog Stereo Duplex"
 msgstr "Duplex stereo analogico"
 
-#: ../src/modules/alsa/alsa-mixer.c:4153
+#: ../src/modules/alsa/alsa-mixer.c:4154
 msgid "Digital Stereo Duplex (IEC958)"
 msgstr "Duplex stereo digitale (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4154
+#: ../src/modules/alsa/alsa-mixer.c:4155
 msgid "Multichannel Duplex"
 msgstr "Duplex multi canale"
 
-#: ../src/modules/alsa/alsa-mixer.c:4155
+#: ../src/modules/alsa/alsa-mixer.c:4156
+msgid "Stereo Duplex"
+msgstr "Duplex stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:4157
 #: ../src/modules/alsa/module-alsa-card.c:186
-#: ../src/modules/bluetooth/module-bluez4-device.c:2295
-#: ../src/modules/bluetooth/module-bluez5-device.c:1941
+#: ../src/modules/bluetooth/module-bluez4-device.c:2324
+#: ../src/modules/bluetooth/module-bluez5-device.c:2005
 msgid "Off"
 msgstr "Spento"
 
-#: ../src/modules/alsa/alsa-mixer.c:4254
+#: ../src/modules/alsa/alsa-mixer.c:4256
 #, c-format
 msgid "%s Output"
 msgstr "Uscita «%s»"
 
-#: ../src/modules/alsa/alsa-mixer.c:4262
+#: ../src/modules/alsa/alsa-mixer.c:4264
 #, c-format
 msgid "%s Input"
 msgstr "Ingresso «%s»"
 
-#: ../src/modules/alsa/alsa-sink.c:570
+#: ../src/modules/alsa/alsa-sink.c:572
 #, c-format
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
@@ -887,7 +894,7 @@ msgstr ""
 "Attivazione avvenuta con POLLOUT impostato -- tuttavia, una successiva "
 "snd_pcm_avail() ha ritornato 0 o un altro valore < min_avail."
 
-#: ../src/modules/alsa/alsa-sink.c:747
+#: ../src/modules/alsa/alsa-sink.c:756
 #, c-format
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
@@ -938,7 +945,7 @@ msgstr ""
 "Attivazione avvenuta con POLLIN impostato -- tuttavia, una successiva "
 "snd_pcm_avail() ha ritornato 0 o un altro valore < min_avail."
 
-#: ../src/modules/alsa/alsa-util.c:1166 ../src/modules/alsa/alsa-util.c:1241
+#: ../src/modules/alsa/alsa-util.c:1168 ../src/modules/alsa/alsa-util.c:1243
 #, c-format
 msgid ""
 "snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -950,7 +957,7 @@ msgstr ""
 "Molto probabilmente si tratta di un bug nel driver ALSA \"%s\". Segnalare "
 "questo problema agli sviluppatori ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1216
+#: ../src/modules/alsa/alsa-util.c:1218
 #, c-format
 msgid ""
 "snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s"
@@ -962,7 +969,7 @@ msgstr ""
 "Molto probabilmente si tratta di un bug nel driver ALSA \"%s\". Segnalare "
 "questo problema agli sviluppatori ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1257
+#: ../src/modules/alsa/alsa-util.c:1259
 #, c-format
 msgid ""
 "snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
@@ -975,7 +982,7 @@ msgstr ""
 "Molto probabilmente si tratta di un bug nel driver ALSA \"%s\". Segnalare "
 "questo problema agli sviluppatori ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1300
+#: ../src/modules/alsa/alsa-util.c:1302
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -988,85 +995,85 @@ msgstr ""
 "Molto probabilmente si tratta di un bug nel driver ALSA \"%s\". Segnalare "
 "questo problema agli sviluppatori ALSA."
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2089
-#: ../src/modules/bluetooth/module-bluez5-device.c:1700
+#: ../src/modules/bluetooth/module-bluez4-device.c:2094
+#: ../src/modules/bluetooth/module-bluez5-device.c:1740
 msgid "Headset"
 msgstr "Cuffie con microfono"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2094
-#: ../src/modules/bluetooth/module-bluez5-device.c:1705
+#: ../src/modules/bluetooth/module-bluez4-device.c:2099
+#: ../src/modules/bluetooth/module-bluez5-device.c:1745
 msgid "Handsfree"
 msgstr "Sistema mani-libere"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2109
-#: ../src/modules/bluetooth/module-bluez5-device.c:1723
+#: ../src/modules/bluetooth/module-bluez4-device.c:2114
+#: ../src/modules/bluetooth/module-bluez5-device.c:1763
 msgid "Headphone"
 msgstr "Cuffie"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2114
-#: ../src/modules/bluetooth/module-bluez5-device.c:1728
+#: ../src/modules/bluetooth/module-bluez4-device.c:2119
+#: ../src/modules/bluetooth/module-bluez5-device.c:1768
 msgid "Portable"
 msgstr "Portabile"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2119
-#: ../src/modules/bluetooth/module-bluez5-device.c:1733
+#: ../src/modules/bluetooth/module-bluez4-device.c:2124
+#: ../src/modules/bluetooth/module-bluez5-device.c:1773
 msgid "Car"
 msgstr "Automobile"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2124
-#: ../src/modules/bluetooth/module-bluez5-device.c:1738
+#: ../src/modules/bluetooth/module-bluez4-device.c:2129
+#: ../src/modules/bluetooth/module-bluez5-device.c:1778
 msgid "HiFi"
 msgstr "HiFi"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2129
-#: ../src/modules/bluetooth/module-bluez5-device.c:1743
+#: ../src/modules/bluetooth/module-bluez4-device.c:2134
+#: ../src/modules/bluetooth/module-bluez5-device.c:1783
 msgid "Phone"
 msgstr "Telefono"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2137
-#: ../src/modules/bluetooth/module-bluez5-device.c:1695
-#: ../src/modules/bluetooth/module-bluez5-device.c:1711
-#: ../src/modules/bluetooth/module-bluez5-device.c:1749
+#: ../src/modules/bluetooth/module-bluez4-device.c:2142
+#: ../src/modules/bluetooth/module-bluez5-device.c:1735
+#: ../src/modules/bluetooth/module-bluez5-device.c:1751
+#: ../src/modules/bluetooth/module-bluez5-device.c:1789
 msgid "Bluetooth Output"
 msgstr "Uscita Bluetooth"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2140
-#: ../src/modules/bluetooth/module-bluez5-device.c:1694
-#: ../src/modules/bluetooth/module-bluez5-device.c:1716
-#: ../src/modules/bluetooth/module-bluez5-device.c:1722
-#: ../src/modules/bluetooth/module-bluez5-device.c:1748
+#: ../src/modules/bluetooth/module-bluez4-device.c:2145
+#: ../src/modules/bluetooth/module-bluez5-device.c:1734
+#: ../src/modules/bluetooth/module-bluez5-device.c:1756
+#: ../src/modules/bluetooth/module-bluez5-device.c:1762
+#: ../src/modules/bluetooth/module-bluez5-device.c:1788
 msgid "Bluetooth Input"
 msgstr "Ingresso Bluetooth"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2176
+#: ../src/modules/bluetooth/module-bluez4-device.c:2186
 msgid "High Fidelity Playback (A2DP)"
 msgstr "Riproduzione ad alta fedeltà (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2187
+#: ../src/modules/bluetooth/module-bluez4-device.c:2198
 msgid "High Fidelity Capture (A2DP)"
 msgstr "Cattura ad alta fedeltà (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2198
+#: ../src/modules/bluetooth/module-bluez4-device.c:2210
 msgid "Telephony Duplex (HSP/HFP)"
 msgstr "Doppino telefonico (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2210
+#: ../src/modules/bluetooth/module-bluez4-device.c:2223
 msgid "Handsfree Gateway"
 msgstr "Gateway handsfree"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1786
+#: ../src/modules/bluetooth/module-bluez5-device.c:1830
 msgid "High Fidelity Playback (A2DP Sink)"
 msgstr "Riproduzione ad alta fedeltà (sink A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1797
+#: ../src/modules/bluetooth/module-bluez5-device.c:1842
 msgid "High Fidelity Capture (A2DP Source)"
 msgstr "Registrazione ad alta fedeltà (sorgente A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1808
+#: ../src/modules/bluetooth/module-bluez5-device.c:1854
 msgid "Headset Head Unit (HSP/HFP)"
 msgstr "Unità headset head (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1820
+#: ../src/modules/bluetooth/module-bluez5-device.c:1867
 msgid "Headset Audio Gateway (HSP/HFP)"
 msgstr "Gateway headset audio (HSP/HFP)"
 
@@ -1099,14 +1106,15 @@ msgstr ""
 msgid "On"
 msgstr "On"
 
-#: ../src/modules/module-always-sink.c:36
-msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "Mantiene sempre almeno un sink caricato anche se è nullo"
-
+#: ../src/modules/module-allow-passthrough.c:73
 #: ../src/modules/module-always-sink.c:82
 msgid "Dummy Output"
 msgstr "Uscita dummy"
 
+#: ../src/modules/module-always-sink.c:36
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr "Mantiene sempre almeno un sink caricato anche se è nullo"
+
 #: ../src/modules/module-equalizer-sink.c:70
 msgid "General Purpose Equalizer"
 msgstr "Equalizzatore generale"
@@ -1121,10 +1129,10 @@ msgstr ""
 "sink_name=<nome del sink> sink_properties=<proprietà del sink> "
 "sink_master=<sink a cui connettersi> format=<formato campionamento> "
 "rate=<frequenza campionamento> channels=<numero di canali> "
-"channel_map=<mappa canali> autoloaded=<indica se il modulo viene caricato "
+"channel_map=<mappa canali> autoloaded=<imposta se il modulo viene caricato "
 "automaticamente> use_volume_sharing=<yes o no> "
 
-#: ../src/modules/module-filter-apply.c:46
+#: ../src/modules/module-filter-apply.c:48
 msgid "autoclean=<automatically unload unused filters?>"
 msgstr "autoclean=<rimuovere automaticamente i filtri non usati?>"
 
@@ -1135,26 +1143,29 @@ msgstr "Sink LADSPA virtuale"
 #: ../src/modules/module-ladspa-sink.c:55
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma separated list of "
-"input control values> input_ladspaport_map=<comma separated list of input "
-"LADSPA port names> output_ladspaport_map=<comma separated list of output "
-"LADSPA port names> "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<input channel map> plugin=<ladspa plugin name> label=<ladspa "
+"plugin label> control=<comma separated list of input control values> "
+"input_ladspaport_map=<comma separated list of input LADSPA port names> "
+"output_ladspaport_map=<comma separated list of output LADSPA port names> "
+"autoloaded=<set if this module is being loaded automatically> "
 msgstr ""
 "sink_name=<nome del sink> sink_properties=<proprietà del sink> master=<nome "
-"del sink da filtrare> format=<formato campionamento> rate=<frequenza "
-"campionamento> channels=<numero di canali> channel_map=<mappa canali "
-"ingresso> plugin=<nome plugin ladspa> label=<etichetta plugin ladspa> "
-"control=<valori di controllo separati da virgole> input_ladspaport_map=<nomi "
-"di porte d'ingresso LADSPA separati da virgole> output_ladspaport_map=<nomi "
-"di porte d'uscita LADSPA separati da virgole> "
+"del sink da filtrare> sink_master=<nome del sink da filtrare> "
+"format=<formato campionamento> rate=<frequenza campionamento> "
+"channels=<numero di canali> channel_map=<mappa canali ingresso> plugin=<nome "
+"plugin ladspa> label=<etichetta plugin ladspa> control=<valori di controllo "
+"separati da virgole> input_ladspaport_map=<nomi di porte d'ingresso LADSPA "
+"separati da virgole> output_ladspaport_map=<nomi di porte d'uscita LADSPA "
+"separati da virgole> autoloaded=<imposta se il modulo viene caricato "
+"automaticamente> "
 
 #: ../src/modules/module-null-sink.c:47
 msgid "Clocked NULL sink"
 msgstr "Sink NULL temporizzato"
 
-#: ../src/modules/module-null-sink.c:280
+#: ../src/modules/module-null-sink.c:284
 msgid "Null Output"
 msgstr "Uscita nulla"
 
@@ -1182,8 +1193,8 @@ msgstr "Audio su @HOSTNAME@"
 msgid "Tunnel for %s@%s"
 msgstr "Tunnel per %s@%s"
 
-#: ../src/modules/module-tunnel-sink-new.c:517
-#: ../src/modules/module-tunnel-source-new.c:516
+#: ../src/modules/module-tunnel-sink-new.c:521
+#: ../src/modules/module-tunnel-source-new.c:520
 #, c-format
 msgid "Tunnel to %s/%s"
 msgstr "Tunnel verso %s/%s"
@@ -1195,16 +1206,19 @@ msgstr "Sink surround virtuale"
 #: ../src/modules/module-virtual-surround-sink.c:51
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> "
-"use_volume_sharing=<yes or no> force_flat_volume=<yes or no> hrir=/path/to/"
-"left_hrir.wav "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<channel map> use_volume_sharing=<yes or no> "
+"force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav autoloaded=<set if "
+"this module is being loaded automatically> "
 msgstr ""
 "sink_name=<nome del sink> sink_properties=<proprietà del sink> master=<nome "
-"del sink da filtrare> format=<formato campionamento> rate=<frequenza "
-"campionamento> channels=<numero di canali> channel_map=<mappa dei canali> "
+"del sink da filtrare> sink_master=<nome del sink da filtrare> "
+"format=<formato campionamento> rate=<frequenza campionamento> "
+"channels=<numero di canali> channel_map=<mappa dei canali> "
 "use_volume_sharing=<yes o no> force_flat_volume=<yes o no> hrir=/percorso/al/"
-"file/left_hrir.wav "
+"file/left_hrir.wav autoloaded=<imposta se il modulo viene caricato "
+"automaticamente> "
 
 #: ../src/modules/reserve-wrap.c:149
 msgid "PulseAudio Sound Server"
@@ -1416,18 +1430,14 @@ msgstr "Superiore posteriore sinistro"
 msgid "Top Rear Right"
 msgstr "Superiore posteriore destro"
 
-#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:127
-#: ../src/pulse/sample.c:175 ../src/pulse/volume.c:294
-#: ../src/pulse/volume.c:320 ../src/pulse/volume.c:340
-#: ../src/pulse/volume.c:372 ../src/pulse/volume.c:412
-#: ../src/pulse/volume.c:431
+#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:121
+#: ../src/pulse/sample.c:177 ../src/pulse/volume.c:306
+#: ../src/pulse/volume.c:332 ../src/pulse/volume.c:352
+#: ../src/pulse/volume.c:384 ../src/pulse/volume.c:424
+#: ../src/pulse/volume.c:443
 msgid "(invalid)"
 msgstr "(non valido)"
 
-#: ../src/pulse/channelmap.c:775
-msgid "Stereo"
-msgstr "Stereo"
-
 #: ../src/pulse/channelmap.c:780
 msgid "Surround 4.0"
 msgstr "Surround 4.0"
@@ -1460,17 +1470,17 @@ msgstr "xcb_connection_has_error() ha restituito VERO"
 msgid "Failed to parse cookie data"
 msgstr "Analisi dei dati cookie non riuscita"
 
-#: ../src/pulse/context.c:666
+#: ../src/pulse/context.c:702
 #, c-format
 msgid "fork(): %s"
 msgstr "fork(): %s"
 
-#: ../src/pulse/context.c:721
+#: ../src/pulse/context.c:757
 #, c-format
 msgid "waitpid(): %s"
 msgstr "waitpid(): %s"
 
-#: ../src/pulse/context.c:1427
+#: ../src/pulse/context.c:1463
 #, c-format
 msgid "Received message for unknown extension '%s'"
 msgstr "Ricevuto messaggio per l'estensione sconosciuta \"%s\""
@@ -1491,7 +1501,7 @@ msgstr "bidirezionale"
 msgid "invalid"
 msgstr "non valido"
 
-#: ../src/pulsecore/core-util.c:1836
+#: ../src/pulsecore/core-util.c:1856
 #, c-format
 msgid ""
 "XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
@@ -1531,11 +1541,11 @@ msgstr ""
 msgid "Invalid log target."
 msgstr "Destinazione di registrazione non valida."
 
-#: ../src/pulsecore/sink.c:3460
+#: ../src/pulsecore/sink.c:3469
 msgid "Built-in Audio"
 msgstr "Audio interno"
 
-#: ../src/pulsecore/sink.c:3465
+#: ../src/pulsecore/sink.c:3474
 msgid "Modem"
 msgstr "Modem"
 
@@ -1647,211 +1657,211 @@ msgstr "Errore di input/output"
 msgid "Device or resource busy"
 msgstr "Dispositivo o risorsa occupata"
 
-#: ../src/pulse/sample.c:177
+#: ../src/pulse/sample.c:179
 #, c-format
 msgid "%s %uch %uHz"
 msgstr "%s ch %u %u Hz"
 
-#: ../src/pulse/sample.c:189
+#: ../src/pulse/sample.c:191
 #, c-format
 msgid "%0.1f GiB"
 msgstr "%0.1f GiB"
 
-#: ../src/pulse/sample.c:191
+#: ../src/pulse/sample.c:193
 #, c-format
 msgid "%0.1f MiB"
 msgstr "%0.1f MiB"
 
-#: ../src/pulse/sample.c:193
+#: ../src/pulse/sample.c:195
 #, c-format
 msgid "%0.1f KiB"
 msgstr "%0.1f KiB"
 
-#: ../src/pulse/sample.c:195
+#: ../src/pulse/sample.c:197
 #, c-format
 msgid "%u B"
 msgstr "%u B"
 
-#: ../src/utils/pacat.c:117
+#: ../src/utils/pacat.c:134
 #, c-format
 msgid "Failed to drain stream: %s"
 msgstr "Svuotamento dello stream non riuscito: %s"
 
-#: ../src/utils/pacat.c:122
+#: ../src/utils/pacat.c:139
 msgid "Playback stream drained."
 msgstr "Stream di riproduzione svuotato."
 
-#: ../src/utils/pacat.c:133
+#: ../src/utils/pacat.c:150
 msgid "Draining connection to server."
 msgstr "Svuotamento della connessione sul server."
 
-#: ../src/utils/pacat.c:146
+#: ../src/utils/pacat.c:163
 #, c-format
 msgid "pa_stream_drain(): %s"
 msgstr "pa_stream_drain(): %s"
 
-#: ../src/utils/pacat.c:169
-#, c-format
-msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write() non riuscita: %s"
-
-#: ../src/utils/pacat.c:210
+#: ../src/utils/pacat.c:194 ../src/utils/pacat.c:543
 #, c-format
 msgid "pa_stream_begin_write() failed: %s"
 msgstr "pa_stream_begin_write() non riuscita: %s"
 
-#: ../src/utils/pacat.c:260 ../src/utils/pacat.c:290
+#: ../src/utils/pacat.c:244 ../src/utils/pacat.c:274
 #, c-format
 msgid "pa_stream_peek() failed: %s"
 msgstr "pa_stream_peek() non riuscita: %s"
 
-#: ../src/utils/pacat.c:340
+#: ../src/utils/pacat.c:324
 msgid "Stream successfully created."
 msgstr "Creazione dello stream riuscita."
 
-#: ../src/utils/pacat.c:343
+#: ../src/utils/pacat.c:327
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s"
 msgstr "pa_stream_get_buffer_attr() non riuscita: %s"
 
 # maxlength, fragsize e gli altri non so se vanno tradotti...
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:331
 #, c-format
 msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 msgstr "Metriche del buffer: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 
 # maxlength e fragsize non so se vanno tradotti...
-#: ../src/utils/pacat.c:350
+#: ../src/utils/pacat.c:334
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u"
 msgstr "Metriche del buffer: maxlength=%u, fragsize=%u"
 
-#: ../src/utils/pacat.c:354
+#: ../src/utils/pacat.c:338
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'."
 msgstr "In uso specifica di campionamento \"%s\", mappa dei canali \"%s\"."
 
-#: ../src/utils/pacat.c:358
+#: ../src/utils/pacat.c:342
 #, c-format
 msgid "Connected to device %s (index: %u, suspended: %s)."
 msgstr "Collegato al dispositivo %s (indice: %u, sospeso: %s)."
 
-#: ../src/utils/pacat.c:368
+#: ../src/utils/pacat.c:352
 #, c-format
 msgid "Stream error: %s"
 msgstr "Errore di stream: %s"
 
-#: ../src/utils/pacat.c:378
+#: ../src/utils/pacat.c:362
 #, c-format
 msgid "Stream device suspended.%s"
 msgstr "Device stream sospeso.%s "
 
-#: ../src/utils/pacat.c:380
+#: ../src/utils/pacat.c:364
 #, c-format
 msgid "Stream device resumed.%s"
 msgstr "Device stream ripristinato.%s "
 
-#: ../src/utils/pacat.c:388
+#: ../src/utils/pacat.c:372
 #, c-format
 msgid "Stream underrun.%s"
 msgstr "Underrun dello stream.%s"
 
-#: ../src/utils/pacat.c:395
+#: ../src/utils/pacat.c:379
 #, c-format
 msgid "Stream overrun.%s"
 msgstr "Overrun dello stream.%s"
 
-#: ../src/utils/pacat.c:402
+#: ../src/utils/pacat.c:386
 #, c-format
 msgid "Stream started.%s"
 msgstr "Stream avviato.%s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 #, c-format
 msgid "Stream moved to device %s (%u, %ssuspended).%s"
 msgstr "Stream spostato sul device %s (%u, %ssospeso).%s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 msgid "not "
 msgstr "non "
 
-#: ../src/utils/pacat.c:416
+#: ../src/utils/pacat.c:400
 #, c-format
 msgid "Stream buffer attributes changed.%s"
 msgstr "Attributi del buffer di stream cambiati.%s"
 
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:415
 msgid "Cork request stack is empty: corking stream"
 msgstr "Lo stack delle richieste di blocco è vuoto: viene bloccato il flusso"
 
-#: ../src/utils/pacat.c:437
+#: ../src/utils/pacat.c:421
 msgid "Cork request stack is empty: uncorking stream"
 msgstr "Lo stack delle richieste di blocco è vuoto: viene sbloccato il flusso"
 
-#: ../src/utils/pacat.c:441
+#: ../src/utils/pacat.c:425
 msgid "Warning: Received more uncork requests than cork requests."
 msgstr "Attenzione: ricevute più richieste di sblocco che di blocco."
 
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:450
 #, c-format
 msgid "Connection established.%s"
 msgstr "Connessione stabilita.%s"
 
-#: ../src/utils/pacat.c:469
+#: ../src/utils/pacat.c:453
 #, c-format
 msgid "pa_stream_new() failed: %s"
 msgstr "pa_stream_new() non riuscita: %s"
 
-#: ../src/utils/pacat.c:507
+#: ../src/utils/pacat.c:491
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s"
 msgstr "pa_stream_connect_playback() non riuscita: %s"
 
-#: ../src/utils/pacat.c:513
+#: ../src/utils/pacat.c:497
 #, c-format
 msgid "Failed to set monitor stream: %s"
 msgstr "Impostazione dello stream di monitor non riuscita: %s"
 
-#: ../src/utils/pacat.c:517
+#: ../src/utils/pacat.c:501
 #, c-format
 msgid "pa_stream_connect_record() failed: %s"
 msgstr "pa_stream_connect_record() non riuscita: %s"
 
-#: ../src/utils/pacat.c:530 ../src/utils/pactl.c:1446
+#: ../src/utils/pacat.c:514 ../src/utils/pactl.c:1446
 #, c-format
 msgid "Connection failure: %s"
 msgstr "Connessione non riuscita: %s"
 
-#: ../src/utils/pacat.c:563
+#: ../src/utils/pacat.c:557
 msgid "Got EOF."
 msgstr "Ricevuto EOF."
 
-#: ../src/utils/pacat.c:600
+#: ../src/utils/pacat.c:581
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "pa_stream_write() non riuscita: %s"
+
+#: ../src/utils/pacat.c:605
 #, c-format
 msgid "write() failed: %s"
 msgstr "write() non riuscita: %s"
 
-#: ../src/utils/pacat.c:621
+#: ../src/utils/pacat.c:626
 msgid "Got signal, exiting."
 msgstr "Ricevuto il segnale, uscita."
 
-#: ../src/utils/pacat.c:635
+#: ../src/utils/pacat.c:640
 #, c-format
 msgid "Failed to get latency: %s"
 msgstr "Recupero della latenza non riuscito: %s"
 
 # dubbio: tempo o durata??
-#: ../src/utils/pacat.c:640
+#: ../src/utils/pacat.c:645
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec."
 msgstr "Tempo: %0.3f sec; Latenza: %0.0f microsec."
 
-#: ../src/utils/pacat.c:661
+#: ../src/utils/pacat.c:666
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s"
 msgstr "pa_stream_update_timing_info() non riuscita: %s"
 
-#: ../src/utils/pacat.c:671
+#: ../src/utils/pacat.c:676
 #, c-format
 msgid ""
 "%s [options]\n"
@@ -1993,16 +2003,16 @@ msgstr ""
 "      --list-file-formats               Elenca i formati disponibili\n"
 "      --monitor-stream=INDICE           Registra dall'input sink con INDICE\n"
 
-#: ../src/utils/pacat.c:788
+#: ../src/utils/pacat.c:793
 msgid "Play back encoded audio files on a PulseAudio sound server."
 msgstr "Riproduce file audio codificati su un server audio PulseAudio."
 
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:797
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to a file."
 msgstr "Cattura dati audio da un server audio PulseAudio e lo scrive su file."
 
-#: ../src/utils/pacat.c:796
+#: ../src/utils/pacat.c:801
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to STDOUT or "
 "the specified file."
@@ -2010,7 +2020,7 @@ msgstr ""
 "Cattura dati audio da un server audio PulseAudio e lo scrive sullo STDOUT o "
 "sul file specificato."
 
-#: ../src/utils/pacat.c:800
+#: ../src/utils/pacat.c:805
 msgid ""
 "Play back audio data from STDIN or the specified file on a PulseAudio sound "
 "server."
@@ -2018,7 +2028,7 @@ msgstr ""
 "Riproduce dati audio dallo STDIN o dal file specificato su un server audio "
 "PulseAudio."
 
-#: ../src/utils/pacat.c:814
+#: ../src/utils/pacat.c:819
 #, c-format
 msgid ""
 "pacat %s\n"
@@ -2029,73 +2039,73 @@ msgstr ""
 "Compilato con libpulse %s\n"
 "Link eseguito con libpulse %s\n"
 
-#: ../src/utils/pacat.c:847 ../src/utils/pactl.c:1648
+#: ../src/utils/pacat.c:852 ../src/utils/pactl.c:1648
 #, c-format
 msgid "Invalid client name '%s'"
 msgstr "Nome del client \"%s\" non valido"
 
-#: ../src/utils/pacat.c:862
+#: ../src/utils/pacat.c:867
 #, c-format
 msgid "Invalid stream name '%s'"
 msgstr "Nome dello stream \"%s\" non valido"
 
-#: ../src/utils/pacat.c:899
+#: ../src/utils/pacat.c:904
 #, c-format
 msgid "Invalid channel map '%s'"
 msgstr "Mappa dei canali \"%s\" non valida"
 
-#: ../src/utils/pacat.c:928 ../src/utils/pacat.c:942
+#: ../src/utils/pacat.c:933 ../src/utils/pacat.c:947
 #, c-format
 msgid "Invalid latency specification '%s'"
 msgstr "Specifica di latenza \"%s\" non valida"
 
 # esecuzione???
-#: ../src/utils/pacat.c:935 ../src/utils/pacat.c:949
+#: ../src/utils/pacat.c:940 ../src/utils/pacat.c:954
 #, c-format
 msgid "Invalid process time specification '%s'"
 msgstr "Specifica di tempo di elaborazione \"%s\" non valida"
 
-#: ../src/utils/pacat.c:961
+#: ../src/utils/pacat.c:966
 #, c-format
 msgid "Invalid property '%s'"
 msgstr "Proprietà \"%s\" non valida"
 
-#: ../src/utils/pacat.c:980
+#: ../src/utils/pacat.c:985
 #, c-format
 msgid "Unknown file format %s."
 msgstr "Formato file %s sconosciuto."
 
-#: ../src/utils/pacat.c:995
+#: ../src/utils/pacat.c:1000
 msgid "Failed to parse the argument for --monitor-stream"
 msgstr "Analisi dell'argomento per --monitor-stream non riuscita"
 
-#: ../src/utils/pacat.c:1006
+#: ../src/utils/pacat.c:1011
 msgid "Invalid sample specification"
 msgstr "Specifica di campionamento non valida"
 
-#: ../src/utils/pacat.c:1016
+#: ../src/utils/pacat.c:1021
 #, c-format
 msgid "open(): %s"
 msgstr "open(): %s"
 
-#: ../src/utils/pacat.c:1021
+#: ../src/utils/pacat.c:1026
 #, c-format
 msgid "dup2(): %s"
 msgstr "dup2(): %s"
 
-#: ../src/utils/pacat.c:1028
+#: ../src/utils/pacat.c:1033
 msgid "Too many arguments."
 msgstr "Troppi argomenti."
 
-#: ../src/utils/pacat.c:1039
+#: ../src/utils/pacat.c:1044
 msgid "Failed to generate sample specification for file."
 msgstr "Generazione della specifica di campionamento per il file non riuscita."
 
-#: ../src/utils/pacat.c:1065
+#: ../src/utils/pacat.c:1070
 msgid "Failed to open audio file."
 msgstr "Apertura del file audio non riuscita."
 
-#: ../src/utils/pacat.c:1071
+#: ../src/utils/pacat.c:1076
 msgid ""
 "Warning: specified sample specification will be overwritten with "
 "specification from file."
@@ -2103,24 +2113,24 @@ msgstr ""
 "Attenzione: la specifica di campionamento indicata verrà soprascritta con "
 "quella dal file."
 
-#: ../src/utils/pacat.c:1074 ../src/utils/pactl.c:1712
+#: ../src/utils/pacat.c:1079 ../src/utils/pactl.c:1712
 msgid "Failed to determine sample specification from file."
 msgstr "Determinazione della specifica di campionamento dal file non riuscita."
 
-#: ../src/utils/pacat.c:1083
+#: ../src/utils/pacat.c:1088
 msgid "Warning: Failed to determine channel map from file."
 msgstr ""
 "Attenzione: determinazione della mappa dei canali dal file non riuscita."
 
-#: ../src/utils/pacat.c:1094
+#: ../src/utils/pacat.c:1099
 msgid "Channel map doesn't match sample specification"
 msgstr "La mappa dei canali non corrisponde alla specifica di campionamento"
 
-#: ../src/utils/pacat.c:1105
+#: ../src/utils/pacat.c:1110
 msgid "Warning: failed to write channel map to file."
 msgstr "Attenzione: scrittura della mappa dei canali su file non riuscita."
 
-#: ../src/utils/pacat.c:1120
+#: ../src/utils/pacat.c:1125
 #, c-format
 msgid ""
 "Opening a %s stream with sample specification '%s' and channel map '%s'."
@@ -2128,40 +2138,40 @@ msgstr ""
 "Apertura di uno stream %s con specifica di campionamento \"%s\" e mappa dei "
 "canali \"%s\"."
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "recording"
 msgstr "registrazione"
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "playback"
 msgstr "riproduzione"
 
-#: ../src/utils/pacat.c:1145
+#: ../src/utils/pacat.c:1150
 msgid "Failed to set media name."
 msgstr "Impostazione nome del supporto non riuscita."
 
-#: ../src/utils/pacat.c:1152 ../src/utils/pactl.c:2062
+#: ../src/utils/pacat.c:1160 ../src/utils/pactl.c:2062
 msgid "pa_mainloop_new() failed."
 msgstr "pa_mainloop_new() non riuscita."
 
-#: ../src/utils/pacat.c:1175
+#: ../src/utils/pacat.c:1183
 msgid "io_new() failed."
 msgstr "io_new() non riuscita."
 
-#: ../src/utils/pacat.c:1182 ../src/utils/pactl.c:2074
+#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2074
 msgid "pa_context_new() failed."
 msgstr "pa_context_new() non riuscita."
 
-#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2080
+#: ../src/utils/pacat.c:1198 ../src/utils/pactl.c:2080
 #, c-format
 msgid "pa_context_connect() failed: %s"
 msgstr "pa_context_connect() non riuscita: %s"
 
-#: ../src/utils/pacat.c:1196
+#: ../src/utils/pacat.c:1204
 msgid "pa_context_rttime_new() failed."
 msgstr "pa_context_rttime_new() non riuscita."
 
-#: ../src/utils/pacat.c:1203 ../src/utils/pactl.c:2085
+#: ../src/utils/pacat.c:1211 ../src/utils/pactl.c:2085
 msgid "pa_mainloop_run() failed."
 msgstr "pa_mainloop_run() non riuscita."
 
diff --git a/po/ko.po b/po/ko.po
index 7e2e5c8..b3765d6 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -1,4 +1,5 @@
 # eukim <eukim at redhat.com>, 2013. #zanata
+# KimJeongYeon <jeongyeon.kim at samsung.com>, 2017.
 msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
@@ -7,20 +8,18 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2013-10-20 10:38-0400\n"
-"Last-Translator: eukim <eukim at redhat.com>\n"
+"PO-Revision-Date: 2017-04-23 02:11+0900\n"
+"Last-Translator: KimJeongYeon <jeongyeon.kim at samsung.com>\n"
 "Language-Team: Korean\n"
 "Language: ko\n"
-"X-Generator: Zanata 3.1.2\n"
-"Plural-Forms: nplurals=1; plural=0\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
 
 #: ../src/modules/alsa/alsa-util.c:1128 ../src/modules/alsa/alsa-util.c:1203
 #, c-format
 msgid ""
-"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
-"ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
 msgstr ""
 "snd_pcm_avail()이 %lu 바이트 (%lu ms)의 매우 큰 값을 반환했습니다.\n"
 "ALSA 드라이버 '%s'의 오류일 수 있습니다. ALSA 개발자에게 이 문제를 보고해주시기 바랍니다."
@@ -28,10 +27,8 @@ msgstr ""
 #: ../src/modules/alsa/alsa-util.c:1178
 #, c-format
 msgid ""
-"snd_pcm_delay() returned a value that is exceptionally large: %li bytes "
-"(%s%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
 msgstr ""
 "snd_pcm_delay()가 %li 바이트 (%s%lu ms)의 매우 큰 값을 반환했습니다.\n"
 "ALSA 드라이버 '%s'의 오류일 수 있습니다. ALSA 개발자에게 이 문제를 보고해주시기 바랍니다."
@@ -39,10 +36,8 @@ msgstr ""
 #: ../src/modules/alsa/alsa-util.c:1219
 #, c-format
 msgid ""
-"snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
-"%lu.\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_avail_delay() returned strange values: delay %lu is less than avail %lu.\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
 msgstr ""
 "snd_pcm_avail_delay()가 이상한 값을 반환했습니다: 지연 시간 %lu은 사용 가능한 시간 %lu 보다 작습니다.\n"
 "ALSA 드라이버 '%s'의 오류일 수 있습니다. ALSA 개발자에게 이 문제를 보고해 주시기 바랍니다."
@@ -50,10 +45,8 @@ msgstr ""
 #: ../src/modules/alsa/alsa-util.c:1262
 #, c-format
 msgid ""
-"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms).\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers."
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."
 msgstr ""
 "snd_pcm_mmap_begin()이 %lu 바이트 (%lu ms)의 매우 큰 값을 반환했습니다.\n"
 "ALSA 드라이버 '%s'의 오류일 수 있습니다. ALSA 개발자에게 이 문제를 보고해 주시기 바랍니다."
@@ -72,21 +65,16 @@ msgstr "가상 LADSPA 싱크"
 
 #: ../src/modules/module-ladspa-sink.c:57
 msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma separated list of "
-"input control values> input_ladspaport_map=<comma separated list of input "
-"LADSPA port names> output_ladspaport_map=<comma separated list of output "
-"LADSPA port names> "
+"sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> sink_master=<name of sink "
+"to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
+"plugin name> label=<ladspa plugin label> control=<comma separated list of input control values> input_ladspaport_map=<comma "
+"separated list of input LADSPA port names> output_ladspaport_map=<comma separated list of output LADSPA port names> autoloaded=<set "
+"if this module is being loaded automatically> "
 msgstr ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma separated list of "
-"input control values> input_ladspaport_map=<comma separated list of input "
-"LADSPA port names> output_ladspaport_map=<comma separated list of output "
-"LADSPA port names> "
+"sink_name=<싱크의 이름> sink_properties=<싱크에 속성들을 지정> master=<필터를 적용할 싱크의 이름> sink_master=<필터를 적용할 싱크의 "
+"이름> format=<샘플 형식> rate=<샘플 레이트> channels=<채널 수> channel_map=<입력 채널 맵> plugin=<ladspa 플러그인 이름> "
+"label=<ladspa 플러그인 레이블> control=<쉼표로 구분된 입력 제어값> input_ladspaport_map=<쉼표로 구분된 LADSPA 입력포트 이름의 목록> "
+"output_ladspaport_map=<쉼표로 구분된 LADSPA 출력포트 이름의 목록> autoloaded=<이 모듈이 자동으로 로드된다면 설정하십시오> "
 
 #: ../src/modules/module-null-sink.c:49
 msgid "Clocked NULL sink"
@@ -188,9 +176,7 @@ msgid "Failed to parse command line."
 msgstr "명령어 행 분석 실패."
 
 #: ../src/daemon/main.c:529
-msgid ""
-"System mode refused for non-root user. Only starting the D-Bus server lookup "
-"service."
+msgid "System mode refused for non-root user. Only starting the D-Bus server lookup service."
 msgstr "비 root 사용자에 대해 시스템 모드는 거부되었습니다. D-Bus 서버 검색 서비스만 시작합니다."
 
 #: ../src/daemon/main.c:611
@@ -208,9 +194,7 @@ msgid "Failed to kill daemon: %s"
 msgstr "데몬 종료 실패: %s"
 
 #: ../src/daemon/main.c:657
-msgid ""
-"This program is not intended to be run as root (unless --system is "
-"specified)."
+msgid "This program is not intended to be run as root (unless --system is specified)."
 msgstr "프로그램이 root로 실행되지 않습니다. (실행하려면 --system을 명기하십시오)."
 
 #: ../src/daemon/main.c:660
@@ -228,8 +212,7 @@ msgstr "%s에서 사용자 설정한 서버, start/autospawn을 거부하고 있
 
 #: ../src/daemon/main.c:713
 #, c-format
-msgid ""
-"User-configured server at %s, which appears to be local. Probing deeper."
+msgid "User-configured server at %s, which appears to be local. Probing deeper."
 msgstr "%s에 사용자가 설정한 서버, 이는 로컬에 있습니다. 상세히 조사합니다."
 
 #: ../src/daemon/main.c:718
@@ -384,19 +367,15 @@ msgstr "시스템 모드로 실행중: %s"
 
 #: ../src/daemon/main.c:964
 msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
-"Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
-"mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please note that you most likely shouldn't be doing that.\n"
+"If you do it nonetheless then it's your own fault if things don't work as expected.\n"
+"Please read http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ for an explanation "
+"why system mode is usually a bad idea."
 msgstr ""
 "PA가 시스템 모드로 동작하고 있습니다. 하지만 이것은 권장되지 않습니다.\n"
 "만약 의도대로 정상동작하지 않더라도 그것은 당신의 잘못입니다.\n"
-"시스템 모드가 좋지 않은 이유에 대해서는 다음 문서를 확인하시기 바랍니다. "
-"http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/"
-"WhatIsWrongWithSystemWide/ "
+"시스템 모드가 좋지 않은 이유에 대해서는 다음 문서를 확인하시기 바랍니다. http://www.freedesktop.org/wiki/Software/PulseAudio/"
+"Documentation/User/WhatIsWrongWithSystemWide/ "
 
 #: ../src/daemon/main.c:981
 msgid "pa_pid_file_create() failed."
@@ -407,9 +386,7 @@ msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "최신 고해상도 타이머가 사용 가능합니다! 사용해 보십시오!"
 
 #: ../src/daemon/main.c:993
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
+msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
 msgstr "커널이 좋지 않습니다! 고해상도 타이머가 활성화되어 있는 Linux를 추천합니다!"
 
 #: ../src/daemon/main.c:1011
@@ -448,44 +425,35 @@ msgid ""
 "      --dump-modules                    Dump list of available modules\n"
 "      --dump-resample-methods           Dump available resample methods\n"
 "      --cleanup-shm                     Cleanup stale shared memory segments\n"
-"      --start                           Start the daemon if it is not "
-"running\n"
+"      --start                           Start the daemon if it is not running\n"
 "  -k  --kill                            Kill a running daemon\n"
-"      --check                           Check for a running daemon (only "
-"returns exit code)\n"
+"      --check                           Check for a running daemon (only returns exit code)\n"
 "\n"
 "OPTIONS:\n"
 "      --system[=BOOL]                   Run as system-wide instance\n"
 "  -D, --daemonize[=BOOL]                Daemonize after startup\n"
 "      --fail[=BOOL]                     Quit when startup fails\n"
 "      --high-priority[=BOOL]            Try to set high nice level\n"
-"                                        (only available as root, when SUID "
-"or\n"
+"                                        (only available as root, when SUID or\n"
 "                                        with elevated RLIMIT_NICE)\n"
 "      --realtime[=BOOL]                 Try to enable realtime scheduling\n"
-"                                        (only available as root, when SUID "
-"or\n"
+"                                        (only available as root, when SUID or\n"
 "                                        with elevated RLIMIT_RTPRIO)\n"
-"      --disallow-module-loading[=BOOL]  Disallow module user requested "
-"module\n"
+"      --disallow-module-loading[=BOOL]  Disallow module user requested module\n"
 "                                        loading/unloading after startup\n"
 "      --disallow-exit[=BOOL]            Disallow user requested exit\n"
-"      --exit-idle-time=SECS             Terminate the daemon when idle and "
-"this\n"
+"      --exit-idle-time=SECS             Terminate the daemon when idle and this\n"
 "                                        time passed\n"
-"      --scache-idle-time=SECS           Unload autoloaded samples when idle "
-"and\n"
+"      --scache-idle-time=SECS           Unload autoloaded samples when idle and\n"
 "                                        this time passed\n"
 "      --log-level[=LEVEL]               Increase or set verbosity level\n"
 "  -v                                    Increase the verbosity level\n"
 "      --log-target={auto,syslog,stderr,file:PATH,newfile:PATH}\n"
 "                                        Specify the log target\n"
-"      --log-meta[=BOOL]                 Include code location in log "
-"messages\n"
+"      --log-meta[=BOOL]                 Include code location in log messages\n"
 "      --log-time[=BOOL]                 Include timestamps in log messages\n"
 "      --log-backtrace=FRAMES            Include a backtrace in log messages\n"
-"  -p, --dl-search-path=PATH             Set the search path for dynamic "
-"shared\n"
+"  -p, --dl-search-path=PATH             Set the search path for dynamic shared\n"
 "                                        objects (plugins)\n"
 "      --resample-method=METHOD          Use the specified resampling method\n"
 "                                        (See --dump-resample-methods for\n"
@@ -496,12 +464,10 @@ msgid ""
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
-"  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
-"with\n"
+"  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module with\n"
 "                                        the specified argument\n"
 "  -F, --file=FILENAME                   Run the specified script\n"
-"  -C                                    Open a command line on the running "
-"TTY\n"
+"  -C                                    Open a command line on the running TTY\n"
 "                                        after startup\n"
 "\n"
 "  -n                                    Don't load default script file\n"
@@ -571,9 +537,7 @@ msgid "--fail expects boolean argument"
 msgstr "--fail은 부울 인수를 예상합니다."
 
 #: ../src/daemon/cmdline.c:261
-msgid ""
-"--log-level expects log level argument (either numeric in range 0..4 or one "
-"of debug, info, notice, warn, error)."
+msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
 msgstr "--log-level은 로깅 수준 인수를 예상합니다 (0..4 숫자 범위 또는 디버그, 정보, 알림, 경고, 오류 중 하나)"
 
 #: ../src/daemon/cmdline.c:273
@@ -597,12 +561,8 @@ msgid "--use-pid-file expects boolean argument"
 msgstr "--use-pid-file는 boolean 인수를 사용합니다."
 
 #: ../src/daemon/cmdline.c:318
-msgid ""
-"Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
-"name 'file:<path>', 'newfile:<path>'."
-msgstr ""
-"잘못된 로그 대상: 'syslog', 'stderr','auto' 또는 유효한 파일 이름 'file:<path>', 'newfile:"
-"<path>' 중에 하나를 사용하십시오."
+msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file name 'file:<path>', 'newfile:<path>'."
+msgstr "잘못된 로그 대상: 'syslog', 'stderr','auto' 또는 유효한 파일 이름 'file:<path>', 'newfile:<path>' 중에 하나를 사용하십시오."
 
 #: ../src/daemon/cmdline.c:325
 msgid "--log-time expects boolean argument"
@@ -740,9 +700,7 @@ msgid "Failed to open configuration file: %s"
 msgstr "설정 파일 열기 실패: %s"
 
 #: ../src/daemon/daemon-conf.c:678
-msgid ""
-"The specified default channel map has a different number of channels than "
-"the specified default number of channels."
+msgid "The specified default channel map has a different number of channels than the specified default number of channels."
 msgstr "지정된 기본 채널 맵은 지정된 기본 채널 수와는 다른 채널 수를 가지고 있습니다."
 
 #: ../src/daemon/daemon-conf.c:764
@@ -974,10 +932,8 @@ msgstr "상단 후면 왼쪽"
 msgid "Top Rear Right"
 msgstr "상단 후면 오른쪽"
 
-#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:169
-#: ../src/pulse/volume.c:297 ../src/pulse/volume.c:323
-#: ../src/pulse/volume.c:343 ../src/pulse/volume.c:373
-#: ../src/pulse/format.c:125
+#: ../src/pulse/channelmap.c:484 ../src/pulse/sample.c:169 ../src/pulse/volume.c:297 ../src/pulse/volume.c:323
+#: ../src/pulse/volume.c:343 ../src/pulse/volume.c:373 ../src/pulse/format.c:125
 msgid "(invalid)"
 msgstr "(잘못됨)"
 
@@ -1359,50 +1315,30 @@ msgid ""
 "  -v, --verbose                         Enable verbose operations\n"
 "\n"
 "  -s, --server=SERVER                   The name of the server to connect to\n"
-"  -d, --device=DEVICE                   The name of the sink/source to "
-"connect to\n"
-"  -n, --client-name=NAME                How to call this client on the "
-"server\n"
-"      --stream-name=NAME                How to call this stream on the "
-"server\n"
-"      --volume=VOLUME                   Specify the initial (linear) volume "
-"in range 0...65536\n"
-"      --rate=SAMPLERATE                 The sample rate in Hz (defaults to "
-"44100)\n"
-"      --format=SAMPLEFORMAT             The sample type, one of s16le, "
-"s16be, u8, float32le,\n"
-"                                        float32be, ulaw, alaw, s32le, s32be, "
-"s24le, s24be,\n"
-"                                        s24-32le, s24-32be (defaults to "
-"s16ne)\n"
-"      --channels=CHANNELS               The number of channels, 1 for mono, "
-"2 for stereo\n"
+"  -d, --device=DEVICE                   The name of the sink/source to connect to\n"
+"  -n, --client-name=NAME                How to call this client on the server\n"
+"      --stream-name=NAME                How to call this stream on the server\n"
+"      --volume=VOLUME                   Specify the initial (linear) volume in range 0...65536\n"
+"      --rate=SAMPLERATE                 The sample rate in Hz (defaults to 44100)\n"
+"      --format=SAMPLEFORMAT             The sample type, one of s16le, s16be, u8, float32le,\n"
+"                                        float32be, ulaw, alaw, s32le, s32be, s24le, s24be,\n"
+"                                        s24-32le, s24-32be (defaults to s16ne)\n"
+"      --channels=CHANNELS               The number of channels, 1 for mono, 2 for stereo\n"
 "                                        (defaults to 2)\n"
-"      --channel-map=CHANNELMAP          Channel map to use instead of the "
-"default\n"
-"      --fix-format                      Take the sample format from the sink "
-"the stream is\n"
+"      --channel-map=CHANNELMAP          Channel map to use instead of the default\n"
+"      --fix-format                      Take the sample format from the sink the stream is\n"
 "                                        being connected to.\n"
-"      --fix-rate                        Take the sampling rate from the sink "
-"the stream is\n"
+"      --fix-rate                        Take the sampling rate from the sink the stream is\n"
 "                                        being connected to.\n"
-"      --fix-channels                    Take the number of channels and the "
-"channel map\n"
-"                                        from the sink the stream is being "
-"connected to.\n"
+"      --fix-channels                    Take the number of channels and the channel map\n"
+"                                        from the sink the stream is being connected to.\n"
 "      --no-remix                        Don't upmix or downmix channels.\n"
-"      --no-remap                        Map channels by index instead of "
-"name.\n"
-"      --latency=BYTES                   Request the specified latency in "
-"bytes.\n"
-"      --process-time=BYTES              Request the specified process time "
-"per request in bytes.\n"
-"      --latency-msec=MSEC               Request the specified latency in "
-"msec.\n"
-"      --process-time-msec=MSEC          Request the specified process time "
-"per request in msec.\n"
-"      --property=PROPERTY=VALUE         Set the specified property to the "
-"specified value.\n"
+"      --no-remap                        Map channels by index instead of name.\n"
+"      --latency=BYTES                   Request the specified latency in bytes.\n"
+"      --process-time=BYTES              Request the specified process time per request in bytes.\n"
+"      --latency-msec=MSEC               Request the specified latency in msec.\n"
+"      --process-time-msec=MSEC          Request the specified process time per request in msec.\n"
+"      --property=PROPERTY=VALUE         Set the specified property to the specified value.\n"
 "      --raw                             Record/play raw PCM data.\n"
 "      --passthrough                     passthrough data \n"
 "      --file-format[=FFORMAT]           Record/play formatted PCM data.\n"
@@ -1424,10 +1360,8 @@ msgstr ""
 "      --stream-name=NAME                서버에서 스트림 호출 방법\n"
 "      --volume=VOLUME                   초기 (선형) 볼륨을 0...65536 범위에서 지정\n"
 "      --rate=SAMPLERATE                 샘플 레이트를 Hz 단위로 지정 (기본값: 44100)\n"
-"      --format=SAMPLEFORMAT             샘플 유형을 다음 중 하나로 지정 s16le, s16be, u8, "
-"float32le,\n"
-"                                        float32be, ulaw, alaw, s32le, s32be, "
-"s24le, s24be,\n"
+"      --format=SAMPLEFORMAT             샘플 유형을 다음 중 하나로 지정 s16le, s16be, u8, float32le,\n"
+"                                        float32be, ulaw, alaw, s32le, s32be, s24le, s24be,\n"
 "                                        s24-32le, s24-32be (기본값: s16ne)\n"
 "      --channels=CHANNELS               채널 수를 지정, 1 (모노의 경우), 2 (스테레오의 경우)\n"
 "                                        (기본값: 2)\n"
@@ -1452,10 +1386,12 @@ msgstr ""
 
 #: ../src/utils/pacat.c:788
 #, c-format
-msgid "pacat %s\n"
+msgid ""
+"pacat %s\n"
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
-msgstr "pacat %s\n"
+msgstr ""
+"pacat %s\n"
 "libpulse %s로 컴파일됨\n"
 "libpulse %s와 링크됨\n"
 
@@ -1521,9 +1457,7 @@ msgid "Failed to open audio file."
 msgstr "오디오 파일을 열 수 없습니다."
 
 #: ../src/utils/pacat.c:1038
-msgid ""
-"Warning: specified sample specification will be overwritten with "
-"specification from file."
+msgid "Warning: specified sample specification will be overwritten with specification from file."
 msgstr "경고: 지정된 샘플 사양은 파일에서의 사양을 덮어쓰기하게 됩니다."
 
 #: ../src/utils/pacat.c:1041 ../src/utils/pactl.c:1534
@@ -1544,8 +1478,7 @@ msgstr "경고: 채널 맵을 파일에 기록할 수 없습니다."
 
 #: ../src/utils/pacat.c:1087
 #, c-format
-msgid ""
-"Opening a %s stream with sample specification '%s' and channel map '%s'."
+msgid "Opening a %s stream with sample specification '%s' and channel map '%s'."
 msgstr "샘플 사양 '%s', 채널 맵 '%s'으로 %s 스트림을 엽니다."
 
 #: ../src/utils/pacat.c:1088
@@ -1644,10 +1577,12 @@ msgstr ""
 
 #: ../src/utils/pasuspender.c:248
 #, c-format
-msgid "pasuspender %s\n"
+msgid ""
+"pasuspender %s\n"
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
-msgstr "pasuspender %s\n"
+msgstr ""
+"pasuspender %s\n"
 "libpulse %s로 컴파일\n"
 "libpulse %s로 연결\n"
 
@@ -1834,11 +1769,9 @@ msgstr ""
 "\t속성:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:418 ../src/utils/pactl.c:488 ../src/utils/pactl.c:531
-#: ../src/utils/pactl.c:573 ../src/utils/pactl.c:671 ../src/utils/pactl.c:672
-#: ../src/utils/pactl.c:684 ../src/utils/pactl.c:744 ../src/utils/pactl.c:745
-#: ../src/utils/pactl.c:757 ../src/utils/pactl.c:809 ../src/utils/pactl.c:810
-#: ../src/utils/pactl.c:817
+#: ../src/utils/pactl.c:418 ../src/utils/pactl.c:488 ../src/utils/pactl.c:531 ../src/utils/pactl.c:573 ../src/utils/pactl.c:671
+#: ../src/utils/pactl.c:672 ../src/utils/pactl.c:684 ../src/utils/pactl.c:744 ../src/utils/pactl.c:745 ../src/utils/pactl.c:757
+#: ../src/utils/pactl.c:809 ../src/utils/pactl.c:810 ../src/utils/pactl.c:817
 msgid "n/a"
 msgstr "해당 없음 "
 
@@ -1856,7 +1789,8 @@ msgid ""
 "\tUsage counter: %s\n"
 "\tProperties:\n"
 "\t\t%s\n"
-msgstr "모듈 #%u\n"
+msgstr ""
+"모듈 #%u\n"
 "\t이름: %s\n"
 "\t인수: %s\n"
 "\t사용자 카운터: %s\n"
@@ -1870,12 +1804,14 @@ msgstr "클라이언트 정보를 가져올 수 없습니다: %s"
 
 #: ../src/utils/pactl.c:525
 #, c-format
-msgid "Client #%u\n"
+msgid ""
+"Client #%u\n"
 "\tDriver: %s\n"
 "\tOwner Module: %s\n"
 "\tProperties:\n"
 "\t\t%s\n"
-msgstr "클라이언트 #%u\n"
+msgstr ""
+"클라이언트 #%u\n"
 "\t드라이버: %s\n"
 "\t소유자 모듈: %s\n"
 "\t속성:\n"
@@ -1888,13 +1824,15 @@ msgstr "카드 정보를 가져올 수 없습니다: %s"
 
 #: ../src/utils/pactl.c:565
 #, c-format
-msgid "Card #%u\n"
+msgid ""
+"Card #%u\n"
 "\tName: %s\n"
 "\tDriver: %s\n"
 "\tOwner Module: %s\n"
 "\tProperties:\n"
 "\t\t%s\n"
-msgstr "카드 #%u\n"
+msgstr ""
+"카드 #%u\n"
 "\t이름: %s\n"
 "\t드라이버: %s\n"
 "\t소유자 모듈: %s\n"
@@ -1913,9 +1851,11 @@ msgstr "\t활성 프로파일: %s\n"
 
 #: ../src/utils/pactl.c:601
 #, c-format
-msgid "\t\t\tProperties:\n"
+msgid ""
+"\t\t\tProperties:\n"
 "\t\t\t\t%s\n"
-msgstr "\t\t\t속성:\n"
+msgstr ""
+"\t\t\t속성:\n"
 "\t\t\t\t%s\n"
 
 #: ../src/utils/pactl.c:606
@@ -2124,9 +2064,9 @@ msgid "server"
 msgstr "서버 "
 
 #: ../src/utils/pactl.c:1100
-#, fuzzy, c-format
+#, c-format
 msgid "Event '%s' on %s #%u\n"
-msgstr "%s #%u에서 이벤트 '%s'\n"
+msgstr "이벤트 '%s'는 %s #%u 상에 있습니다.\n"
 
 #: ../src/utils/pactl.c:1324
 msgid "Got SIGINT, exiting."
@@ -2140,16 +2080,10 @@ msgstr "잘못된 볼륨 사양 "
 msgid "Volume outside permissible range.\n"
 msgstr "볼륨이 허용 범위를 벗어납니다.\n"
 
-#: ../src/utils/pactl.c:1385 ../src/utils/pactl.c:1386
-#: ../src/utils/pactl.c:1387 ../src/utils/pactl.c:1388
-#: ../src/utils/pactl.c:1389 ../src/utils/pactl.c:1390
-#: ../src/utils/pactl.c:1391 ../src/utils/pactl.c:1392
-#: ../src/utils/pactl.c:1393 ../src/utils/pactl.c:1394
-#: ../src/utils/pactl.c:1395 ../src/utils/pactl.c:1396
-#: ../src/utils/pactl.c:1397 ../src/utils/pactl.c:1398
-#: ../src/utils/pactl.c:1399 ../src/utils/pactl.c:1400
-#: ../src/utils/pactl.c:1401 ../src/utils/pactl.c:1402
-#: ../src/utils/pactl.c:1403 ../src/utils/pactl.c:1404
+#: ../src/utils/pactl.c:1385 ../src/utils/pactl.c:1386 ../src/utils/pactl.c:1387 ../src/utils/pactl.c:1388 ../src/utils/pactl.c:1389
+#: ../src/utils/pactl.c:1390 ../src/utils/pactl.c:1391 ../src/utils/pactl.c:1392 ../src/utils/pactl.c:1393 ../src/utils/pactl.c:1394
+#: ../src/utils/pactl.c:1395 ../src/utils/pactl.c:1396 ../src/utils/pactl.c:1397 ../src/utils/pactl.c:1398 ../src/utils/pactl.c:1399
+#: ../src/utils/pactl.c:1400 ../src/utils/pactl.c:1401 ../src/utils/pactl.c:1402 ../src/utils/pactl.c:1403 ../src/utils/pactl.c:1404
 msgid "[options]"
 msgstr "[옵션]"
 
@@ -2181,8 +2115,7 @@ msgstr "이름|#N"
 msgid "#N SINK|SOURCE"
 msgstr "#N 싱크|소스"
 
-#: ../src/utils/pactl.c:1395 ../src/utils/pactl.c:1400 ../src/utils/pacmd.c:58
-#: ../src/utils/pacmd.c:72
+#: ../src/utils/pactl.c:1395 ../src/utils/pactl.c:1400 ../src/utils/pacmd.c:58 ../src/utils/pacmd.c:72
 msgid "NAME|#N 1|0"
 msgstr "이름|#N 1|0"
 
@@ -2222,8 +2155,7 @@ msgid ""
 "      --version                         Show version\n"
 "\n"
 "  -s, --server=SERVER                   The name of the server to connect to\n"
-"  -n, --client-name=NAME                How to call this client on the "
-"server\n"
+"  -n, --client-name=NAME                How to call this client on the server\n"
 msgstr ""
 "\n"
 "  -h, --help                            도움말 표시\n"
@@ -2234,10 +2166,12 @@ msgstr ""
 
 #: ../src/utils/pactl.c:1447
 #, c-format
-msgid "pactl %s\n"
+msgid ""
+"pactl %s\n"
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
-msgstr "pactl %s\n"
+msgstr ""
+"pactl %s\n"
 "libpulse %s로 컴파일 됨\n"
 "libpulse %s와 링크됨\n"
 
@@ -2283,14 +2217,11 @@ msgid "You have to specify a module index or name"
 msgstr "모듈 인덱스 또는 이름을 지정해야 합니다 "
 
 #: ../src/utils/pactl.c:1628
-msgid ""
-"You may not specify more than one sink. You have to specify a boolean value."
+msgid "You may not specify more than one sink. You have to specify a boolean value."
 msgstr "하나 이상의 싱크를 지정할 수 없습니다. 부울 값을 지정해야 합니다."
 
 #: ../src/utils/pactl.c:1641
-msgid ""
-"You may not specify more than one source. You have to specify a boolean "
-"value."
+msgid "You may not specify more than one source. You have to specify a boolean value."
 msgstr "하나 이상의 소스를 지정할 수 없습니다. 부울 값을 지정해야 합니다."
 
 #: ../src/utils/pactl.c:1653
@@ -2333,8 +2264,7 @@ msgstr "잘못된 소스 출력 인덱스 "
 msgid "You have to specify a sink name/index and a mute boolean"
 msgstr "싱크 이름/인덱스와 무음 부울을 지정해야 합니다."
 
-#: ../src/utils/pactl.c:1750 ../src/utils/pactl.c:1767
-#: ../src/utils/pactl.c:1789 ../src/utils/pactl.c:1810
+#: ../src/utils/pactl.c:1750 ../src/utils/pactl.c:1767 ../src/utils/pactl.c:1789 ../src/utils/pactl.c:1810
 msgid "Invalid mute specification"
 msgstr "잘못된 무음 사양 "
 
@@ -2359,14 +2289,11 @@ msgid "Invalid source output index specification"
 msgstr "잘못된 소스 출력 인덱스 사양 "
 
 #: ../src/utils/pactl.c:1824
-msgid ""
-"You have to specify a sink index and a semicolon-separated list of supported "
-"formats"
+msgid "You have to specify a sink index and a semicolon-separated list of supported formats"
 msgstr "싱크 인덱스 및 지원하는 형식의 세미콜론으로 분리된 목록을 지정해야 합니다 "
 
 #: ../src/utils/pactl.c:1836
-msgid ""
-"You have to specify a card name/index, a port name and a latency offset"
+msgid "You have to specify a card name/index, a port name and a latency offset"
 msgstr "카드 이름/인덱스, 포트 이름 및 지연 오프셋을 지정해야 합니다 "
 
 #: ../src/utils/pactl.c:1843
@@ -2384,8 +2311,7 @@ msgid ""
 "\n"
 " -d    Show current PulseAudio data attached to X11 display (default)\n"
 " -e    Export local PulseAudio data to X11 display\n"
-" -i    Import PulseAudio data from X11 display to local environment "
-"variables and cookie file.\n"
+" -i    Import PulseAudio data from X11 display to local environment variables and cookie file.\n"
 " -r    Remove PulseAudio data from X11 display\n"
 msgstr ""
 "%s [-D display] [-S server] [-O sink] [-I source] [-c file]  [-d|-e|-i|-r]\n"
@@ -2514,10 +2440,12 @@ msgstr ""
 
 #: ../src/utils/pacmd.c:131
 #, c-format
-msgid "pacmd %s\n"
+msgid ""
+"pacmd %s\n"
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
-msgstr "pacmd %s\n"
+msgstr ""
+"pacmd %s\n"
 "libpulse %s로 컴파일\n"
 "libpulse %s로 연결\n"
 
@@ -2565,12 +2493,9 @@ msgstr "autospawn 잠금에 액세스할 수 없습니다."
 #: ../src/modules/alsa/alsa-sink.c:562 ../src/modules/alsa/alsa-sink.c:728
 #, c-format
 msgid ""
-"ALSA woke us up to write new data to the device, but there was actually "
-"nothing to write!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
 msgstr ""
 "ALSA가 장치에 새 데이터를 쓰도록 재촉했지만 쓸 수 있는 것이 없습니다!\n"
 "이는 대부분 ALSA 드라이버 '%s'의 버그입니다. 이 문제를 ALSA 개발자에게 보고하십시오.\n"
@@ -2579,25 +2504,20 @@ msgstr ""
 #: ../src/modules/alsa/alsa-source.c:521 ../src/modules/alsa/alsa-source.c:674
 #, c-format
 msgid ""
-"ALSA woke us up to read new data from the device, but there was actually "
-"nothing to read!\n"
-"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
-"to the ALSA developers.\n"
-"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-"returned 0 or another value < min_avail."
+"ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."
 msgstr ""
 "ALSA가 장치에 새 데이터를 읽도록 재촉했지만 읽을 수 있는 것이 없습니다!\n"
 "이는 대부분 ALSA 드라이버 '%s'의 버그입니다. 이 문제를 ALSA 개발자에게 보고하십시오.\n"
 "POLLIN 세트로 불러오려했지만 결과적으로 snd_pcm_avail()이 0 또는 다른 값 < min_avail을 반환했습니다. "
 
-#: ../src/modules/alsa/module-alsa-card.c:193
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2458
+#: ../src/modules/alsa/module-alsa-card.c:193 ../src/modules/bluetooth/module-bluetooth-device.c:2458
 #: ../src/modules/alsa/alsa-mixer.c:3949
 msgid "Off"
 msgstr "끄기 "
 
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2282
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2309
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2282 ../src/modules/bluetooth/module-bluetooth-device.c:2309
 msgid "Bluetooth Output"
 msgstr "블루투스 출력 "
 
@@ -2609,8 +2529,7 @@ msgstr "Bluetooth 고품질 (A2DP)"
 msgid "Bluetooth Telephony (HSP/HFP)"
 msgstr "Bluetooth 전화 (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2328
-#: ../src/modules/bluetooth/module-bluetooth-device.c:2336
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2328 ../src/modules/bluetooth/module-bluetooth-device.c:2336
 msgid "Bluetooth Handsfree Gateway"
 msgstr "블루투스 핸즈프리 게이트웨이 "
 
@@ -2634,14 +2553,12 @@ msgstr "핸즈프리 게이트웨이"
 msgid "PulseAudio Sound Server"
 msgstr "펄스오디오 사운드 서버"
 
-#: ../src/modules/module-rygel-media-server.c:510
-#: ../src/modules/module-rygel-media-server.c:548
+#: ../src/modules/module-rygel-media-server.c:510 ../src/modules/module-rygel-media-server.c:548
 #: ../src/modules/module-rygel-media-server.c:903
 msgid "Output Devices"
 msgstr "출력 장치"
 
-#: ../src/modules/module-rygel-media-server.c:511
-#: ../src/modules/module-rygel-media-server.c:549
+#: ../src/modules/module-rygel-media-server.c:511 ../src/modules/module-rygel-media-server.c:549
 #: ../src/modules/module-rygel-media-server.c:904
 msgid "Input Devices"
 msgstr "입력 장치"
@@ -2890,25 +2807,17 @@ msgstr "%s 입력"
 
 #: ../src/modules/echo-cancel/module-echo-cancel.c:63
 msgid ""
-"source_name=<name for the source> source_properties=<properties for the "
-"source> source_master=<name of source to filter> sink_name=<name for the "
-"sink> sink_properties=<properties for the sink> sink_master=<name of sink to "
-"filter> adjust_time=<how often to readjust rates in s> adjust_threshold=<how "
-"much drift to readjust after in ms> format=<sample format> rate=<sample "
-"rate> channels=<number of channels> channel_map=<channel map> aec_method="
-"<implementation to use> aec_args=<parameters for the AEC engine> save_aec="
-"<save AEC data in /tmp> autoloaded=<set if this module is being loaded "
-"automatically> use_volume_sharing=<yes or no> "
+"source_name=<name for the source> source_properties=<properties for the source> source_master=<name of source to filter> "
+"sink_name=<name for the sink> sink_properties=<properties for the sink> sink_master=<name of sink to filter> adjust_time=<how often "
+"to readjust rates in s> adjust_threshold=<how much drift to readjust after in ms> format=<sample format> rate=<sample rate> "
+"channels=<number of channels> channel_map=<channel map> aec_method=<implementation to use> aec_args=<parameters for the AEC engine> "
+"save_aec=<save AEC data in /tmp> autoloaded=<set if this module is being loaded automatically> use_volume_sharing=<yes or no> "
 msgstr ""
-"source_name=<name for the source> source_properties=<properties for the "
-"source> source_master=<name of source to filter> sink_name=<name for the "
-"sink> sink_properties=<properties for the sink> sink_master=<name of sink to "
-"filter> adjust_time=<how often to readjust rates in s> adjust_threshold=<how "
-"much drift to readjust after in ms> format=<sample format> rate=<sample "
-"rate> channels=<number of channels> channel_map=<channel map> aec_method="
-"<implementation to use> aec_args=<parameters for the AEC engine> save_aec="
-"<save AEC data in /tmp> autoloaded=<set if this module is being loaded "
-"automatically> use_volume_sharing=<yes or no> "
+"source_name=<소스의 이름> source_properties=<소스에 속성들을 지정> source_master=<필터를 적용할 소스의 이름> sink_name=<싱크의 이름"
+"> sink_properties=<싱크에 속성들을 지정> sink_master=<필터를 적용할 싱크의 이름> adjust_time=<샘플 레이트 재조정을 몇 초 단위로 할 "
+"것인지 지정> adjust_threshold=<드리프트가 몇 ms 이후부터 재조정을 할 것인지 지정> format=<샘플 형식> rate=<샘플 레이트> channels=<채"
+"널 수> channel_map=<채널 맵> aec_method=<사용 할 구현체> aec_args=<AEC 엔진의 인자들> save_aec=<AEC 데이터를 /tmp 안에 저장> "
+"autoloaded=<이 모듈이 자동으로 로드된다면 설정하십시오> use_volume_sharing=<yes 또는 no> "
 
 #: ../src/modules/module-equalizer-sink.c:72
 msgid "General Purpose Equalizer"
@@ -2916,15 +2825,12 @@ msgstr "일반적 목적의 이퀼라이저 "
 
 #: ../src/modules/module-equalizer-sink.c:76
 msgid ""
-"sink_name=<name of the sink> sink_properties=<properties for the sink> "
-"sink_master=<sink to connect to> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> autoloaded=<set if "
-"this module is being loaded automatically> use_volume_sharing=<yes or no> "
+"sink_name=<name of the sink> sink_properties=<properties for the sink> sink_master=<sink to connect to> format=<sample format> "
+"rate=<sample rate> channels=<number of channels> channel_map=<channel map> autoloaded=<set if this module is being loaded "
+"automatically> use_volume_sharing=<yes or no> "
 msgstr ""
-"sink_name=<name of the sink> sink_properties=<properties for the sink> "
-"sink_master=<sink to connect to> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> autoloaded=<set if "
-"this module is being loaded automatically> use_volume_sharing=<yes or no> "
+"sink_name=<싱크의 이름> sink_properties=<싱크에 속성들을 지정> sink_master=<연결할 싱크> format=<샘플 형식> rate=<샘플 레이트> "
+"channels=<채널 수> channel_map=<채널 맵> autoloaded=<이 모듈이 자동으로 로드된다면 설정하십시오> use_volume_sharing=<yes 또는 no> "
 
 #: ../src/modules/module-filter-apply.c:48
 msgid "autoclean=<automatically unload unused filters?>"
@@ -2937,24 +2843,19 @@ msgid ""
 "\n"
 "-h, --help                            Show this help\n"
 "-v, --verbose                         Print debug messages\n"
-"      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
-"44100)\n"
+"      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to 44100)\n"
 "      --from-format=SAMPLEFORMAT      From sample type (defaults to s16le)\n"
-"      --from-channels=CHANNELS        From number of channels (defaults to "
-"1)\n"
-"      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
-"44100)\n"
+"      --from-channels=CHANNELS        From number of channels (defaults to 1)\n"
+"      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to 44100)\n"
 "      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
 "      --to-channels=CHANNELS          To number of channels (defaults to 1)\n"
 "      --resample-method=METHOD        Resample method (defaults to auto)\n"
 "      --seconds=SECONDS               From stream duration (defaults to 60)\n"
 "\n"
-"If the formats are not specified, the test performs all formats "
-"combinations,\n"
+"If the formats are not specified, the test performs all formats combinations,\n"
 "back and forth.\n"
 "\n"
-"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
-"alaw,\n"
+"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, alaw,\n"
 "32le, s32be (defaults to s16ne)\n"
 "\n"
 "See --dump-resample-methods for possible values of resample methods.\n"
@@ -2996,15 +2897,14 @@ msgstr "가상 서라운드 싱크 "
 
 #: ../src/modules/module-virtual-surround-sink.c:53
 msgid ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> use_volume_sharing="
-"<yes or no> force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav "
+"sink_name=<name for the sink> sink_properties=<properties for the sink> master=<name of sink to filter> sink_master=<name of sink "
+"to filter> format=<sample format> rate=<sample rate> channels=<number of channels> channel_map=<channel map> "
+"use_volume_sharing=<yes or no> force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav autoloaded=<set if this module is being "
+"loaded automatically> "
 msgstr ""
-"sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> use_volume_sharing="
-"<yes or no> force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav "
+"sink_name=<싱크의 이름> sink_properties=<싱크에 속성들을 지정> master=<필터를 적용할 싱크의 이름> sink_master=<필터를 적용할 싱크의 "
+"이름> format=<샘플 형식> rate=<샘플 레이트> channels=<채널 수> channel_map=<채널 맵> use_volume_sharing=<yes 또는 no> "
+"force_flat_volume=<yes 또는 no> hrir=/path/to/left_hrir.wav autoloaded=<이 모듈이 자동으로 로드된다면 설정하십시오> "
 
 #. add on profile
 #: ../src/modules/macosx/module-coreaudio-device.c:747
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 0543857..a9fd40b 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,29 +1,24 @@
-# Brazilian Portuguese translation of pulseaudio
-# Copyright (C) 2014 freedesktop.org
+# Brazilian Portuguese translation for pulseaudio
+# Copyright (C) 2017 freedesktop.org
 # This file is distributed under the same license as the pulseaudio package.
 # Fabian Affolter <fab at fedoraproject.org>, 2008.
 # Igor Pires Soares <igor at projetofedora.org>, 2009, 2012.
-# Rafael Ferreira Fontenelle <rafael.f.f1 at gmail.com>, 2013, 2014.
-#
+# Rafael Fontenelle <rafaelff at gnome.org>, 2013, 2014, 2017.
 msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?"
 "product=PulseAudio&keywords=I18N+L10N&component=misc\n"
-"POT-Creation-Date: 2014-06-24 22:12+0000\n"
-"PO-Revision-Date: 2014-07-21 09:26-0300\n"
-"Last-Translator: Rafael Ferreira <rafael.f.f1 at gmail.com>\n"
+"POT-Creation-Date: 2017-03-01 15:47+0000\n"
+"PO-Revision-Date: 2017-04-09 19:55-0200\n"
+"Last-Translator: Rafael Fontenelle <rafaelff at gnome.org>\n"
 "Language-Team: Brazilian Portuguese <gnome-pt_br-list at gnome.org>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 1.6.5\n"
-
-#: ../src/daemon/caps.c:54
-msgid "Cleaning up privileges."
-msgstr "Limpando privilégios."
+"X-Generator: Virtaal 1.0.0-beta1\n"
 
 #: ../src/daemon/cmdline.c:113
 #, c-format
@@ -84,6 +79,7 @@ msgid ""
 "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
 "                                        platforms that support it.\n"
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+"      --enable-memfd[=BOOL]             Enable memfd shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
 "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
@@ -173,9 +169,12 @@ msgstr ""
 "                                        suporte.\n"
 "      --disable-shm[=BOOL]              Desabilita o suporte à memória\n"
 "                                        compartilhada.\n"
+"      --enable-memfd[=BOOL]             Habilita o suporte à memória\n"
+"                                        compartilhada memfd\n"
 "\n"
 "SCRIPT DE INICIALIZAÇÃO:\n"
-"  -L, --load=\"ARGUMENTOS DO MÓDULO\"     Carrega um plug-in especificado com\n"
+"  -L, --load=\"ARGUMENTOS DO MÓDULO\"     Carrega um plug-in especificado "
+"com\n"
 "                                        o argumento especificado\n"
 "  -F, --file=NOME_DO_ARQUIVO            Executa o script especificado\n"
 "  -C                                    Abre uma linha de comando no TTY em\n"
@@ -184,15 +183,15 @@ msgstr ""
 "  -n                                    Não carrega o arquivo de script "
 "padrão\n"
 
-#: ../src/daemon/cmdline.c:245
+#: ../src/daemon/cmdline.c:246
 msgid "--daemonize expects boolean argument"
 msgstr "--daemonize espera argumento booleano"
 
-#: ../src/daemon/cmdline.c:253
+#: ../src/daemon/cmdline.c:254
 msgid "--fail expects boolean argument"
 msgstr "--fail espera argumento booleano"
 
-#: ../src/daemon/cmdline.c:264
+#: ../src/daemon/cmdline.c:265
 msgid ""
 "--log-level expects log level argument (either numeric in range 0..4 or one "
 "of debug, info, notice, warn, error)."
@@ -200,133 +199,137 @@ msgstr ""
 "--log-level espera um argumento em nível de log (seja numérico na faixa de "
 "0..4 seja algum entre debug, info, notice, warn, error)."
 
-#: ../src/daemon/cmdline.c:276
+#: ../src/daemon/cmdline.c:277
 msgid "--high-priority expects boolean argument"
 msgstr "--high-priority espera um argumento booleano"
 
-#: ../src/daemon/cmdline.c:284
+#: ../src/daemon/cmdline.c:285
 msgid "--realtime expects boolean argument"
 msgstr "--realtime espera um argumento booleano"
 
-#: ../src/daemon/cmdline.c:292
+#: ../src/daemon/cmdline.c:293
 msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading espera um argumento booleano"
 
-#: ../src/daemon/cmdline.c:300
+#: ../src/daemon/cmdline.c:301
 msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit espera um argumento booleano"
 
-#: ../src/daemon/cmdline.c:308
+#: ../src/daemon/cmdline.c:309
 msgid "--use-pid-file expects boolean argument"
 msgstr "--use-pid-file espera argumento booleano"
 
-#: ../src/daemon/cmdline.c:327
+#: ../src/daemon/cmdline.c:328
 msgid ""
 "Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a "
 "valid file name 'file:<path>', 'newfile:<path>'."
 msgstr ""
-"Alvo de log inválido: use \"syslog\", \"journal\", \"stderr\" ou \"auto\" um "
-"nome de arquivo válido \"file:<caminho>\", \"newfile:<caminho>\"."
+"Alvo de log inválido: use “syslog”, “journal”, “stderr” ou “auto” ou um nome "
+"de um arquivo válido “file:<caminho>”, “newfile:<caminho>”."
 
-#: ../src/daemon/cmdline.c:329
+#: ../src/daemon/cmdline.c:330
 msgid ""
 "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
 "name 'file:<path>', 'newfile:<path>'."
 msgstr ""
-"Alvo de log inválido: use \"syslog\", \"stderr\" ou \"auto\" um nome de "
-"arquivo válido \"file:<caminho>\", \"newfile:<caminho>\"."
+"Alvo de log inválido: use “syslog”, “stderr” ou “auto” ou um nome de arquivo "
+"válido “file:<caminho>”, “newfile:<caminho>”."
 
-#: ../src/daemon/cmdline.c:337
+#: ../src/daemon/cmdline.c:338
 msgid "--log-time expects boolean argument"
 msgstr "--log-time espera um argumento booleano"
 
-#: ../src/daemon/cmdline.c:345
+#: ../src/daemon/cmdline.c:346
 msgid "--log-meta expects boolean argument"
 msgstr "--log-meta espera um argumento booleano"
 
-#: ../src/daemon/cmdline.c:365
+#: ../src/daemon/cmdline.c:366
 #, c-format
 msgid "Invalid resample method '%s'."
-msgstr "Método de reamostragem inválido \"%s\"."
+msgstr "Método de reamostragem inválido “%s”."
 
-#: ../src/daemon/cmdline.c:372
+#: ../src/daemon/cmdline.c:373
 msgid "--system expects boolean argument"
 msgstr "--system espera argumento booleano"
 
-#: ../src/daemon/cmdline.c:380
+#: ../src/daemon/cmdline.c:381
 msgid "--no-cpu-limit expects boolean argument"
 msgstr "--no-cpu-limit espera argumento booleano"
 
-#: ../src/daemon/cmdline.c:388
+#: ../src/daemon/cmdline.c:389
 msgid "--disable-shm expects boolean argument"
 msgstr "--disable-shm espera argumento booleano"
 
-#: ../src/daemon/daemon-conf.c:260
+#: ../src/daemon/cmdline.c:397
+msgid "--enable-memfd expects boolean argument"
+msgstr "--enable-memfd espera um argumento booleano"
+
+#: ../src/daemon/daemon-conf.c:262
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
-msgstr "[%s:%u] Alvo do log inválido \"%s\"."
+msgstr "[%s:%u] Alvo do log inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:275
+#: ../src/daemon/daemon-conf.c:277
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
-msgstr "[%s:%u] Nível de log inválido \"%s\"."
+msgstr "[%s:%u] Nível de log inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:292
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
-msgstr "[%s:%u] Método de reamostragem inválido \"%s\"."
+msgstr "[%s:%u] Método de reamostragem inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:312
+#: ../src/daemon/daemon-conf.c:314
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
-msgstr "[%s:%u] rlimit inválido \"%s\"."
+msgstr "[%s:%u] rlimit inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:332
+#: ../src/daemon/daemon-conf.c:334
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
-msgstr "[%s:%u] Formato de amostragem inválido \"%s\"."
+msgstr "[%s:%u] Formato de amostragem inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:349 ../src/daemon/daemon-conf.c:366
+#: ../src/daemon/daemon-conf.c:351 ../src/daemon/daemon-conf.c:368
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
-msgstr "[%s:%u] Taxa de amostragem inválida \"%s\"."
+msgstr "[%s:%u] Taxa de amostragem inválida “%s”."
 
-#: ../src/daemon/daemon-conf.c:389
+#: ../src/daemon/daemon-conf.c:391
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
-msgstr "[%s:%u] Canais de amostragem inválidos \"%s\"."
+msgstr "[%s:%u] Canais de amostragem inválidos “%s”."
 
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:408
 #, c-format
 msgid "[%s:%u] Invalid channel map '%s'."
-msgstr "[%s:%u] Mapa de canais inválido \"%s\"."
+msgstr "[%s:%u] Mapa de canais inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:423
+#: ../src/daemon/daemon-conf.c:425
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
-msgstr "[%s:%u] Números de fragmentos inválidos \"%s\"."
+msgstr "[%s:%u] Números de fragmentos inválidos “%s”."
 
-#: ../src/daemon/daemon-conf.c:440
+#: ../src/daemon/daemon-conf.c:442
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
-msgstr "[%s:%u] Tamanho de fragmentos inválido \"%s\"."
+msgstr "[%s:%u] Tamanho de fragmentos inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:457
+#: ../src/daemon/daemon-conf.c:459
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
-msgstr "[%s:%u] Número de nice inválido \"%s\"."
+msgstr "[%s:%u] Número de nice inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:500
+#: ../src/daemon/daemon-conf.c:502
 #, c-format
 msgid "[%s:%u] Invalid server type '%s'."
-msgstr "[%s:%u] Tipo de servidor inválido \"%s\"."
+msgstr "[%s:%u] Tipo de servidor inválido “%s”."
 
-#: ../src/daemon/daemon-conf.c:613
+#: ../src/daemon/daemon-conf.c:620
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Falha em abrir o arquivo de configuração: %s"
 
-#: ../src/daemon/daemon-conf.c:629
+#: ../src/daemon/daemon-conf.c:636
 msgid ""
 "The specified default channel map has a different number of channels than "
 "the specified default number of channels."
@@ -334,111 +337,97 @@ msgstr ""
 "O mapa padrão dos canais especificado tem um número diferente de canais do "
 "que o número de canais padrão especificado."
 
-#: ../src/daemon/daemon-conf.c:716
+#: ../src/daemon/daemon-conf.c:723
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Lido do arquivo de configuração: %s ###\n"
 
-#: ../src/daemon/dumpmodules.c:59
+#: ../src/daemon/dumpmodules.c:57
 #, c-format
 msgid "Name: %s\n"
 msgstr "Nome: %s\n"
 
-#: ../src/daemon/dumpmodules.c:62
+#: ../src/daemon/dumpmodules.c:60
 #, c-format
 msgid "No module information available\n"
 msgstr "Não há informação do módulo disponível\n"
 
-#: ../src/daemon/dumpmodules.c:65
+#: ../src/daemon/dumpmodules.c:63
 #, c-format
 msgid "Version: %s\n"
 msgstr "Versão: %s\n"
 
-#: ../src/daemon/dumpmodules.c:67
+#: ../src/daemon/dumpmodules.c:65
 #, c-format
 msgid "Description: %s\n"
 msgstr "Descrição: %s\n"
 
-#: ../src/daemon/dumpmodules.c:69
+#: ../src/daemon/dumpmodules.c:67
 #, c-format
 msgid "Author: %s\n"
 msgstr "Autor: %s\n"
 
-#: ../src/daemon/dumpmodules.c:71
+#: ../src/daemon/dumpmodules.c:69
 #, c-format
 msgid "Usage: %s\n"
 msgstr "Uso: %s\n"
 
-#: ../src/daemon/dumpmodules.c:72
+#: ../src/daemon/dumpmodules.c:70
 #, c-format
 msgid "Load Once: %s\n"
 msgstr "Carrega uma vez: %s\n"
 
-#: ../src/daemon/dumpmodules.c:74
+#: ../src/daemon/dumpmodules.c:72
 #, c-format
 msgid "DEPRECATION WARNING: %s\n"
 msgstr "AVISO DE OBSOLESCÊNCIA: %s\n"
 
-#: ../src/daemon/dumpmodules.c:78
+#: ../src/daemon/dumpmodules.c:76
 #, c-format
 msgid "Path: %s\n"
 msgstr "Caminho: %s\n"
 
-#: ../src/daemon/ltdl-bind-now.c:77
+#: ../src/daemon/ltdl-bind-now.c:75
 #, c-format
 msgid "Failed to open module %s: %s"
 msgstr "Falha ao abrir o módulo %s: %s"
 
-#: ../src/daemon/ltdl-bind-now.c:128
+#: ../src/daemon/ltdl-bind-now.c:126
 msgid "Failed to find original lt_dlopen loader."
 msgstr "Falha ao localizar o carregador original lt_dlopen."
 
-#: ../src/daemon/ltdl-bind-now.c:133
+#: ../src/daemon/ltdl-bind-now.c:131
 msgid "Failed to allocate new dl loader."
 msgstr "Falha ao alocar o novo carregador dl."
 
-#: ../src/daemon/ltdl-bind-now.c:146
+#: ../src/daemon/ltdl-bind-now.c:144
 msgid "Failed to add bind-now-loader."
 msgstr "Falha ao adicionar o bind-now-loader."
 
-#: ../src/daemon/main.c:115
-#, c-format
-msgid "Got signal %s."
-msgstr "Sinal %s recebido."
-
-#: ../src/daemon/main.c:142
-msgid "Exiting."
-msgstr "Saindo."
-
 #: ../src/daemon/main.c:160
 #, c-format
 msgid "Failed to find user '%s'."
-msgstr "Falha ao localizar o usuário \"%s\"."
+msgstr "Falha ao localizar o usuário “%s”."
 
 #: ../src/daemon/main.c:165
 #, c-format
 msgid "Failed to find group '%s'."
-msgstr "Falha ao localizar o grupo \"%s\"."
-
-#: ../src/daemon/main.c:169
-#, c-format
-msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
-msgstr "Usuário \"%s\" (UID %lu) e grupo \"%s\" (GID %lu) localizados."
+msgstr "Falha ao localizar o grupo “%s”."
 
 #: ../src/daemon/main.c:174
 #, c-format
 msgid "GID of user '%s' and of group '%s' don't match."
-msgstr "O GID do usuário \"%s\" e do grupo \"%s\" não combinam."
+msgstr "O GID do usuário “%s” e do grupo “%s” não combinam."
 
 #: ../src/daemon/main.c:179
 #, c-format
 msgid "Home directory of user '%s' is not '%s', ignoring."
-msgstr "O diretório pessoal do usuário \"%s\" não é \"%s\", ignorando."
+msgstr "O diretório pessoal do usuário “%s” não é “%s”, ignorando."
 
 #: ../src/daemon/main.c:182 ../src/daemon/main.c:187
 #, c-format
 msgid "Failed to create '%s': %s"
-msgstr "Falha ao criar \"%s\": %s"
+msgstr "Falha ao criar “%s”: %s"
 
 #: ../src/daemon/main.c:194
 #, c-format
@@ -455,24 +444,15 @@ msgstr "Falha ao alterar o GID: %s"
 msgid "Failed to change UID: %s"
 msgstr "Falha ao alterar o UID: %s"
 
-#: ../src/daemon/main.c:247
-msgid "Successfully changed user to \""
-msgstr "Usuário alterado com sucesso para \""
-
 #: ../src/daemon/main.c:255
 msgid "System wide mode unsupported on this platform."
 msgstr "O modo ampliado do sistema não tem suporte nessa plataforma."
 
-#: ../src/daemon/main.c:273
-#, c-format
-msgid "setrlimit(%s, (%u, %u)) failed: %s"
-msgstr "setrlimit(%s, (%u, %u)) falhou: %s"
-
-#: ../src/daemon/main.c:466
+#: ../src/daemon/main.c:484
 msgid "Failed to parse command line."
 msgstr "Falha ao analisar a linha de comando."
 
-#: ../src/daemon/main.c:505
+#: ../src/daemon/main.c:523
 msgid ""
 "System mode refused for non-root user. Only starting the D-Bus server lookup "
 "service."
@@ -480,21 +460,12 @@ msgstr ""
 "Modo de sistema recusado para usuário não root. Apenas iniciando o serviço D-"
 "Bus de procura de servidores."
 
-#: ../src/daemon/main.c:587
-msgid "Daemon not running"
-msgstr "O daemon não está em execução"
-
-#: ../src/daemon/main.c:589
-#, c-format
-msgid "Daemon running as PID %u"
-msgstr "Daemon executando como PID %u"
-
-#: ../src/daemon/main.c:604
+#: ../src/daemon/main.c:622
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Falha ao encerrar o daemon: %s"
 
-#: ../src/daemon/main.c:633
+#: ../src/daemon/main.c:651
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -502,20 +473,20 @@ msgstr ""
 "Este programa não é para ser executado como root (a não ser que --system "
 "seja especificado)."
 
-#: ../src/daemon/main.c:636
+#: ../src/daemon/main.c:654
 msgid "Root privileges required."
 msgstr "Privilégios de root requeridos."
 
-#: ../src/daemon/main.c:643
+#: ../src/daemon/main.c:661
 msgid "--start not supported for system instances."
 msgstr "--start não tem suporte para instâncias de sistemas."
 
-#: ../src/daemon/main.c:683
+#: ../src/daemon/main.c:701
 #, c-format
 msgid "User-configured server at %s, refusing to start/autospawn."
 msgstr "Servidor configurado por usuário em %s, recusando início/autogeração."
 
-#: ../src/daemon/main.c:689
+#: ../src/daemon/main.c:707
 #, c-format
 msgid ""
 "User-configured server at %s, which appears to be local. Probing deeper."
@@ -523,220 +494,88 @@ msgstr ""
 "Servidor configurado por usuário em %s, que aparece ser local. Sondando mais "
 "fundo."
 
-#: ../src/daemon/main.c:694
-msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "Executando no modo sistema, mas --disallow-exit não foi configurado!"
+#: ../src/daemon/main.c:712
+msgid "Running in system mode, but --disallow-exit not set."
+msgstr "Executando no modo sistema, mas --disallow-exit não foi configurado."
 
-#: ../src/daemon/main.c:697
-msgid "Running in system mode, but --disallow-module-loading not set!"
+#: ../src/daemon/main.c:715
+msgid "Running in system mode, but --disallow-module-loading not set."
 msgstr ""
 "Executando no modo sistema, mas --disallow-module-loading não foi "
-"configurado!"
+"configurado."
 
-#: ../src/daemon/main.c:700
-msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr "Executando no modo sistema, desabilitando forçadamente o modo SHM!"
+#: ../src/daemon/main.c:718
+msgid "Running in system mode, forcibly disabling SHM mode."
+msgstr "Executando no modo sistema, desabilitando forçadamente o modo SHM."
 
-#: ../src/daemon/main.c:705
-msgid "Running in system mode, forcibly disabling exit idle time!"
+#: ../src/daemon/main.c:723
+msgid "Running in system mode, forcibly disabling exit idle time."
 msgstr ""
-"Executando no modo sistema, desabilitando forçadamente o exit idle time!"
+"Executando no modo sistema, desabilitando forçadamente o exit idle time."
 
-#: ../src/daemon/main.c:733
+#: ../src/daemon/main.c:756
 msgid "Failed to acquire stdio."
 msgstr "Falha em adquirir o stdio."
 
-#: ../src/daemon/main.c:739 ../src/daemon/main.c:810
+#: ../src/daemon/main.c:762 ../src/daemon/main.c:833
 #, c-format
 msgid "pipe() failed: %s"
 msgstr "pipe() falhou: %s"
 
-#: ../src/daemon/main.c:744 ../src/daemon/main.c:815
+#: ../src/daemon/main.c:767 ../src/daemon/main.c:838
 #, c-format
 msgid "fork() failed: %s"
-msgstr "O fork() falhou: %s"
+msgstr "fork() falhou: %s"
 
-#: ../src/daemon/main.c:759 ../src/daemon/main.c:830 ../src/utils/pacat.c:569
+#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:562
 #, c-format
 msgid "read() failed: %s"
-msgstr "A operação read() falhou: %s"
+msgstr "read() falhou: %s"
 
-#: ../src/daemon/main.c:765
+#: ../src/daemon/main.c:788
 msgid "Daemon startup failed."
 msgstr "Falha na partida do daemon."
 
-#: ../src/daemon/main.c:767
-msgid "Daemon startup successful."
-msgstr "Os daemons foram iniciados com sucesso."
-
-#: ../src/daemon/main.c:798
+#: ../src/daemon/main.c:821
 #, c-format
 msgid "setsid() failed: %s"
 msgstr "setsid() falhou: %s"
 
-#: ../src/daemon/main.c:884
-#, c-format
-msgid "This is PulseAudio %s"
-msgstr "Este é o PulseAudio %s"
-
-#: ../src/daemon/main.c:885
-#, c-format
-msgid "Compilation host: %s"
-msgstr "Máquina da compilação: %s"
-
-#: ../src/daemon/main.c:886 ../src/tests/resampler-test.c:418
-#, c-format
-msgid "Compilation CFLAGS: %s"
-msgstr "CFLAGS da compilação: %s"
-
-#: ../src/daemon/main.c:889
-#, c-format
-msgid "Running on host: %s"
-msgstr "Executando no host: %s"
-
-#: ../src/daemon/main.c:892
-#, c-format
-msgid "Found %u CPUs."
-msgstr "%u CPUs localizadas."
-
-#: ../src/daemon/main.c:894
-#, c-format
-msgid "Page size is %lu bytes"
-msgstr "O tamanho da página é %lu bytes"
-
-#: ../src/daemon/main.c:897
-msgid "Compiled with Valgrind support: yes"
-msgstr "Compilado com suporte do Valgrind: sim"
-
-#: ../src/daemon/main.c:899
-msgid "Compiled with Valgrind support: no"
-msgstr "Compilado com suporte do Valgrind: não"
-
-#: ../src/daemon/main.c:902
-#, c-format
-msgid "Running in valgrind mode: %s"
-msgstr "Executando em modo valgrind: %s"
-
-#: ../src/daemon/main.c:904
-#, c-format
-msgid "Running in VM: %s"
-msgstr "Executando na VM: %s"
-
-#: ../src/daemon/main.c:907
-msgid "Optimized build: yes"
-msgstr "Build otimizado: sim"
-
-#: ../src/daemon/main.c:909
-msgid "Optimized build: no"
-msgstr "Build otimizado: não"
-
-#: ../src/daemon/main.c:913
-msgid "NDEBUG defined, all asserts disabled."
-msgstr "NDEBUG definido, todas as declarações desabilitadas."
-
-#: ../src/daemon/main.c:915
-msgid "FASTPATH defined, only fast path asserts disabled."
-msgstr ""
-"FASTPATH definido, somente as declarações do \"fast path\" foram "
-"desabilitadas."
-
-#: ../src/daemon/main.c:917
-msgid "All asserts enabled."
-msgstr "Todas as declarações habilitadas."
-
-#: ../src/daemon/main.c:921
+#: ../src/daemon/main.c:948
 msgid "Failed to get machine ID"
 msgstr "Falha ao obter o ID da máquina"
 
-#: ../src/daemon/main.c:924
-#, c-format
-msgid "Machine ID is %s."
-msgstr "O ID da máquina é %s."
-
-#: ../src/daemon/main.c:928
-#, c-format
-msgid "Session ID is %s."
-msgstr "O ID da sessão é %s."
-
-#: ../src/daemon/main.c:934
-#, c-format
-msgid "Using runtime directory %s."
-msgstr "Usando o diretório de runtime %s."
-
-#: ../src/daemon/main.c:939
-#, c-format
-msgid "Using state directory %s."
-msgstr "Usando o diretório de estado %s."
-
-#: ../src/daemon/main.c:942
-#, c-format
-msgid "Using modules directory %s."
-msgstr "Usando o diretório de módulos %s."
-
-#: ../src/daemon/main.c:944
-#, c-format
-msgid "Running in system mode: %s"
-msgstr "Executando em modo do sistema: %s"
-
-#: ../src/daemon/main.c:947
+#: ../src/daemon/main.c:974
 msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
+"OK, so you are running PA in system mode. Please make sure that you actually "
+"do want to do that.\n"
 "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
 "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
 "mode is usually a bad idea."
 msgstr ""
-"OK, então você está executando o PA no modo de sistema. Por favor, note que "
-"é mais provável que você não deveria estar fazendo isso.\n"
-"Todavia, se você o fizer, então a culpa será sua se as coisas não "
-"funcionarem como esperado.\n"
-"Por favor, leia o http://www.freedesktop.org/wiki/Software/PulseAudio/"
+"OK, então você está executando o PA no modo de sistema. Por favor, "
+"certifique-se de que você realmente deseja fazer isso.\n"
+"Por favor, leia http://www.freedesktop.org/wiki/Software/PulseAudio/"
 "Documentation/User/WhatIsWrongWithSystemWide/ para obter um explicação sobre "
 "porque o modo de sistema é uma má ideia."
 
-#: ../src/daemon/main.c:964
+#: ../src/daemon/main.c:990
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() falhou."
 
-#: ../src/daemon/main.c:974
-msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr "Timers de alta resolução fresquinhos disponíveis! Bon appetit!"
-
-#: ../src/daemon/main.c:976
-msgid ""
-"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
-"resolution timers enabled!"
-msgstr ""
-"Cara, seu kernel fede! A recomendação do chef hoje é Linux com timers de "
-"alta resolução habilitados!"
-
-#: ../src/daemon/main.c:994
+#: ../src/daemon/main.c:1022
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() falhou."
 
-#: ../src/daemon/main.c:1068
+#: ../src/daemon/main.c:1092
 msgid "Failed to initialize daemon."
 msgstr "Falha em iniciar o daemon."
 
-#: ../src/daemon/main.c:1073
+#: ../src/daemon/main.c:1097
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr ""
 "O Daemon iniciou sem qualquer módulo carregado, recusando-se a trabalhar."
 
-#: ../src/daemon/main.c:1111
-msgid "Daemon startup complete."
-msgstr "A inicialização do daemon foi concluída."
-
-#: ../src/daemon/main.c:1117
-msgid "Daemon shutdown initiated."
-msgstr "O encerramento do daemon foi iniciado."
-
-#: ../src/daemon/main.c:1143
-msgid "Daemon terminated."
-msgstr "Daemon terminado."
-
 #: ../src/daemon/pulseaudio.desktop.in.h:1
 msgid "PulseAudio Sound System"
 msgstr "Sistema de som PulseAudio"
@@ -745,266 +584,301 @@ msgstr "Sistema de som PulseAudio"
 msgid "Start the PulseAudio Sound System"
 msgstr "Iniciar o sistema de som PulseAudio"
 
-#: ../src/modules/alsa/alsa-mixer.c:2251
+#: ../src/modules/alsa/alsa-mixer.c:2378
 msgid "Input"
 msgstr "Entrada"
 
-#: ../src/modules/alsa/alsa-mixer.c:2252
+#: ../src/modules/alsa/alsa-mixer.c:2379
 msgid "Docking Station Input"
 msgstr "Entrada da base de encaixe"
 
-#: ../src/modules/alsa/alsa-mixer.c:2253
+#: ../src/modules/alsa/alsa-mixer.c:2380
 msgid "Docking Station Microphone"
 msgstr "Microfone de estação de base de encaixe"
 
-#: ../src/modules/alsa/alsa-mixer.c:2254
+#: ../src/modules/alsa/alsa-mixer.c:2381
 msgid "Docking Station Line In"
 msgstr "Entrada de linha de estação de base de encaixe"
 
-#: ../src/modules/alsa/alsa-mixer.c:2255 ../src/modules/alsa/alsa-mixer.c:2340
+#: ../src/modules/alsa/alsa-mixer.c:2382 ../src/modules/alsa/alsa-mixer.c:2467
 msgid "Line In"
 msgstr "Entrada de linha"
 
-#: ../src/modules/alsa/alsa-mixer.c:2256 ../src/modules/alsa/alsa-mixer.c:2334
-#: ../src/modules/bluetooth/module-bluez4-device.c:2101
-#: ../src/modules/bluetooth/module-bluez5-device.c:1446
+#: ../src/modules/alsa/alsa-mixer.c:2383 ../src/modules/alsa/alsa-mixer.c:2461
+#: ../src/modules/bluetooth/module-bluez4-device.c:2103
+#: ../src/modules/bluetooth/module-bluez5-device.c:1716
 msgid "Microphone"
 msgstr "Microfone"
 
-#: ../src/modules/alsa/alsa-mixer.c:2257 ../src/modules/alsa/alsa-mixer.c:2335
+#: ../src/modules/alsa/alsa-mixer.c:2384 ../src/modules/alsa/alsa-mixer.c:2462
 msgid "Front Microphone"
 msgstr "Microfone frontal"
 
-#: ../src/modules/alsa/alsa-mixer.c:2258 ../src/modules/alsa/alsa-mixer.c:2336
+#: ../src/modules/alsa/alsa-mixer.c:2385 ../src/modules/alsa/alsa-mixer.c:2463
 msgid "Rear Microphone"
 msgstr "Microfone posterior"
 
-#: ../src/modules/alsa/alsa-mixer.c:2259
+#: ../src/modules/alsa/alsa-mixer.c:2386
 msgid "External Microphone"
 msgstr "Microfone externo"
 
-#: ../src/modules/alsa/alsa-mixer.c:2260 ../src/modules/alsa/alsa-mixer.c:2338
+#: ../src/modules/alsa/alsa-mixer.c:2387 ../src/modules/alsa/alsa-mixer.c:2465
 msgid "Internal Microphone"
 msgstr "Microfone interno"
 
-#: ../src/modules/alsa/alsa-mixer.c:2261 ../src/modules/alsa/alsa-mixer.c:2341
+#: ../src/modules/alsa/alsa-mixer.c:2388 ../src/modules/alsa/alsa-mixer.c:2468
 msgid "Radio"
 msgstr "Rádio"
 
-#: ../src/modules/alsa/alsa-mixer.c:2262 ../src/modules/alsa/alsa-mixer.c:2342
+#: ../src/modules/alsa/alsa-mixer.c:2389 ../src/modules/alsa/alsa-mixer.c:2469
 msgid "Video"
 msgstr "Vídeo"
 
 # https://pt.wikipedia.org/wiki/Controle_autom%C3%A1tico_de_ganho
-#: ../src/modules/alsa/alsa-mixer.c:2263
+#: ../src/modules/alsa/alsa-mixer.c:2390
 msgid "Automatic Gain Control"
 msgstr "Controle automático de ganho"
 
 # https://pt.wikipedia.org/wiki/Controle_autom%C3%A1tico_de_ganho
-#: ../src/modules/alsa/alsa-mixer.c:2264
+#: ../src/modules/alsa/alsa-mixer.c:2391
 msgid "No Automatic Gain Control"
 msgstr "Sem controle automático de ganho"
 
 # Este contexto de Boost é "reforço" no áudio, e não "impulso".
-#: ../src/modules/alsa/alsa-mixer.c:2265
+#: ../src/modules/alsa/alsa-mixer.c:2392
 msgid "Boost"
 msgstr "Reforço"
 
 # Este contexto de Boost é "reforço" no áudio, e não "impulso".
-#: ../src/modules/alsa/alsa-mixer.c:2266
+#: ../src/modules/alsa/alsa-mixer.c:2393
 msgid "No Boost"
 msgstr "Sem reforço"
 
-#: ../src/modules/alsa/alsa-mixer.c:2267
+#: ../src/modules/alsa/alsa-mixer.c:2394
 msgid "Amplifier"
 msgstr "Amplificador"
 
-#: ../src/modules/alsa/alsa-mixer.c:2268
+#: ../src/modules/alsa/alsa-mixer.c:2395
 msgid "No Amplifier"
 msgstr "Sem amplificador"
 
 # Este contexto de Boost é "reforço" no áudio, e não "impulso".
-#: ../src/modules/alsa/alsa-mixer.c:2269
+#: ../src/modules/alsa/alsa-mixer.c:2396
 msgid "Bass Boost"
 msgstr "Reforço de graves"
 
 # Este contexto de Boost é "reforço" no áudio, e não "impulso".
-#: ../src/modules/alsa/alsa-mixer.c:2270
+#: ../src/modules/alsa/alsa-mixer.c:2397
 msgid "No Bass Boost"
 msgstr "Sem reforço de graves"
 
-#: ../src/modules/alsa/alsa-mixer.c:2271
-#: ../src/modules/bluetooth/module-bluez4-device.c:2106
-#: ../src/modules/bluetooth/module-bluez5-device.c:1453
+#: ../src/modules/alsa/alsa-mixer.c:2398
+#: ../src/modules/bluetooth/module-bluez4-device.c:2108
+#: ../src/modules/bluetooth/module-bluez5-device.c:1723
 msgid "Speaker"
 msgstr "Auto-falante"
 
-#: ../src/modules/alsa/alsa-mixer.c:2272 ../src/modules/alsa/alsa-mixer.c:2344
+#: ../src/modules/alsa/alsa-mixer.c:2399 ../src/modules/alsa/alsa-mixer.c:2471
 msgid "Headphones"
 msgstr "Fones de ouvidos"
 
-#: ../src/modules/alsa/alsa-mixer.c:2333
+#: ../src/modules/alsa/alsa-mixer.c:2460
 msgid "Analog Input"
 msgstr "Entrada analógica"
 
-#: ../src/modules/alsa/alsa-mixer.c:2337
+#: ../src/modules/alsa/alsa-mixer.c:2464
 msgid "Dock Microphone"
 msgstr "Microfone de base de encaixe"
 
-#: ../src/modules/alsa/alsa-mixer.c:2339
+#: ../src/modules/alsa/alsa-mixer.c:2466
 msgid "Headset Microphone"
 msgstr "Microfone de headset"
 
-#: ../src/modules/alsa/alsa-mixer.c:2343
+#: ../src/modules/alsa/alsa-mixer.c:2470
 msgid "Analog Output"
 msgstr "Saída analógica"
 
-#: ../src/modules/alsa/alsa-mixer.c:2345
+#: ../src/modules/alsa/alsa-mixer.c:2472
 msgid "LFE on Separate Mono Output"
 msgstr "Saída monofônica separada em LFE"
 
-#: ../src/modules/alsa/alsa-mixer.c:2346
+#: ../src/modules/alsa/alsa-mixer.c:2473
 msgid "Line Out"
 msgstr "Saída de linha"
 
-#: ../src/modules/alsa/alsa-mixer.c:2347
+#: ../src/modules/alsa/alsa-mixer.c:2474
 msgid "Analog Mono Output"
 msgstr "Saída analógica monofônica"
 
-#: ../src/modules/alsa/alsa-mixer.c:2348
+#: ../src/modules/alsa/alsa-mixer.c:2475
 msgid "Speakers"
 msgstr "Alto-falantes"
 
-#: ../src/modules/alsa/alsa-mixer.c:2349
+#: ../src/modules/alsa/alsa-mixer.c:2476
 msgid "HDMI / DisplayPort"
 msgstr "HDMI / DisplayPort"
 
-#: ../src/modules/alsa/alsa-mixer.c:2350
+#: ../src/modules/alsa/alsa-mixer.c:2477
 msgid "Digital Output (S/PDIF)"
 msgstr "Saída digital (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2351
+#: ../src/modules/alsa/alsa-mixer.c:2478
 msgid "Digital Input (S/PDIF)"
 msgstr "Entrada digital (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2352
+#: ../src/modules/alsa/alsa-mixer.c:2479
 msgid "Digital Passthrough (S/PDIF)"
 msgstr "Conversor digital (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3807
+#: ../src/modules/alsa/alsa-mixer.c:2480
+msgid "Multichannel Input"
+msgstr "Entrada multicanal"
+
+#: ../src/modules/alsa/alsa-mixer.c:2481
+msgid "Multichannel Output"
+msgstr "Saída multicanal"
+
+#: ../src/modules/alsa/alsa-mixer.c:3990
 msgid "Analog Mono"
 msgstr "Monofônico analógico"
 
-#: ../src/modules/alsa/alsa-mixer.c:3808
+#. Note: Not translated to "Analog Stereo Input", because the source
+#. * name gets "Input" appended to it automatically, so adding "Input"
+#. * here would lead to the source name to become "Analog Stereo Input
+#. * Input". The same logic applies to analog-stereo-output,
+#. * multichannel-input and multichannel-output.
+#: ../src/modules/alsa/alsa-mixer.c:3991 ../src/modules/alsa/alsa-mixer.c:3997
+#: ../src/modules/alsa/alsa-mixer.c:3998
 msgid "Analog Stereo"
 msgstr "Estéreo analógico"
 
-#: ../src/modules/alsa/alsa-mixer.c:3809
+#: ../src/modules/alsa/alsa-mixer.c:3999 ../src/modules/alsa/alsa-mixer.c:4000
+msgid "Multichannel"
+msgstr "Multicanal"
+
+#: ../src/modules/alsa/alsa-mixer.c:4001
 msgid "Analog Surround 2.1"
 msgstr "Surround analógico 2.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3810
+#: ../src/modules/alsa/alsa-mixer.c:4002
 msgid "Analog Surround 3.0"
 msgstr "Surround analógico 3.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3811
+#: ../src/modules/alsa/alsa-mixer.c:4003
 msgid "Analog Surround 3.1"
 msgstr "Surround analógico 3.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3812
+#: ../src/modules/alsa/alsa-mixer.c:4004
 msgid "Analog Surround 4.0"
 msgstr "Surround analógico 4.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3813
+#: ../src/modules/alsa/alsa-mixer.c:4005
 msgid "Analog Surround 4.1"
 msgstr "Surround analógico 4.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3814
+#: ../src/modules/alsa/alsa-mixer.c:4006
 msgid "Analog Surround 5.0"
 msgstr "Surround analógico 5.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3815
+#: ../src/modules/alsa/alsa-mixer.c:4007
 msgid "Analog Surround 5.1"
 msgstr "Surround analógico 5.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3816
+#: ../src/modules/alsa/alsa-mixer.c:4008
 msgid "Analog Surround 6.0"
 msgstr "Surround analógico 6.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3817
+#: ../src/modules/alsa/alsa-mixer.c:4009
 msgid "Analog Surround 6.1"
 msgstr "Surround analógico 6.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3818
+#: ../src/modules/alsa/alsa-mixer.c:4010
 msgid "Analog Surround 7.0"
 msgstr "Surround analógico 7.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3819
+#: ../src/modules/alsa/alsa-mixer.c:4011
 msgid "Analog Surround 7.1"
 msgstr "Surround analógico 7.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3820
-msgid "Analog 4-channel Input"
-msgstr "Entrada analógica de 4 canais"
-
-#: ../src/modules/alsa/alsa-mixer.c:3821
+#: ../src/modules/alsa/alsa-mixer.c:4012
 msgid "Digital Stereo (IEC958)"
 msgstr "Estéreo digital (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3822
+#: ../src/modules/alsa/alsa-mixer.c:4013
 msgid "Digital Passthrough  (IEC958)"
 msgstr "Conversor digital (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3823
+#: ../src/modules/alsa/alsa-mixer.c:4014
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr "Surround digital 4.0 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3824
+#: ../src/modules/alsa/alsa-mixer.c:4015
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr "Surround digital 5.1 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3825
+#: ../src/modules/alsa/alsa-mixer.c:4016
 msgid "Digital Surround 5.1 (IEC958/DTS)"
 msgstr "Surround digital 5.1 (IEC958/DTS)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3826
+#: ../src/modules/alsa/alsa-mixer.c:4017
 msgid "Digital Stereo (HDMI)"
 msgstr "Estéreo digital (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3827
+#: ../src/modules/alsa/alsa-mixer.c:4018
 msgid "Digital Surround 5.1 (HDMI)"
 msgstr "Surround digital 5.1 (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3956
+#: ../src/modules/alsa/alsa-mixer.c:4151
 msgid "Analog Mono Duplex"
 msgstr "Duplex monofônico analógico"
 
-#: ../src/modules/alsa/alsa-mixer.c:3957
+#: ../src/modules/alsa/alsa-mixer.c:4152
 msgid "Analog Stereo Duplex"
 msgstr "Duplex estéreo analógico"
 
-#: ../src/modules/alsa/alsa-mixer.c:3958
+#: ../src/modules/alsa/alsa-mixer.c:4153
 msgid "Digital Stereo Duplex (IEC958)"
 msgstr "Duplex estéreo digital (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3959
-#: ../src/modules/alsa/module-alsa-card.c:193
-#: ../src/modules/bluetooth/module-bluez4-device.c:2297
-#: ../src/modules/bluetooth/module-bluez5-device.c:1649
+#: ../src/modules/alsa/alsa-mixer.c:4154
+msgid "Multichannel Duplex"
+msgstr "Duplex multicanal"
+
+#: ../src/modules/alsa/alsa-mixer.c:4155
+#: ../src/modules/alsa/module-alsa-card.c:186
+#: ../src/modules/bluetooth/module-bluez4-device.c:2323
+#: ../src/modules/bluetooth/module-bluez5-device.c:1971
 msgid "Off"
 msgstr "Desligado"
 
-#: ../src/modules/alsa/alsa-mixer.c:4058
+#: ../src/modules/alsa/alsa-mixer.c:4254
 #, c-format
 msgid "%s Output"
 msgstr "Saída de %s"
 
-#: ../src/modules/alsa/alsa-mixer.c:4066
+#: ../src/modules/alsa/alsa-mixer.c:4262
 #, c-format
 msgid "%s Input"
 msgstr "Entrada de %s"
 
-#: ../src/modules/alsa/alsa-sink.c:570 ../src/modules/alsa/alsa-sink.c:748
+#: ../src/modules/alsa/alsa-sink.c:570
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write.\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"O ALSA nos acordou para gravar novos dados no dispositivo, mas não há nada a "
+"ser gravado.\n"
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
+"relate esse problema para os desenvolvedores do ALSA.\n"
+"Nós fomos acordados com o conjunto POLLOUT -- entretanto, a snd_pcm_avail() "
+"subsequente retornou 0 ou outro valor < min_avail."
+
+#: ../src/modules/alsa/alsa-sink.c:747
 #, c-format
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
@@ -1016,12 +890,29 @@ msgid ""
 msgstr ""
 "O ALSA nos acordou para gravar novos dados no dispositivo, mas não há nada a "
 "ser gravado!\n"
-"É mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
 "relate esse problema para os desenvolvedores do ALSA.\n"
 "Nós fomos acordados com o conjunto POLLOUT -- entretanto, a snd_pcm_avail() "
 "subsequente retornou 0 ou outro valor < min_avail."
 
-#: ../src/modules/alsa/alsa-source.c:529 ../src/modules/alsa/alsa-source.c:681
+#: ../src/modules/alsa/alsa-source.c:529
+#, c-format
+msgid ""
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read.\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"O ALSA nos acordou para ler novos dados no dispositivo, mas não há nada a "
+"ser lido.\n"
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
+"relate esse problema para os desenvolvedores do ALSA.\n"
+"Nós fomos acordados com o conjunto POLLIN -- entretanto, a snd_pcm_avail() "
+"subsequente retornou 0 ou outro valor < min_avail."
+
+#: ../src/modules/alsa/alsa-source.c:680
 #, c-format
 msgid ""
 "ALSA woke us up to read new data from the device, but there was actually "
@@ -1033,12 +924,12 @@ msgid ""
 msgstr ""
 "O ALSA nos acordou para ler novos dados no dispositivo, mas não há nada a "
 "ser lido!\n"
-"É mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
 "relate esse problema para os desenvolvedores do ALSA.\n"
 "Nós fomos acordados com o conjunto POLLIN -- entretanto, a snd_pcm_avail() "
 "subsequente retornou 0 ou outro valor < min_avail."
 
-#: ../src/modules/alsa/alsa-util.c:1135 ../src/modules/alsa/alsa-util.c:1210
+#: ../src/modules/alsa/alsa-util.c:1168 ../src/modules/alsa/alsa-util.c:1243
 #, c-format
 msgid ""
 "snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -1046,12 +937,12 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"O snd_pcm_avail() retornou um valor que é excepcionalmente grande: %lu bytes "
+"snd_pcm_avail() retornou um valor que é excepcionalmente grande: %lu bytes "
 "(%lu ms).\n"
-"É mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
 "relate esse problema aos desenvolvedores do ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1185
+#: ../src/modules/alsa/alsa-util.c:1218
 #, c-format
 msgid ""
 "snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s"
@@ -1059,12 +950,12 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"O snd_pcm_delay() retornou um valor que é excepcionalmente grande: %li bytes "
+"snd_pcm_delay() retornou um valor que é excepcionalmente grande: %li bytes "
 "(%s%lu ms).\n"
-"É mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
 "relate esse problema aos desenvolvedores do ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1226
+#: ../src/modules/alsa/alsa-util.c:1259
 #, c-format
 msgid ""
 "snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
@@ -1072,12 +963,12 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"O snd_pcm_avail() retornou um valor estranho: o atraso de %lu é menor do que "
+"snd_pcm_avail() retornou um valor estranho: o atraso de %lu é menor do que "
 "(%lu ms).\n"
-"É mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
 "relate esse problema aos desenvolvedores do ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1269
+#: ../src/modules/alsa/alsa-util.c:1302
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -1085,88 +976,96 @@ msgid ""
 "Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
-"O snd_pcm_mmap_begin() retornou um valor que é excepcionalmente grande: %lu "
+"snd_pcm_mmap_begin() retornou um valor que é excepcionalmente grande: %lu "
 "bytes (%lu ms).\n"
-"É mais provável que isso seja um erro no driver \"%s\" do ALSA. Por favor, "
+"É mais provável que isso seja um erro no driver “%s” do ALSA. Por favor, "
 "relate esse problema aos desenvolvedores do ALSA."
 
 # Fone de ouvido não se encaixa como tradução aqui, pois há ou pode haver microfone junto.
-#: ../src/modules/bluetooth/module-bluez4-device.c:2091
-#: ../src/modules/bluetooth/module-bluez5-device.c:1436
+#: ../src/modules/bluetooth/module-bluez4-device.c:2093
+#: ../src/modules/bluetooth/module-bluez5-device.c:1706
 msgid "Headset"
 msgstr "Headset"
 
 # Desconheço tradução comum para esta palavra.
-#: ../src/modules/bluetooth/module-bluez4-device.c:2096
-#: ../src/modules/bluetooth/module-bluez5-device.c:1441
+#: ../src/modules/bluetooth/module-bluez4-device.c:2098
+#: ../src/modules/bluetooth/module-bluez5-device.c:1711
 msgid "Handsfree"
 msgstr "Handsfree"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2111
-#: ../src/modules/bluetooth/module-bluez5-device.c:1459
+#: ../src/modules/bluetooth/module-bluez4-device.c:2113
+#: ../src/modules/bluetooth/module-bluez5-device.c:1729
 msgid "Headphone"
 msgstr "Fones de ouvido"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2116
-#: ../src/modules/bluetooth/module-bluez5-device.c:1464
+#: ../src/modules/bluetooth/module-bluez4-device.c:2118
+#: ../src/modules/bluetooth/module-bluez5-device.c:1734
 msgid "Portable"
 msgstr "Portátil"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2121
-#: ../src/modules/bluetooth/module-bluez5-device.c:1469
+#: ../src/modules/bluetooth/module-bluez4-device.c:2123
+#: ../src/modules/bluetooth/module-bluez5-device.c:1739
 msgid "Car"
 msgstr "Carro"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2126
-#: ../src/modules/bluetooth/module-bluez5-device.c:1474
+#: ../src/modules/bluetooth/module-bluez4-device.c:2128
+#: ../src/modules/bluetooth/module-bluez5-device.c:1744
 msgid "HiFi"
 msgstr "HiFi"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2131
-#: ../src/modules/bluetooth/module-bluez5-device.c:1479
+#: ../src/modules/bluetooth/module-bluez4-device.c:2133
+#: ../src/modules/bluetooth/module-bluez5-device.c:1749
 msgid "Phone"
 msgstr "Telefone"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2139
-#: ../src/modules/bluetooth/module-bluez5-device.c:1431
-#: ../src/modules/bluetooth/module-bluez5-device.c:1447
-#: ../src/modules/bluetooth/module-bluez5-device.c:1485
+#: ../src/modules/bluetooth/module-bluez4-device.c:2141
+#: ../src/modules/bluetooth/module-bluez5-device.c:1701
+#: ../src/modules/bluetooth/module-bluez5-device.c:1717
+#: ../src/modules/bluetooth/module-bluez5-device.c:1755
 msgid "Bluetooth Output"
 msgstr "Saída Bluetooth"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2142
-#: ../src/modules/bluetooth/module-bluez5-device.c:1430
-#: ../src/modules/bluetooth/module-bluez5-device.c:1452
-#: ../src/modules/bluetooth/module-bluez5-device.c:1458
-#: ../src/modules/bluetooth/module-bluez5-device.c:1484
+#: ../src/modules/bluetooth/module-bluez4-device.c:2144
+#: ../src/modules/bluetooth/module-bluez5-device.c:1700
+#: ../src/modules/bluetooth/module-bluez5-device.c:1722
+#: ../src/modules/bluetooth/module-bluez5-device.c:1728
+#: ../src/modules/bluetooth/module-bluez5-device.c:1754
 msgid "Bluetooth Input"
 msgstr "Entrada Bluetooth"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2178
+#: ../src/modules/bluetooth/module-bluez4-device.c:2185
 msgid "High Fidelity Playback (A2DP)"
 msgstr "Reprodução de alta fidelidade (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2189
+#: ../src/modules/bluetooth/module-bluez4-device.c:2197
 msgid "High Fidelity Capture (A2DP)"
 msgstr "Captura de alta fidelidade (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2200
+#: ../src/modules/bluetooth/module-bluez4-device.c:2209
 msgid "Telephony Duplex (HSP/HFP)"
 msgstr "Duplex telefônico (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2212
+#: ../src/modules/bluetooth/module-bluez4-device.c:2222
 msgid "Handsfree Gateway"
 msgstr "Gateway de handsfree"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1522
+#: ../src/modules/bluetooth/module-bluez5-device.c:1796
 msgid "High Fidelity Playback (A2DP Sink)"
 msgstr "Reprodução de alta fidelidade (Destino A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1533
+#: ../src/modules/bluetooth/module-bluez5-device.c:1808
 msgid "High Fidelity Capture (A2DP Source)"
 msgstr "Captura de alta fidelidade (Fonte A2DP)"
 
-#: ../src/modules/echo-cancel/module-echo-cancel.c:63
+#: ../src/modules/bluetooth/module-bluez5-device.c:1820
+msgid "Headset Head Unit (HSP/HFP)"
+msgstr "Unidade de headset (HSP/HFP)"
+
+#: ../src/modules/bluetooth/module-bluez5-device.c:1833
+msgid "Headset Audio Gateway (HSP/HFP)"
+msgstr "Gateway de Áudio do Headset (HSP/HFP)"
+
+#: ../src/modules/echo-cancel/module-echo-cancel.c:61
 msgid ""
 "source_name=<name for the source> source_properties=<properties for the "
 "source> source_master=<name of source to filter> sink_name=<name for the "
@@ -1176,7 +1075,8 @@ msgid ""
 "rate> channels=<number of channels> channel_map=<channel map> "
 "aec_method=<implementation to use> aec_args=<parameters for the AEC engine> "
 "save_aec=<save AEC data in /tmp> autoloaded=<set if this module is being "
-"loaded automatically> use_volume_sharing=<yes or no> "
+"loaded automatically> use_volume_sharing=<yes or no> use_master_format=<yes "
+"or no> "
 msgstr ""
 "source_name=<nome da fonte> source_properties=<propriedades da fonte> "
 "source_master=<nome de fonte para filtrar> sink_name=<nome do destino> "
@@ -1187,26 +1087,28 @@ msgstr ""
 "channels=<número de canais> channel_map=<mapa do canal> "
 "aec_method=<implementar para usar> aec_args=<parâmetros do mecanismo AEC> "
 "save_aec=<salvar dados AEC em /tmp> autoloaded=<define se este módulo está "
-"sendo carregado automaticamente> use_volume_sharing=<sim ou não> "
+"sendo carregado automaticamente> use_volume_sharing=<yes ou no> "
+"use_master_format=<yes ou no> "
 
 #. add on profile
-#: ../src/modules/macosx/module-coreaudio-device.c:756
+#: ../src/modules/macosx/module-coreaudio-device.c:811
 msgid "On"
 msgstr "Ligado"
 
-#: ../src/modules/module-always-sink.c:38
-msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "Sempre manter pelo menos um destino carregado mesmo se for nulo"
-
+#: ../src/modules/module-allow-passthrough.c:73
 #: ../src/modules/module-always-sink.c:82
 msgid "Dummy Output"
 msgstr "Saída fictícia"
 
-#: ../src/modules/module-equalizer-sink.c:72
+#: ../src/modules/module-always-sink.c:36
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr "Sempre manter pelo menos um destino carregado mesmo se for nulo"
+
+#: ../src/modules/module-equalizer-sink.c:70
 msgid "General Purpose Equalizer"
 msgstr "Equalizador de propósito geral"
 
-#: ../src/modules/module-equalizer-sink.c:76
+#: ../src/modules/module-equalizer-sink.c:74
 msgid ""
 "sink_name=<name of the sink> sink_properties=<properties for the sink> "
 "sink_master=<sink to connect to> format=<sample format> rate=<sample rate> "
@@ -1217,17 +1119,17 @@ msgstr ""
 "master=<nome do destino a ser filtrado> format=<formato de amostragem> "
 "rate=<taxa da amostragem> channels=<número de canais> channel_map=<mapa dos "
 "canais> autoloaded=<define se este módulo está sendo carregado "
-"automaticamente> use_volume_sharing=<sim ou não> "
+"automaticamente> use_volume_sharing=<yes ou no> "
 
-#: ../src/modules/module-filter-apply.c:48
+#: ../src/modules/module-filter-apply.c:47
 msgid "autoclean=<automatically unload unused filters?>"
 msgstr "autoclean=<descarregar automaticamente filtros não usados?>"
 
-#: ../src/modules/module-ladspa-sink.c:53
+#: ../src/modules/module-ladspa-sink.c:51
 msgid "Virtual LADSPA sink"
 msgstr "Destino Virtual LADSPA"
 
-#: ../src/modules/module-ladspa-sink.c:57
+#: ../src/modules/module-ladspa-sink.c:55
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
 "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
@@ -1246,49 +1148,49 @@ msgstr ""
 "de entrada LADSPA> output_ladspaport_map=<lista separada por vírgulas de "
 "nomes de porta de saída LADSPA> "
 
-#: ../src/modules/module-null-sink.c:49
+#: ../src/modules/module-null-sink.c:47
 msgid "Clocked NULL sink"
 msgstr "Destino nulo temporizado"
 
-#: ../src/modules/module-null-sink.c:280
+#: ../src/modules/module-null-sink.c:284
 msgid "Null Output"
 msgstr "Saída nula"
 
-#: ../src/modules/module-rygel-media-server.c:510
-#: ../src/modules/module-rygel-media-server.c:548
-#: ../src/modules/module-rygel-media-server.c:907
+#: ../src/modules/module-rygel-media-server.c:508
+#: ../src/modules/module-rygel-media-server.c:546
+#: ../src/modules/module-rygel-media-server.c:905
 msgid "Output Devices"
 msgstr "Dispositivos de saída"
 
-#: ../src/modules/module-rygel-media-server.c:511
-#: ../src/modules/module-rygel-media-server.c:549
-#: ../src/modules/module-rygel-media-server.c:908
+#: ../src/modules/module-rygel-media-server.c:509
+#: ../src/modules/module-rygel-media-server.c:547
+#: ../src/modules/module-rygel-media-server.c:906
 msgid "Input Devices"
 msgstr "Dispositivos de entrada"
 
-#: ../src/modules/module-rygel-media-server.c:1065
+#: ../src/modules/module-rygel-media-server.c:1063
 msgid "Audio on @HOSTNAME@"
 msgstr "Áudio em @HOSTNAME@"
 
 #. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis at lazus'
 #. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis at lazus'
-#: ../src/modules/module-tunnel-sink-new.c:293
-#: ../src/modules/module-tunnel-source-new.c:294
+#: ../src/modules/module-tunnel-sink-new.c:307
+#: ../src/modules/module-tunnel-source-new.c:305
 #, c-format
 msgid "Tunnel for %s@%s"
 msgstr "Túnel para %s@%s"
 
-#: ../src/modules/module-tunnel-sink-new.c:483
-#: ../src/modules/module-tunnel-source-new.c:485
+#: ../src/modules/module-tunnel-sink-new.c:521
+#: ../src/modules/module-tunnel-source-new.c:520
 #, c-format
 msgid "Tunnel to %s/%s"
 msgstr "Túnel para %s/%s"
 
-#: ../src/modules/module-virtual-surround-sink.c:49
+#: ../src/modules/module-virtual-surround-sink.c:47
 msgid "Virtual surround sink"
 msgstr "Destino surround virtual"
 
-#: ../src/modules/module-virtual-surround-sink.c:53
+#: ../src/modules/module-virtual-surround-sink.c:51
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
 "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
@@ -1299,718 +1201,658 @@ msgstr ""
 "sink_name=<nome do destino> sink_properties=<propriedades do destino> "
 "master=<nome do destino a ser filtrado> format=<formato de amostragem> "
 "rate=<taxa da amostragem> channels=<número de canais> channel_map=<mapa dos "
-"canais> use_volume_sharing=<sim ou não> force_flat_volume=<sim ou não> hrir=/"
+"canais> use_volume_sharing=<yes ou no> force_flat_volume=<yes ou no> hrir=/"
 "caminho/para/hrir_esquerdo.wav "
 
-#: ../src/modules/reserve-wrap.c:151
+#: ../src/modules/reserve-wrap.c:149
 msgid "PulseAudio Sound Server"
 msgstr "Servidor de som PulseAudio"
 
-#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:760
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:771
 msgid "Mono"
 msgstr "Mono"
 
-#: ../src/pulse/channelmap.c:107
+#: ../src/pulse/channelmap.c:105
 msgid "Front Center"
 msgstr "Frontal central"
 
-#: ../src/pulse/channelmap.c:108
+#: ../src/pulse/channelmap.c:106
 msgid "Front Left"
 msgstr "Frontal esquerdo"
 
-#: ../src/pulse/channelmap.c:109
+#: ../src/pulse/channelmap.c:107
 msgid "Front Right"
 msgstr "Frontal direito"
 
-#: ../src/pulse/channelmap.c:111
+#: ../src/pulse/channelmap.c:109
 msgid "Rear Center"
 msgstr "Posterior central"
 
-#: ../src/pulse/channelmap.c:112
+#: ../src/pulse/channelmap.c:110
 msgid "Rear Left"
 msgstr "Posterior esquerdo"
 
-#: ../src/pulse/channelmap.c:113
+#: ../src/pulse/channelmap.c:111
 msgid "Rear Right"
 msgstr "Posterior direito"
 
-#: ../src/pulse/channelmap.c:115
+#: ../src/pulse/channelmap.c:113
 msgid "Subwoofer"
 msgstr "Subwoofer"
 
-#: ../src/pulse/channelmap.c:117
+#: ../src/pulse/channelmap.c:115
 msgid "Front Left-of-center"
 msgstr "Frontal esquerdo do centro"
 
-#: ../src/pulse/channelmap.c:118
+#: ../src/pulse/channelmap.c:116
 msgid "Front Right-of-center"
 msgstr "Frontal direito do centro"
 
-#: ../src/pulse/channelmap.c:120
+#: ../src/pulse/channelmap.c:118
 msgid "Side Left"
 msgstr "Lateral esquerdo"
 
-#: ../src/pulse/channelmap.c:121
+#: ../src/pulse/channelmap.c:119
 msgid "Side Right"
 msgstr "Lateral direito"
 
-#: ../src/pulse/channelmap.c:123
+#: ../src/pulse/channelmap.c:121
 msgid "Auxiliary 0"
 msgstr "Auxiliar 0"
 
-#: ../src/pulse/channelmap.c:124
+#: ../src/pulse/channelmap.c:122
 msgid "Auxiliary 1"
 msgstr "Auxiliar 1"
 
-#: ../src/pulse/channelmap.c:125
+#: ../src/pulse/channelmap.c:123
 msgid "Auxiliary 2"
 msgstr "Auxiliar 2"
 
-#: ../src/pulse/channelmap.c:126
+#: ../src/pulse/channelmap.c:124
 msgid "Auxiliary 3"
 msgstr "Auxiliar 3"
 
-#: ../src/pulse/channelmap.c:127
+#: ../src/pulse/channelmap.c:125
 msgid "Auxiliary 4"
 msgstr "Auxiliar 4"
 
-#: ../src/pulse/channelmap.c:128
+#: ../src/pulse/channelmap.c:126
 msgid "Auxiliary 5"
 msgstr "Auxiliar 5"
 
-#: ../src/pulse/channelmap.c:129
+#: ../src/pulse/channelmap.c:127
 msgid "Auxiliary 6"
 msgstr "Auxiliar 6"
 
-#: ../src/pulse/channelmap.c:130
+#: ../src/pulse/channelmap.c:128
 msgid "Auxiliary 7"
 msgstr "Auxiliar 7"
 
-#: ../src/pulse/channelmap.c:131
+#: ../src/pulse/channelmap.c:129
 msgid "Auxiliary 8"
 msgstr "Auxiliar 8"
 
-#: ../src/pulse/channelmap.c:132
+#: ../src/pulse/channelmap.c:130
 msgid "Auxiliary 9"
 msgstr "Auxiliar 9"
 
-#: ../src/pulse/channelmap.c:133
+#: ../src/pulse/channelmap.c:131
 msgid "Auxiliary 10"
 msgstr "Auxiliar 10"
 
-#: ../src/pulse/channelmap.c:134
+#: ../src/pulse/channelmap.c:132
 msgid "Auxiliary 11"
 msgstr "Auxiliar 11"
 
-#: ../src/pulse/channelmap.c:135
+#: ../src/pulse/channelmap.c:133
 msgid "Auxiliary 12"
 msgstr "Auxiliar 12"
 
-#: ../src/pulse/channelmap.c:136
+#: ../src/pulse/channelmap.c:134
 msgid "Auxiliary 13"
 msgstr "Auxiliar13"
 
-#: ../src/pulse/channelmap.c:137
+#: ../src/pulse/channelmap.c:135
 msgid "Auxiliary 14"
 msgstr "Auxiliar 14"
 
-#: ../src/pulse/channelmap.c:138
+#: ../src/pulse/channelmap.c:136
 msgid "Auxiliary 15"
 msgstr "Auxiliar 15"
 
-#: ../src/pulse/channelmap.c:139
+#: ../src/pulse/channelmap.c:137
 msgid "Auxiliary 16"
 msgstr "Auxiliar 16"
 
-#: ../src/pulse/channelmap.c:140
+#: ../src/pulse/channelmap.c:138
 msgid "Auxiliary 17"
 msgstr "Auxiliar 17"
 
-#: ../src/pulse/channelmap.c:141
+#: ../src/pulse/channelmap.c:139
 msgid "Auxiliary 18"
 msgstr "Auxiliar 18"
 
-#: ../src/pulse/channelmap.c:142
+#: ../src/pulse/channelmap.c:140
 msgid "Auxiliary 19"
 msgstr "Auxiliar 19"
 
-#: ../src/pulse/channelmap.c:143
+#: ../src/pulse/channelmap.c:141
 msgid "Auxiliary 20"
 msgstr "Auxiliar 20"
 
-#: ../src/pulse/channelmap.c:144
+#: ../src/pulse/channelmap.c:142
 msgid "Auxiliary 21"
 msgstr "Auxiliar 21"
 
-#: ../src/pulse/channelmap.c:145
+#: ../src/pulse/channelmap.c:143
 msgid "Auxiliary 22"
 msgstr "Auxiliar 22"
 
-#: ../src/pulse/channelmap.c:146
+#: ../src/pulse/channelmap.c:144
 msgid "Auxiliary 23"
 msgstr "Auxiliar 23"
 
-#: ../src/pulse/channelmap.c:147
+#: ../src/pulse/channelmap.c:145
 msgid "Auxiliary 24"
 msgstr "Auxiliar 24"
 
-#: ../src/pulse/channelmap.c:148
+#: ../src/pulse/channelmap.c:146
 msgid "Auxiliary 25"
 msgstr "Auxiliar 25"
 
-#: ../src/pulse/channelmap.c:149
+#: ../src/pulse/channelmap.c:147
 msgid "Auxiliary 26"
 msgstr "Auxiliar 26"
 
-#: ../src/pulse/channelmap.c:150
+#: ../src/pulse/channelmap.c:148
 msgid "Auxiliary 27"
-msgstr "Auxiliar 26"
+msgstr "Auxiliar 27"
 
-#: ../src/pulse/channelmap.c:151
+#: ../src/pulse/channelmap.c:149
 msgid "Auxiliary 28"
 msgstr "Auxiliar 28"
 
-#: ../src/pulse/channelmap.c:152
+#: ../src/pulse/channelmap.c:150
 msgid "Auxiliary 29"
 msgstr "Auxiliar 29"
 
-#: ../src/pulse/channelmap.c:153
+#: ../src/pulse/channelmap.c:151
 msgid "Auxiliary 30"
 msgstr "Auxiliar 30"
 
-#: ../src/pulse/channelmap.c:154
+#: ../src/pulse/channelmap.c:152
 msgid "Auxiliary 31"
 msgstr "Auxiliar 31"
 
-#: ../src/pulse/channelmap.c:156
+#: ../src/pulse/channelmap.c:154
 msgid "Top Center"
 msgstr "Central superior"
 
-#: ../src/pulse/channelmap.c:158
+#: ../src/pulse/channelmap.c:156
 msgid "Top Front Center"
 msgstr "Central frontal superior"
 
-#: ../src/pulse/channelmap.c:159
+#: ../src/pulse/channelmap.c:157
 msgid "Top Front Left"
 msgstr "Frontal superior esquerdo"
 
-#: ../src/pulse/channelmap.c:160
+#: ../src/pulse/channelmap.c:158
 msgid "Top Front Right"
 msgstr "Fontal superior direito"
 
-#: ../src/pulse/channelmap.c:162
+#: ../src/pulse/channelmap.c:160
 msgid "Top Rear Center"
 msgstr "Central superior posterior"
 
-#: ../src/pulse/channelmap.c:163
+#: ../src/pulse/channelmap.c:161
 msgid "Top Rear Left"
 msgstr "Posterior superior esquerdo"
 
-#: ../src/pulse/channelmap.c:164
+#: ../src/pulse/channelmap.c:162
 msgid "Top Rear Right"
 msgstr "Posterior superior direito"
 
-#: ../src/pulse/channelmap.c:481 ../src/pulse/format.c:123
-#: ../src/pulse/sample.c:177 ../src/pulse/volume.c:296
-#: ../src/pulse/volume.c:322 ../src/pulse/volume.c:342
-#: ../src/pulse/volume.c:374 ../src/pulse/volume.c:414
-#: ../src/pulse/volume.c:433
+#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:121
+#: ../src/pulse/sample.c:174 ../src/pulse/volume.c:294
+#: ../src/pulse/volume.c:320 ../src/pulse/volume.c:340
+#: ../src/pulse/volume.c:372 ../src/pulse/volume.c:412
+#: ../src/pulse/volume.c:431
 msgid "(invalid)"
-msgstr "(Inválido)"
+msgstr "(inválido)"
 
-#: ../src/pulse/channelmap.c:764
+#: ../src/pulse/channelmap.c:775
 msgid "Stereo"
 msgstr "Estéreo"
 
-#: ../src/pulse/channelmap.c:769
+#: ../src/pulse/channelmap.c:780
 msgid "Surround 4.0"
 msgstr "Surround 4.0"
 
-#: ../src/pulse/channelmap.c:775
+#: ../src/pulse/channelmap.c:786
 msgid "Surround 4.1"
 msgstr "Surround 4.1"
 
-#: ../src/pulse/channelmap.c:781
+#: ../src/pulse/channelmap.c:792
 msgid "Surround 5.0"
 msgstr "Surround 5.0"
 
-#: ../src/pulse/channelmap.c:787
+#: ../src/pulse/channelmap.c:798
 msgid "Surround 5.1"
 msgstr "Surround 5.1"
 
-#: ../src/pulse/channelmap.c:794
+#: ../src/pulse/channelmap.c:805
 msgid "Surround 7.1"
 msgstr "Surround 7.1"
 
-#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:99
+#: ../src/pulse/client-conf-x11.c:53 ../src/utils/pax11publish.c:97
 msgid "xcb_connect() failed"
 msgstr "xcb_connect() falhou"
 
-#: ../src/pulse/client-conf-x11.c:60 ../src/utils/pax11publish.c:104
+#: ../src/pulse/client-conf-x11.c:58 ../src/utils/pax11publish.c:102
 msgid "xcb_connection_has_error() returned true"
 msgstr "xcb_connection_has_error() retornou verdadeiro"
 
-#: ../src/pulse/client-conf-x11.c:96
+#: ../src/pulse/client-conf-x11.c:94
 msgid "Failed to parse cookie data"
 msgstr "Falha ao analisar os dados do cookie"
 
-#: ../src/pulse/context.c:522
-msgid "No cookie loaded. Attempting to connect without."
-msgstr "Nenhum cookie foi carregado. Tentativa de conexão sem eles."
-
-#: ../src/pulse/context.c:603
+#: ../src/pulse/context.c:702
 #, c-format
 msgid "fork(): %s"
 msgstr "fork(): %s"
 
-#: ../src/pulse/context.c:658
+#: ../src/pulse/context.c:757
 #, c-format
 msgid "waitpid(): %s"
 msgstr "waitpid(): %s"
 
-#: ../src/pulse/context.c:1359
+#: ../src/pulse/context.c:1463
 #, c-format
 msgid "Received message for unknown extension '%s'"
-msgstr "Foi recebida uma mensagem para uma extensão desconhecida \"%s\""
+msgstr "Foi recebida uma mensagem para uma extensão desconhecida “%s”"
 
-#: ../src/pulse/direction.c:39
+#: ../src/pulse/direction.c:37
 msgid "input"
 msgstr "entrada"
 
-#: ../src/pulse/direction.c:41
+#: ../src/pulse/direction.c:39
 msgid "output"
 msgstr "saída"
 
-#: ../src/pulse/direction.c:43
+#: ../src/pulse/direction.c:41
 msgid "bidirectional"
 msgstr "bidirecional"
 
-#: ../src/pulse/direction.c:45
+#: ../src/pulse/direction.c:43
 msgid "invalid"
 msgstr "inválido"
 
-#: ../src/pulsecore/core-util.h:95
+#: ../src/pulsecore/core-util.c:1856
+#, c-format
+msgid ""
+"XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
+"e g happen if you try to connect to a non-root PulseAudio as a root user, "
+"over the native protocol. Don't do that.)"
+msgstr ""
+"XDG_RUNTIME_DIR (%s) não é propriedade nossa (uid %d), e sim do uid %d! "
+"(Isso poderia acontecer, por exemplo, se você tentar conectar a um "
+"PulseAudio não-root como um usuário root, por meio do protocolo nativo. Não "
+"faça isso.)"
+
+#: ../src/pulsecore/core-util.h:97
 msgid "yes"
 msgstr "sim"
 
-#: ../src/pulsecore/core-util.h:95
+#: ../src/pulsecore/core-util.h:97
 msgid "no"
 msgstr "não"
 
-#: ../src/pulsecore/lock-autospawn.c:143 ../src/pulsecore/lock-autospawn.c:229
+#: ../src/pulsecore/lock-autospawn.c:141 ../src/pulsecore/lock-autospawn.c:227
 msgid "Cannot access autospawn lock."
 msgstr "Não foi possível acessar a trava de autogeração."
 
-#: ../src/pulsecore/log.c:155
+#: ../src/pulsecore/log.c:165
 #, c-format
 msgid "Failed to open target file '%s'."
-msgstr "Falha ao abrir o arquivo alvo \"%s\"."
+msgstr "Falha ao abrir o arquivo alvo “%s”."
 
-#: ../src/pulsecore/log.c:178
+#: ../src/pulsecore/log.c:188
 #, c-format
 msgid ""
 "Tried to open target file '%s', '%s.1', '%s.2' ... '%s.%d', but all failed."
 msgstr ""
-"Tentado abrir arquivo alvo \"%s\", \"%s.1\", \"%s.2\" ... \"%s.%d\", mas "
-"tudo falhou."
+"Tentado abrir arquivo alvo “%s”, “%s.1”, “%s.2” ... “%s.%d”, mas tudo falhou."
 
-#: ../src/pulsecore/log.c:633
+#: ../src/pulsecore/log.c:651
 msgid "Invalid log target."
 msgstr "Alvo do log inválido."
 
-#: ../src/pulsecore/sink.c:3424
+#: ../src/pulsecore/sink.c:3458
 msgid "Built-in Audio"
 msgstr "Áudio interno"
 
-#: ../src/pulsecore/sink.c:3429
+#: ../src/pulsecore/sink.c:3463
 msgid "Modem"
 msgstr "Modem"
 
-#: ../src/pulse/error.c:40
+#: ../src/pulse/error.c:38
 msgid "OK"
 msgstr "OK"
 
-#: ../src/pulse/error.c:41
+#: ../src/pulse/error.c:39
 msgid "Access denied"
 msgstr "Acesso negado"
 
-#: ../src/pulse/error.c:42
+#: ../src/pulse/error.c:40
 msgid "Unknown command"
 msgstr "Comando desconhecido"
 
-#: ../src/pulse/error.c:43
+#: ../src/pulse/error.c:41
 msgid "Invalid argument"
 msgstr "Argumento inválido"
 
-#: ../src/pulse/error.c:44
+#: ../src/pulse/error.c:42
 msgid "Entity exists"
 msgstr "Entidade existente"
 
-#: ../src/pulse/error.c:45
+#: ../src/pulse/error.c:43
 msgid "No such entity"
 msgstr "Não existe tal entidade"
 
-#: ../src/pulse/error.c:46
+#: ../src/pulse/error.c:44
 msgid "Connection refused"
 msgstr "Conexão recusada"
 
-#: ../src/pulse/error.c:47
+#: ../src/pulse/error.c:45
 msgid "Protocol error"
 msgstr "Erro de protocolo"
 
-#: ../src/pulse/error.c:48
+#: ../src/pulse/error.c:46
 msgid "Timeout"
 msgstr "Tempo esgotado"
 
-#: ../src/pulse/error.c:49
-msgid "No authorization key"
-msgstr "Não há chave para autorização"
+#: ../src/pulse/error.c:47
+msgid "No authentication key"
+msgstr "Nenhuma chave de autenticação"
 
-#: ../src/pulse/error.c:50
+#: ../src/pulse/error.c:48
 msgid "Internal error"
 msgstr "Erro interno"
 
-#: ../src/pulse/error.c:51
+#: ../src/pulse/error.c:49
 msgid "Connection terminated"
 msgstr "Conexão terminada"
 
-#: ../src/pulse/error.c:52
+#: ../src/pulse/error.c:50
 msgid "Entity killed"
 msgstr "Entidade terminada"
 
-#: ../src/pulse/error.c:53
+#: ../src/pulse/error.c:51
 msgid "Invalid server"
 msgstr "Servidor inválido"
 
-#: ../src/pulse/error.c:54
+#: ../src/pulse/error.c:52
 msgid "Module initialization failed"
 msgstr "A inicialização do módulo falhou"
 
-#: ../src/pulse/error.c:55
+#: ../src/pulse/error.c:53
 msgid "Bad state"
 msgstr "Mau estado"
 
-#: ../src/pulse/error.c:56
+#: ../src/pulse/error.c:54
 msgid "No data"
 msgstr "Não há dados"
 
-#: ../src/pulse/error.c:57
+#: ../src/pulse/error.c:55
 msgid "Incompatible protocol version"
 msgstr "Versão de protocolo incompatível"
 
-#: ../src/pulse/error.c:58
+#: ../src/pulse/error.c:56
 msgid "Too large"
 msgstr "Muito grande"
 
-#: ../src/pulse/error.c:59
+#: ../src/pulse/error.c:57
 msgid "Not supported"
 msgstr "Não há suporte"
 
-#: ../src/pulse/error.c:60
+#: ../src/pulse/error.c:58
 msgid "Unknown error code"
 msgstr "Código de erro desconhecido"
 
-#: ../src/pulse/error.c:61
+#: ../src/pulse/error.c:59
 msgid "No such extension"
 msgstr "Não existe tal extensão"
 
-#: ../src/pulse/error.c:62
+#: ../src/pulse/error.c:60
 msgid "Obsolete functionality"
 msgstr "Funcionalidade obsoleta"
 
-#: ../src/pulse/error.c:63
+#: ../src/pulse/error.c:61
 msgid "Missing implementation"
 msgstr "Implementação faltando"
 
-#: ../src/pulse/error.c:64
+#: ../src/pulse/error.c:62
 msgid "Client forked"
 msgstr "Cliente bifurcado"
 
-#: ../src/pulse/error.c:65
+#: ../src/pulse/error.c:63
 msgid "Input/Output error"
 msgstr "Erro de entrada/saída"
 
-#: ../src/pulse/error.c:66
+#: ../src/pulse/error.c:64
 msgid "Device or resource busy"
 msgstr "Dispositivo ou recurso ocupado"
 
-#: ../src/pulse/sample.c:179
+#: ../src/pulse/sample.c:176
 #, c-format
 msgid "%s %uch %uHz"
 msgstr "%s %uch %uHz"
 
-#: ../src/pulse/sample.c:191
+#: ../src/pulse/sample.c:188
 #, c-format
 msgid "%0.1f GiB"
 msgstr "%0.1f GB"
 
-#: ../src/pulse/sample.c:193
+#: ../src/pulse/sample.c:190
 #, c-format
 msgid "%0.1f MiB"
 msgstr "%0.1f MB"
 
-#: ../src/pulse/sample.c:195
+#: ../src/pulse/sample.c:192
 #, c-format
 msgid "%0.1f KiB"
 msgstr "%0.1f KB"
 
-#: ../src/pulse/sample.c:197
+#: ../src/pulse/sample.c:194
 #, c-format
 msgid "%u B"
 msgstr "%u B"
 
-#: ../src/tests/resampler-test.c:257
-#, c-format
-msgid ""
-"%s [options]\n"
-"\n"
-"-h, --help                            Show this help\n"
-"-v, --verbose                         Print debug messages\n"
-"      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
-"44100)\n"
-"      --from-format=SAMPLEFORMAT      From sample type (defaults to s16le)\n"
-"      --from-channels=CHANNELS        From number of channels (defaults to "
-"1)\n"
-"      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
-"44100)\n"
-"      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
-"      --to-channels=CHANNELS          To number of channels (defaults to 1)\n"
-"      --resample-method=METHOD        Resample method (defaults to auto)\n"
-"      --seconds=SECONDS               From stream duration (defaults to 60)\n"
-"\n"
-"If the formats are not specified, the test performs all formats "
-"combinations,\n"
-"back and forth.\n"
-"\n"
-"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
-"alaw,\n"
-"s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
-"\n"
-"See --dump-resample-methods for possible values of resample methods.\n"
-msgstr ""
-"%s [opções]\n"
-"\n"
-"-h, --help                            Mostra essa ajuda\n"
-"-v, --verbose                         Mostra mensagens de depuração\n"
-"      --from-rate=TAXA_DE_AMOSTRAGEM  De taxa de amostragem em Hz\n"
-"                                      (padrão 44100)\n"
-"      --from-format=FORMATO_DE_AMOSTRAGEM\n"
-"                                      De tipo de amostragem (padrão s16le)\n"
-"      --from-channels=CANAIS          De Número de canais (padrão 1)\n"
-"      --to-rate=TAXA_DE_AMOSTRAGEM      Para taxa de amostragem em Hz\n"
-"                                      (padrão 44100)\n"
-"      --to-format=FORMATO_DE_AMOSTRAGEM\n"
-"                                      Para tipo de amostragem (padrão "
-"s16le)\n"
-"      --to-channels=CANAIS            Para número de canais (padrão 1)\n"
-"      --resample-method=MÉTODO        Método de reamostragem (padrão auto)\n"
-"      --seconds=SEGUNDOS              De duração de fluxo (padrão 60)\n"
-"\n"
-"Se os formatos não forem especificados, o teste realiza todas as "
-"combinações\n"
-"de formatos, para trás e para frente.\n"
-"\n"
-"O tipo de amostragem deve ser um entre s16le, s16be, u8, float32le,\n"
-"float32be, ulaw, alaw, s24le, s24be, s24-32le, s24-32be, s32le e s32be\n"
-"(padrão s16ne)\n"
-"\n"
-"Veja --dump-resample-methods para valores possíveis de métodos de "
-"amostragem.\n"
-
-#: ../src/tests/resampler-test.c:356
-#, c-format
-msgid "%s %s\n"
-msgstr "%s %s\n"
-
-#: ../src/tests/resampler-test.c:419
-#, c-format
-msgid "=== %d seconds: %d Hz %d ch (%s) -> %d Hz %d ch (%s)"
-msgstr "=== %d segundos: %d Hz %d ch (%s) -> %d Hz %d ch (%s)"
-
-#: ../src/utils/pacat.c:118
+#: ../src/utils/pacat.c:134
 #, c-format
 msgid "Failed to drain stream: %s"
 msgstr "Falha ao drenar o fluxo: %s"
 
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:139
 msgid "Playback stream drained."
 msgstr "Fluxo de reprodução drenado."
 
-#: ../src/utils/pacat.c:134
+#: ../src/utils/pacat.c:150
 msgid "Draining connection to server."
 msgstr "Drenando conexão para o servidor."
 
-#: ../src/utils/pacat.c:147
+#: ../src/utils/pacat.c:163
 #, c-format
 msgid "pa_stream_drain(): %s"
 msgstr "pa_stream_drain(): %s"
 
-#: ../src/utils/pacat.c:170
-#, c-format
-msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write() falhou: %s"
-
-#: ../src/utils/pacat.c:211
+#: ../src/utils/pacat.c:194 ../src/utils/pacat.c:543
 #, c-format
 msgid "pa_stream_begin_write() failed: %s"
 msgstr "pa_stream_begin_write() falhou: %s"
 
-#: ../src/utils/pacat.c:261 ../src/utils/pacat.c:291
+#: ../src/utils/pacat.c:244 ../src/utils/pacat.c:274
 #, c-format
 msgid "pa_stream_peek() failed: %s"
 msgstr "pa_stream_peek() falhou: %s"
 
-#: ../src/utils/pacat.c:341
+#: ../src/utils/pacat.c:324
 msgid "Stream successfully created."
 msgstr "Fluxo criado com sucesso."
 
-#: ../src/utils/pacat.c:344
+#: ../src/utils/pacat.c:327
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s"
 msgstr "pa_stream_get_buffer_attr() falhou: %s"
 
-#: ../src/utils/pacat.c:348
+#: ../src/utils/pacat.c:331
 #, c-format
 msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 msgstr "Métricas do buffer: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 
-#: ../src/utils/pacat.c:351
+#: ../src/utils/pacat.c:334
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u"
 msgstr "Métricas do buffer: maxlength=%u, fragsize=%u"
 
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:338
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'."
-msgstr "Usando especificação de amostragem \"%s\", mapa de canais \"%s\"."
+msgstr "Usando especificação de amostragem “%s”, mapa de canais “%s”."
 
-#: ../src/utils/pacat.c:359
+#: ../src/utils/pacat.c:342
 #, c-format
 msgid "Connected to device %s (index: %u, suspended: %s)."
 msgstr "Conectado ao dispositivo %s (índice: %u, suspenso: %s)."
 
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:352
 #, c-format
 msgid "Stream error: %s"
 msgstr "Erro de fluxo: %s"
 
-#: ../src/utils/pacat.c:379
+#: ../src/utils/pacat.c:362
 #, c-format
 msgid "Stream device suspended.%s"
 msgstr "Dispositivo de fluxo suspenso.%s"
 
-#: ../src/utils/pacat.c:381
+#: ../src/utils/pacat.c:364
 #, c-format
 msgid "Stream device resumed.%s"
 msgstr "O dispositivo de fluxo continuou.%s"
 
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:372
 #, c-format
 msgid "Stream underrun.%s"
 msgstr "Subestimação do fluxo.%s"
 
-#: ../src/utils/pacat.c:396
+#: ../src/utils/pacat.c:379
 #, c-format
 msgid "Stream overrun.%s"
 msgstr "Superestimação do fluxo.%s"
 
-#: ../src/utils/pacat.c:403
+#: ../src/utils/pacat.c:386
 #, c-format
 msgid "Stream started.%s"
 msgstr "Fluxo iniciado.%s"
 
-#: ../src/utils/pacat.c:410
+#: ../src/utils/pacat.c:393
 #, c-format
 msgid "Stream moved to device %s (%u, %ssuspended).%s"
 msgstr "Fluxo movido para o dispositivo %s (%u, %ssuspended).%s"
 
-#: ../src/utils/pacat.c:410
+#: ../src/utils/pacat.c:393
 msgid "not "
-msgstr "não"
+msgstr "não "
 
-#: ../src/utils/pacat.c:417
+#: ../src/utils/pacat.c:400
 #, c-format
 msgid "Stream buffer attributes changed.%s"
 msgstr "Atributos do buffer de fluxo alterados.%s"
 
 # https://en.wikipedia.org/wiki/Cork_encoding
-#: ../src/utils/pacat.c:432
+#: ../src/utils/pacat.c:415
 msgid "Cork request stack is empty: corking stream"
 msgstr "Pilha de requisição cork está vazia: aplicando cork no fluxo"
 
 # https://en.wikipedia.org/wiki/Cork_encoding
-#: ../src/utils/pacat.c:438
+#: ../src/utils/pacat.c:421
 msgid "Cork request stack is empty: uncorking stream"
 msgstr "Pilha de requisição cork está vazia: desfazando cork no fluxo"
 
-#: ../src/utils/pacat.c:442
-msgid "Warning: Received more uncork requests than cork requests!"
+#: ../src/utils/pacat.c:425
+msgid "Warning: Received more uncork requests than cork requests."
 msgstr ""
 "Aviso: Recebidas mais requisições para desfazer cork do que requisições "
-"aplicá-la!"
+"aplicá-la."
 
-#: ../src/utils/pacat.c:467
+#: ../src/utils/pacat.c:450
 #, c-format
 msgid "Connection established.%s"
 msgstr "Conexão estabelecida.%s"
 
-#: ../src/utils/pacat.c:470
+#: ../src/utils/pacat.c:453
 #, c-format
 msgid "pa_stream_new() failed: %s"
 msgstr "pa_stream_new() falhou: %s"
 
-#: ../src/utils/pacat.c:508
+#: ../src/utils/pacat.c:491
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s"
 msgstr "pa_stream_connect_playback() falhou: %s"
 
-#: ../src/utils/pacat.c:514
+#: ../src/utils/pacat.c:497
 #, c-format
 msgid "Failed to set monitor stream: %s"
 msgstr "Falha ao definir o fluxo de monitoração: %s"
 
-#: ../src/utils/pacat.c:518
+#: ../src/utils/pacat.c:501
 #, c-format
 msgid "pa_stream_connect_record() failed: %s"
 msgstr "pa_stream_connect_record() falhou: %s"
 
-#: ../src/utils/pacat.c:531 ../src/utils/pactl.c:1455
+#: ../src/utils/pacat.c:514 ../src/utils/pactl.c:1446
 #, c-format
 msgid "Connection failure: %s"
 msgstr "Falha na conexão: %s"
 
-#: ../src/utils/pacat.c:564
+#: ../src/utils/pacat.c:557
 msgid "Got EOF."
 msgstr "Atingiu EOF."
 
-#: ../src/utils/pacat.c:601
+#: ../src/utils/pacat.c:581
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "pa_stream_write() falhou: %s"
+
+#: ../src/utils/pacat.c:605
 #, c-format
 msgid "write() failed: %s"
 msgstr "write() falhou: %s"
 
-#: ../src/utils/pacat.c:622
+#: ../src/utils/pacat.c:626
 msgid "Got signal, exiting."
 msgstr "Sinal recebido, saindo."
 
-#: ../src/utils/pacat.c:636
+#: ../src/utils/pacat.c:640
 #, c-format
 msgid "Failed to get latency: %s"
 msgstr "Falha ao obter a latência: %s"
 
-#: ../src/utils/pacat.c:641
+#: ../src/utils/pacat.c:645
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec."
 msgstr "Tempo: %0.3f seg; Latência: %0.0f useg."
 
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:666
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s"
 msgstr "pa_stream_update_timing_info() falhou: %s"
 
-#: ../src/utils/pacat.c:672
+#: ../src/utils/pacat.c:676
 #, c-format
 msgid ""
 "%s [options]\n"
+"%s\n"
 "\n"
 "  -h, --help                            Show this help\n"
 "      --version                         Show version\n"
@@ -2074,6 +1916,7 @@ msgid ""
 "index INDEX.\n"
 msgstr ""
 "%s [opções]\n"
+"%s\n"
 "\n"
 "  -h, --help                            Mostra essa ajuda\n"
 "      --version                         Mostra a versão\n"
@@ -2141,7 +1984,35 @@ msgstr ""
 "      --monitor-stream=ÍNDICE           Grava da entrada do destino com "
 "índice.\n"
 
-#: ../src/utils/pacat.c:810
+#: ../src/utils/pacat.c:793
+msgid "Play back encoded audio files on a PulseAudio sound server."
+msgstr ""
+"Reproduz arquivos de áudio codificados em um servidor de som PulseAudio."
+
+#: ../src/utils/pacat.c:797
+msgid ""
+"Capture audio data from a PulseAudio sound server and write it to a file."
+msgstr ""
+"Captura dados de áudio de um servidor de som PulseAudio e escreve-os para um "
+"arquivo."
+
+#: ../src/utils/pacat.c:801
+msgid ""
+"Capture audio data from a PulseAudio sound server and write it to STDOUT or "
+"the specified file."
+msgstr ""
+"Captura dados de áudio de um servidor de som PulseAudio e escreve-os para "
+"STDOUT (saída padrão) ou o arquivo especificado."
+
+#: ../src/utils/pacat.c:805
+msgid ""
+"Play back audio data from STDIN or the specified file on a PulseAudio sound "
+"server."
+msgstr ""
+"Reproduz dados de áudio de STDIN (entrada padrão) ou o arquivo especificado "
+"em um servidor de áudio PulseAudio."
+
+#: ../src/utils/pacat.c:819
 #, c-format
 msgid ""
 "pacat %s\n"
@@ -2152,72 +2023,72 @@ msgstr ""
 "Compilado com libpulse %s\n"
 "Vinculado com libpulse %s\n"
 
-#: ../src/utils/pacat.c:843 ../src/utils/pactl.c:1651
+#: ../src/utils/pacat.c:852 ../src/utils/pactl.c:1648
 #, c-format
 msgid "Invalid client name '%s'"
-msgstr "Nome do cliente \"%s\" inválido"
+msgstr "Nome do cliente “%s” inválido"
 
-#: ../src/utils/pacat.c:858
+#: ../src/utils/pacat.c:867
 #, c-format
 msgid "Invalid stream name '%s'"
-msgstr "Nome do fluxo \"%s\" inválido"
+msgstr "Nome do fluxo “%s” inválido"
 
-#: ../src/utils/pacat.c:895
+#: ../src/utils/pacat.c:904
 #, c-format
 msgid "Invalid channel map '%s'"
-msgstr "Mapa de canais \"%s\" inválido"
+msgstr "Mapa de canais “%s” inválido"
 
-#: ../src/utils/pacat.c:924 ../src/utils/pacat.c:938
+#: ../src/utils/pacat.c:933 ../src/utils/pacat.c:947
 #, c-format
 msgid "Invalid latency specification '%s'"
-msgstr "Especificação de latência inválida \"%s\""
+msgstr "Especificação de latência inválida “%s”"
 
-#: ../src/utils/pacat.c:931 ../src/utils/pacat.c:945
+#: ../src/utils/pacat.c:940 ../src/utils/pacat.c:954
 #, c-format
 msgid "Invalid process time specification '%s'"
-msgstr "Especificação do tempo de processo \"%s\" inválida"
+msgstr "Especificação do tempo de processo “%s” inválida"
 
-#: ../src/utils/pacat.c:957
+#: ../src/utils/pacat.c:966
 #, c-format
 msgid "Invalid property '%s'"
-msgstr "Propriedade \"%s\" inválida"
+msgstr "Propriedade “%s” inválida"
 
-#: ../src/utils/pacat.c:976
+#: ../src/utils/pacat.c:985
 #, c-format
 msgid "Unknown file format %s."
 msgstr "Formato de arquivo %s desconhecido."
 
-#: ../src/utils/pacat.c:991
+#: ../src/utils/pacat.c:1000
 msgid "Failed to parse the argument for --monitor-stream"
 msgstr "Falha ao analisar o argumento de --monitor-stream"
 
-#: ../src/utils/pacat.c:1002
+#: ../src/utils/pacat.c:1011
 msgid "Invalid sample specification"
 msgstr "Especificação de amostragem inválida"
 
-#: ../src/utils/pacat.c:1012
+#: ../src/utils/pacat.c:1021
 #, c-format
 msgid "open(): %s"
 msgstr "open(): %s"
 
-#: ../src/utils/pacat.c:1017
+#: ../src/utils/pacat.c:1026
 #, c-format
 msgid "dup2(): %s"
 msgstr "dup2(): %s"
 
-#: ../src/utils/pacat.c:1024
+#: ../src/utils/pacat.c:1033
 msgid "Too many arguments."
 msgstr "Argumentos em excesso."
 
-#: ../src/utils/pacat.c:1035
+#: ../src/utils/pacat.c:1044
 msgid "Failed to generate sample specification for file."
 msgstr "Falha ao gerar a especificação de amostragem para o arquivo."
 
-#: ../src/utils/pacat.c:1061
+#: ../src/utils/pacat.c:1070
 msgid "Failed to open audio file."
 msgstr "Falha ao abrir o arquivo de áudio."
 
-#: ../src/utils/pacat.c:1067
+#: ../src/utils/pacat.c:1076
 msgid ""
 "Warning: specified sample specification will be overwritten with "
 "specification from file."
@@ -2225,157 +2096,157 @@ msgstr ""
 "Aviso: a especificação de amostragem especificada será sobrescrita pela "
 "especificação do arquivo."
 
-#: ../src/utils/pacat.c:1070 ../src/utils/pactl.c:1718
+#: ../src/utils/pacat.c:1079 ../src/utils/pactl.c:1712
 msgid "Failed to determine sample specification from file."
 msgstr "Falha ao determinar a especificação de amostragem a partir do arquivo."
 
-#: ../src/utils/pacat.c:1079
+#: ../src/utils/pacat.c:1088
 msgid "Warning: Failed to determine channel map from file."
 msgstr "Aviso: Falha ao determinar o mapa de canais a partir do arquivo."
 
-#: ../src/utils/pacat.c:1090
+#: ../src/utils/pacat.c:1099
 msgid "Channel map doesn't match sample specification"
 msgstr "O mapa de canais não combina com a especificação da amostragem"
 
-#: ../src/utils/pacat.c:1101
+#: ../src/utils/pacat.c:1110
 msgid "Warning: failed to write channel map to file."
 msgstr "Aviso: falha ao gravar o mapa de canais no arquivo."
 
-#: ../src/utils/pacat.c:1116
+#: ../src/utils/pacat.c:1125
 #, c-format
 msgid ""
 "Opening a %s stream with sample specification '%s' and channel map '%s'."
 msgstr ""
-"Abrindo um fluxo %s com a especificação de amostragem \"%s\" e mapa de "
-"canais \"%s\"."
+"Abrindo um fluxo %s com a especificação de amostragem “%s” e mapa de canais "
+"“%s”."
 
-#: ../src/utils/pacat.c:1117
+#: ../src/utils/pacat.c:1126
 msgid "recording"
 msgstr "gravando"
 
-#: ../src/utils/pacat.c:1117
+#: ../src/utils/pacat.c:1126
 msgid "playback"
 msgstr "playback"
 
-#: ../src/utils/pacat.c:1141
+#: ../src/utils/pacat.c:1150
 msgid "Failed to set media name."
 msgstr "Falha ao definir o nome da mídia."
 
-#: ../src/utils/pacat.c:1148 ../src/utils/pactl.c:2068
+#: ../src/utils/pacat.c:1160 ../src/utils/pactl.c:2062
 msgid "pa_mainloop_new() failed."
 msgstr "pa_mainloop_new() falhou."
 
-#: ../src/utils/pacat.c:1171
+#: ../src/utils/pacat.c:1183
 msgid "io_new() failed."
 msgstr "io_new() falhou."
 
-#: ../src/utils/pacat.c:1178 ../src/utils/pactl.c:2080
+#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2074
 msgid "pa_context_new() failed."
 msgstr "pa_context_new() falhou."
 
-#: ../src/utils/pacat.c:1186 ../src/utils/pactl.c:2086
+#: ../src/utils/pacat.c:1198 ../src/utils/pactl.c:2080
 #, c-format
 msgid "pa_context_connect() failed: %s"
 msgstr "pa_context_new() falhou: %s"
 
-#: ../src/utils/pacat.c:1192
+#: ../src/utils/pacat.c:1204
 msgid "pa_context_rttime_new() failed."
 msgstr "pa_context_rttime_new() falhou."
 
-#: ../src/utils/pacat.c:1199 ../src/utils/pactl.c:2091
+#: ../src/utils/pacat.c:1211 ../src/utils/pactl.c:2085
 msgid "pa_mainloop_run() failed."
 msgstr "pa_mainloop_run() falhou."
 
-#: ../src/utils/pacmd.c:53 ../src/utils/pactl.c:1573
+#: ../src/utils/pacmd.c:51 ../src/utils/pactl.c:1570
 msgid "NAME [ARGS ...]"
 msgstr "NOME [ARGS ...]"
 
-#: ../src/utils/pacmd.c:54 ../src/utils/pacmd.c:62 ../src/utils/pactl.c:1574
+#: ../src/utils/pacmd.c:52 ../src/utils/pacmd.c:60 ../src/utils/pactl.c:1571
 msgid "NAME|#N"
 msgstr "NOME|#N"
 
-#: ../src/utils/pacmd.c:55 ../src/utils/pacmd.c:65 ../src/utils/pactl.c:1572
-#: ../src/utils/pactl.c:1578
+#: ../src/utils/pacmd.c:53 ../src/utils/pacmd.c:63 ../src/utils/pactl.c:1569
+#: ../src/utils/pactl.c:1575
 msgid "NAME"
 msgstr "NOME"
 
-#: ../src/utils/pacmd.c:56
+#: ../src/utils/pacmd.c:54
 msgid "NAME|#N VOLUME"
 msgstr "NOME|#N VOLUME"
 
-#: ../src/utils/pacmd.c:57
+#: ../src/utils/pacmd.c:55
 msgid "#N VOLUME"
 msgstr "#N VOLUME"
 
-#: ../src/utils/pacmd.c:58 ../src/utils/pacmd.c:72 ../src/utils/pactl.c:1576
+#: ../src/utils/pacmd.c:56 ../src/utils/pacmd.c:70 ../src/utils/pactl.c:1573
 msgid "NAME|#N 1|0"
 msgstr "NOME|#N 1|0"
 
-#: ../src/utils/pacmd.c:59
+#: ../src/utils/pacmd.c:57
 msgid "#N 1|0"
 msgstr "#N 1|0"
 
-#: ../src/utils/pacmd.c:60
+#: ../src/utils/pacmd.c:58
 msgid "NAME|#N KEY=VALUE"
 msgstr "NOME|#N CHAVE=VALOR"
 
-#: ../src/utils/pacmd.c:61
+#: ../src/utils/pacmd.c:59
 msgid "#N KEY=VALUE"
 msgstr "#N CHAVE=VALOR"
 
-#: ../src/utils/pacmd.c:63
+#: ../src/utils/pacmd.c:61
 msgid "#N"
 msgstr "#N"
 
-#: ../src/utils/pacmd.c:64
+#: ../src/utils/pacmd.c:62
 msgid "NAME SINK|#N"
 msgstr "NOME DESTINO|#N"
 
-#: ../src/utils/pacmd.c:66 ../src/utils/pacmd.c:67
+#: ../src/utils/pacmd.c:64 ../src/utils/pacmd.c:65
 msgid "NAME FILENAME"
 msgstr "NOME NOME_DE_ARQUIVO"
 
-#: ../src/utils/pacmd.c:68
+#: ../src/utils/pacmd.c:66
 msgid "PATHNAME"
 msgstr "NOME_DE_CAMINHO"
 
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:67
 msgid "FILENAME SINK|#N"
 msgstr "NOME_DE_ARQUIVO DESTINO|#N"
 
-#: ../src/utils/pacmd.c:71 ../src/utils/pactl.c:1575
+#: ../src/utils/pacmd.c:69 ../src/utils/pactl.c:1572
 msgid "#N SINK|SOURCE"
 msgstr "#N DESTINO|FONTE"
 
-#: ../src/utils/pacmd.c:73 ../src/utils/pacmd.c:79 ../src/utils/pacmd.c:80
+#: ../src/utils/pacmd.c:71 ../src/utils/pacmd.c:77 ../src/utils/pacmd.c:78
 msgid "1|0"
 msgstr "1|0"
 
-#: ../src/utils/pacmd.c:74 ../src/utils/pactl.c:1577
+#: ../src/utils/pacmd.c:72 ../src/utils/pactl.c:1574
 msgid "CARD PROFILE"
 msgstr "PLACA PERFIL"
 
-#: ../src/utils/pacmd.c:75 ../src/utils/pactl.c:1579
+#: ../src/utils/pacmd.c:73 ../src/utils/pactl.c:1576
 msgid "NAME|#N PORT"
 msgstr "NOME|#N PORTA"
 
-#: ../src/utils/pacmd.c:76 ../src/utils/pactl.c:1585
+#: ../src/utils/pacmd.c:74 ../src/utils/pactl.c:1582
 msgid "CARD-NAME|CARD-#N PORT OFFSET"
 msgstr "NOME-PLACA|PLACA-#N PORTA POSIÇÃO"
 
-#: ../src/utils/pacmd.c:77
+#: ../src/utils/pacmd.c:75
 msgid "TARGET"
 msgstr "ALVO"
 
-#: ../src/utils/pacmd.c:78
-msgid "NUMERIC LEVEL"
-msgstr "NÍVEL NUMÉRICO"
+#: ../src/utils/pacmd.c:76
+msgid "NUMERIC-LEVEL"
+msgstr "NÍVEL-NUMÉRICO"
 
-#: ../src/utils/pacmd.c:81
+#: ../src/utils/pacmd.c:79
 msgid "FRAMES"
 msgstr "QUADROS"
 
-#: ../src/utils/pacmd.c:83
+#: ../src/utils/pacmd.c:81
 #, c-format
 msgid ""
 "\n"
@@ -2388,7 +2259,7 @@ msgstr ""
 "      --version                         Mostra a versão\n"
 "Quando nenhum comando é informado, pacmd inicia em modo interativo.\n"
 
-#: ../src/utils/pacmd.c:130
+#: ../src/utils/pacmd.c:128
 #, c-format
 msgid ""
 "pacmd %s\n"
@@ -2399,71 +2270,71 @@ msgstr ""
 "Compilado com libpulse %s\n"
 "Vinculado com libpulse %s\n"
 
-#: ../src/utils/pacmd.c:144
+#: ../src/utils/pacmd.c:142
 msgid "No PulseAudio daemon running, or not running as session daemon."
 msgstr ""
 "Nenhum daemon do PulseAudio em execução ou não está em execução como daemon "
 "de sessão."
 
-#: ../src/utils/pacmd.c:149
+#: ../src/utils/pacmd.c:147
 #, c-format
 msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
 msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
 
-#: ../src/utils/pacmd.c:166
+#: ../src/utils/pacmd.c:164
 #, c-format
 msgid "connect(): %s"
 msgstr "connect(): %s"
 
-#: ../src/utils/pacmd.c:174
+#: ../src/utils/pacmd.c:172
 msgid "Failed to kill PulseAudio daemon."
 msgstr "Falha ao matar o daemon do PulseAudio."
 
-#: ../src/utils/pacmd.c:182
+#: ../src/utils/pacmd.c:180
 msgid "Daemon not responding."
 msgstr "O daemon não responde."
 
-#: ../src/utils/pacmd.c:214 ../src/utils/pacmd.c:323 ../src/utils/pacmd.c:341
+#: ../src/utils/pacmd.c:212 ../src/utils/pacmd.c:321 ../src/utils/pacmd.c:339
 #, c-format
 msgid "write(): %s"
 msgstr "write(): %s"
 
-#: ../src/utils/pacmd.c:270
+#: ../src/utils/pacmd.c:268
 #, c-format
 msgid "poll(): %s"
 msgstr "poll(): %s"
 
-#: ../src/utils/pacmd.c:281 ../src/utils/pacmd.c:301
+#: ../src/utils/pacmd.c:279 ../src/utils/pacmd.c:299
 #, c-format
 msgid "read(): %s"
 msgstr "read(): %s"
 
-#: ../src/utils/pactl.c:166
+#: ../src/utils/pactl.c:164
 #, c-format
 msgid "Failed to get statistics: %s"
 msgstr "Falha ao obter estatísticas: %s"
 
-#: ../src/utils/pactl.c:172
+#: ../src/utils/pactl.c:170
 #, c-format
 msgid "Currently in use: %u blocks containing %s bytes total.\n"
 msgstr "Em uso no momento: %u blocos contendo %s bytes no total.\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:173
 #, c-format
 msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
 msgstr "Alocado por todo o tempo: %u blocos contendo %s bytes no total.\n"
 
-#: ../src/utils/pactl.c:178
+#: ../src/utils/pactl.c:176
 #, c-format
 msgid "Sample cache size: %s\n"
 msgstr "Tamanho do cache para amostragem: %s\n"
 
-#: ../src/utils/pactl.c:187
+#: ../src/utils/pactl.c:185
 #, c-format
 msgid "Failed to get server information: %s"
 msgstr "Falha ao obter informações do servidor: %s"
 
-#: ../src/utils/pactl.c:192
+#: ../src/utils/pactl.c:190
 #, c-format
 msgid ""
 "Server String: %s\n"
@@ -2480,7 +2351,7 @@ msgstr ""
 "Índice do cliente: %u\n"
 "Tamanho de fragmento: %zu\n"
 
-#: ../src/utils/pactl.c:208
+#: ../src/utils/pactl.c:206
 #, c-format
 msgid ""
 "User Name: %s\n"
@@ -2503,12 +2374,12 @@ msgstr ""
 "Fonte padrão: %s\n"
 "Cookie: %04x:%04x\n"
 
-#: ../src/utils/pactl.c:257 ../src/utils/pactl.c:902 ../src/utils/pactl.c:980
+#: ../src/utils/pactl.c:255 ../src/utils/pactl.c:900 ../src/utils/pactl.c:978
 #, c-format
 msgid "Failed to get sink information: %s"
 msgstr "Falha ao obter informações do destino: %s"
 
-#: ../src/utils/pactl.c:283
+#: ../src/utils/pactl.c:281
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -2547,27 +2418,27 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:327 ../src/utils/pactl.c:433 ../src/utils/pactl.c:594
+#: ../src/utils/pactl.c:325 ../src/utils/pactl.c:431 ../src/utils/pactl.c:592
 #, c-format
 msgid "\tPorts:\n"
 msgstr "\tPortas:\n"
 
-#: ../src/utils/pactl.c:334 ../src/utils/pactl.c:440
+#: ../src/utils/pactl.c:332 ../src/utils/pactl.c:438
 #, c-format
 msgid "\tActive Port: %s\n"
 msgstr "\tPorta ativa: %s\n"
 
-#: ../src/utils/pactl.c:340 ../src/utils/pactl.c:446
+#: ../src/utils/pactl.c:338 ../src/utils/pactl.c:444
 #, c-format
 msgid "\tFormats:\n"
 msgstr "\tFormatos:\n"
 
-#: ../src/utils/pactl.c:364 ../src/utils/pactl.c:922 ../src/utils/pactl.c:995
+#: ../src/utils/pactl.c:362 ../src/utils/pactl.c:920 ../src/utils/pactl.c:993
 #, c-format
 msgid "Failed to get source information: %s"
 msgstr "Falha ao obter informações da fonte: %s"
 
-#: ../src/utils/pactl.c:390
+#: ../src/utils/pactl.c:388
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -2606,20 +2477,20 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:418 ../src/utils/pactl.c:488 ../src/utils/pactl.c:531
-#: ../src/utils/pactl.c:573 ../src/utils/pactl.c:671 ../src/utils/pactl.c:672
-#: ../src/utils/pactl.c:683 ../src/utils/pactl.c:741 ../src/utils/pactl.c:742
-#: ../src/utils/pactl.c:753 ../src/utils/pactl.c:804 ../src/utils/pactl.c:805
-#: ../src/utils/pactl.c:811
+#: ../src/utils/pactl.c:416 ../src/utils/pactl.c:486 ../src/utils/pactl.c:529
+#: ../src/utils/pactl.c:571 ../src/utils/pactl.c:669 ../src/utils/pactl.c:670
+#: ../src/utils/pactl.c:681 ../src/utils/pactl.c:739 ../src/utils/pactl.c:740
+#: ../src/utils/pactl.c:751 ../src/utils/pactl.c:802 ../src/utils/pactl.c:803
+#: ../src/utils/pactl.c:809
 msgid "n/a"
 msgstr "n/d"
 
-#: ../src/utils/pactl.c:457 ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:455 ../src/utils/pactl.c:859
 #, c-format
 msgid "Failed to get module information: %s"
 msgstr "Falha ao obter informações do módulo: %s"
 
-#: ../src/utils/pactl.c:480
+#: ../src/utils/pactl.c:478
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -2636,12 +2507,12 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:499
+#: ../src/utils/pactl.c:497
 #, c-format
 msgid "Failed to get client information: %s"
 msgstr "Falha ao obter informações do cliente: %s"
 
-#: ../src/utils/pactl.c:525
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -2656,12 +2527,12 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:542
+#: ../src/utils/pactl.c:540
 #, c-format
 msgid "Failed to get card information: %s"
 msgstr "Falha ao obter informações da placa: %s"
 
-#: ../src/utils/pactl.c:565
+#: ../src/utils/pactl.c:563
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -2678,17 +2549,22 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:581
+#: ../src/utils/pactl.c:579
 #, c-format
 msgid "\tProfiles:\n"
 msgstr "\tPerfis:\n"
 
-#: ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:581
+#, c-format
+msgid "\t\t%s: %s (sinks: %u, sources: %u, priority: %u, available: %s)\n"
+msgstr "\t\t%s: %s (destino: %u, fontes: %u, prioridade: %u, disponível: %s)\n"
+
+#: ../src/utils/pactl.c:586
 #, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "\tPerfil ativo: %s\n"
 
-#: ../src/utils/pactl.c:602
+#: ../src/utils/pactl.c:600
 #, c-format
 msgid ""
 "\t\t\tProperties:\n"
@@ -2697,17 +2573,17 @@ msgstr ""
 "\t\t\tPropriedades:\n"
 "\t\t\t\t%s\n"
 
-#: ../src/utils/pactl.c:607
+#: ../src/utils/pactl.c:605
 #, c-format
 msgid "\t\t\tPart of profile(s): %s"
 msgstr "\t\t\tParte de perfil/perfis: %s"
 
-#: ../src/utils/pactl.c:624 ../src/utils/pactl.c:942 ../src/utils/pactl.c:1010
+#: ../src/utils/pactl.c:622 ../src/utils/pactl.c:940 ../src/utils/pactl.c:1008
 #, c-format
 msgid "Failed to get sink input information: %s"
 msgstr "Falha ao obter informações da entrada do destino: %s"
 
-#: ../src/utils/pactl.c:653
+#: ../src/utils/pactl.c:651
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -2746,12 +2622,12 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:694 ../src/utils/pactl.c:962 ../src/utils/pactl.c:1025
+#: ../src/utils/pactl.c:692 ../src/utils/pactl.c:960 ../src/utils/pactl.c:1023
 #, c-format
 msgid "Failed to get source output information: %s"
 msgstr "Falha ao obter informações da saída da fonte: %s"
 
-#: ../src/utils/pactl.c:723
+#: ../src/utils/pactl.c:721
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -2790,12 +2666,12 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:764
+#: ../src/utils/pactl.c:762
 #, c-format
 msgid "Failed to get sample information: %s"
 msgstr "Falha ao obter informações sobre a amostragem: %s"
 
-#: ../src/utils/pactl.c:791
+#: ../src/utils/pactl.c:789
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -2824,17 +2700,17 @@ msgstr ""
 "\tPropriedades:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:819 ../src/utils/pactl.c:829
+#: ../src/utils/pactl.c:817 ../src/utils/pactl.c:827
 #, c-format
 msgid "Failure: %s"
 msgstr "Falha: %s"
 
-#: ../src/utils/pactl.c:868
+#: ../src/utils/pactl.c:866
 #, c-format
 msgid "Failed to unload module: Module %s not loaded"
 msgstr "Falha ao descarregar o módulo: módulo %s não carregado"
 
-#: ../src/utils/pactl.c:886
+#: ../src/utils/pactl.c:884
 #, c-format
 msgid ""
 "Failed to set volume: You tried to set volumes for %d channels, whereas "
@@ -2843,144 +2719,144 @@ msgstr ""
 "Falha ao definir volume: Você tentou definir volumes para %d canais, havendo "
 "suporte a %d canais\n"
 
-#: ../src/utils/pactl.c:1052
+#: ../src/utils/pactl.c:1050
 #, c-format
 msgid "Failed to set format: invalid format string %s"
 msgstr "Falha ao definir formato: string %s de formato inválida"
 
-#: ../src/utils/pactl.c:1095
+#: ../src/utils/pactl.c:1093
 #, c-format
 msgid "Failed to upload sample: %s"
 msgstr "Falha ao enviar a amostragem: %s"
 
-#: ../src/utils/pactl.c:1112
+#: ../src/utils/pactl.c:1110
 msgid "Premature end of file"
 msgstr "Fim prematuro do arquivo"
 
-#: ../src/utils/pactl.c:1132
+#: ../src/utils/pactl.c:1130
 msgid "new"
 msgstr "novo"
 
-#: ../src/utils/pactl.c:1135
+#: ../src/utils/pactl.c:1133
 msgid "change"
 msgstr "alterar"
 
-#: ../src/utils/pactl.c:1138
+#: ../src/utils/pactl.c:1136
 msgid "remove"
 msgstr "remover"
 
-#: ../src/utils/pactl.c:1141 ../src/utils/pactl.c:1176
+#: ../src/utils/pactl.c:1139 ../src/utils/pactl.c:1174
 msgid "unknown"
 msgstr "desconhecido"
 
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1147
 msgid "sink"
 msgstr "destino"
 
-#: ../src/utils/pactl.c:1152
+#: ../src/utils/pactl.c:1150
 msgid "source"
 msgstr "fonte"
 
-#: ../src/utils/pactl.c:1155
+#: ../src/utils/pactl.c:1153
 msgid "sink-input"
 msgstr "entrada-destino"
 
-#: ../src/utils/pactl.c:1158
+#: ../src/utils/pactl.c:1156
 msgid "source-output"
 msgstr "saída-fonte"
 
-#: ../src/utils/pactl.c:1161
+#: ../src/utils/pactl.c:1159
 msgid "module"
 msgstr "módulo"
 
-#: ../src/utils/pactl.c:1164
+#: ../src/utils/pactl.c:1162
 msgid "client"
 msgstr "cliente"
 
-#: ../src/utils/pactl.c:1167
+#: ../src/utils/pactl.c:1165
 msgid "sample-cache"
 msgstr "cache-amostragem"
 
-#: ../src/utils/pactl.c:1170
+#: ../src/utils/pactl.c:1168
 msgid "server"
 msgstr "servidor"
 
-#: ../src/utils/pactl.c:1173
+#: ../src/utils/pactl.c:1171
 msgid "card"
 msgstr "placa"
 
-#: ../src/utils/pactl.c:1182
+#: ../src/utils/pactl.c:1180
 #, c-format
 msgid "Event '%s' on %s #%u\n"
-msgstr "Evento \"%s\" em %s #%u\n"
+msgstr "Evento “%s” em %s #%u\n"
 
-#: ../src/utils/pactl.c:1461
+#: ../src/utils/pactl.c:1452
 msgid "Got SIGINT, exiting."
 msgstr "SIGINT recebido, saindo."
 
-#: ../src/utils/pactl.c:1488
+#: ../src/utils/pactl.c:1485
 msgid "Invalid volume specification"
 msgstr "Especificação de volume inválida"
 
-#: ../src/utils/pactl.c:1511
+#: ../src/utils/pactl.c:1508
 msgid "Volume outside permissible range.\n"
 msgstr "Volume fora da faixa admissível.\n"
 
-#: ../src/utils/pactl.c:1524
+#: ../src/utils/pactl.c:1521
 msgid "Invalid number of volume specifications.\n"
 msgstr "Número de especificações de volume inválido.\n"
 
-#: ../src/utils/pactl.c:1536
+#: ../src/utils/pactl.c:1533
 msgid "Inconsistent volume specification.\n"
 msgstr "Especificação de volume inconsistente.\n"
 
-#: ../src/utils/pactl.c:1566 ../src/utils/pactl.c:1567
-#: ../src/utils/pactl.c:1568 ../src/utils/pactl.c:1569
-#: ../src/utils/pactl.c:1570 ../src/utils/pactl.c:1571
-#: ../src/utils/pactl.c:1572 ../src/utils/pactl.c:1573
-#: ../src/utils/pactl.c:1574 ../src/utils/pactl.c:1575
-#: ../src/utils/pactl.c:1576 ../src/utils/pactl.c:1577
-#: ../src/utils/pactl.c:1578 ../src/utils/pactl.c:1579
-#: ../src/utils/pactl.c:1580 ../src/utils/pactl.c:1581
-#: ../src/utils/pactl.c:1582 ../src/utils/pactl.c:1583
-#: ../src/utils/pactl.c:1584 ../src/utils/pactl.c:1585
-#: ../src/utils/pactl.c:1586
+#: ../src/utils/pactl.c:1563 ../src/utils/pactl.c:1564
+#: ../src/utils/pactl.c:1565 ../src/utils/pactl.c:1566
+#: ../src/utils/pactl.c:1567 ../src/utils/pactl.c:1568
+#: ../src/utils/pactl.c:1569 ../src/utils/pactl.c:1570
+#: ../src/utils/pactl.c:1571 ../src/utils/pactl.c:1572
+#: ../src/utils/pactl.c:1573 ../src/utils/pactl.c:1574
+#: ../src/utils/pactl.c:1575 ../src/utils/pactl.c:1576
+#: ../src/utils/pactl.c:1577 ../src/utils/pactl.c:1578
+#: ../src/utils/pactl.c:1579 ../src/utils/pactl.c:1580
+#: ../src/utils/pactl.c:1581 ../src/utils/pactl.c:1582
+#: ../src/utils/pactl.c:1583
 msgid "[options]"
 msgstr "[opções]"
 
-#: ../src/utils/pactl.c:1568
+#: ../src/utils/pactl.c:1565
 msgid "[TYPE]"
 msgstr "[TIPO]"
 
-#: ../src/utils/pactl.c:1570
+#: ../src/utils/pactl.c:1567
 msgid "FILENAME [NAME]"
 msgstr "NOME_DE_ARQUIVO [NOME]"
 
-#: ../src/utils/pactl.c:1571
+#: ../src/utils/pactl.c:1568
 msgid "NAME [SINK]"
 msgstr "NOME [DESTINO]"
 
-#: ../src/utils/pactl.c:1580
+#: ../src/utils/pactl.c:1577
 msgid "NAME|#N VOLUME [VOLUME ...]"
 msgstr "NOME|#N VOLUME [VOLUME ...]"
 
-#: ../src/utils/pactl.c:1581
+#: ../src/utils/pactl.c:1578
 msgid "#N VOLUME [VOLUME ...]"
 msgstr "#N VOLUME [VOLUME ...]"
 
-#: ../src/utils/pactl.c:1582
+#: ../src/utils/pactl.c:1579
 msgid "NAME|#N 1|0|toggle"
 msgstr "NOME|#N 1|0|toggle"
 
-#: ../src/utils/pactl.c:1583
+#: ../src/utils/pactl.c:1580
 msgid "#N 1|0|toggle"
 msgstr "#N 1|0|toggle"
 
-#: ../src/utils/pactl.c:1584
+#: ../src/utils/pactl.c:1581
 msgid "#N FORMATS"
 msgstr "#N FORMATOS"
 
-#: ../src/utils/pactl.c:1587
+#: ../src/utils/pactl.c:1584
 #, c-format
 msgid ""
 "\n"
@@ -2992,7 +2868,7 @@ msgstr ""
 "podem ser usados para especificar o destino, a fonte e a monitoração "
 "padrão.\n"
 
-#: ../src/utils/pactl.c:1590
+#: ../src/utils/pactl.c:1587
 #, c-format
 msgid ""
 "\n"
@@ -3012,7 +2888,7 @@ msgstr ""
 "  -n, --client-name=NOME                Como chamar este cliente no "
 "servidor\n"
 
-#: ../src/utils/pactl.c:1631
+#: ../src/utils/pactl.c:1628
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -3023,60 +2899,60 @@ msgstr ""
 "Compilado com libpulse %s\n"
 "Vinculado com libpulse %s\n"
 
-#: ../src/utils/pactl.c:1690
+#: ../src/utils/pactl.c:1684
 #, c-format
 msgid "Specify nothing, or one of: %s"
 msgstr "Especifique nada ou uma de: %s"
 
-#: ../src/utils/pactl.c:1700
+#: ../src/utils/pactl.c:1694
 msgid "Please specify a sample file to load"
 msgstr "Por favor, especifique um arquivo de amostragem a ser carregado"
 
-#: ../src/utils/pactl.c:1713
+#: ../src/utils/pactl.c:1707
 msgid "Failed to open sound file."
 msgstr "Falha ao abrir o arquivo de som."
 
-#: ../src/utils/pactl.c:1725
+#: ../src/utils/pactl.c:1719
 msgid "Warning: Failed to determine sample specification from file."
 msgstr ""
 "Aviso: Falha ao determinar a especificação da amostragem a partir do arquivo."
 
-#: ../src/utils/pactl.c:1735
+#: ../src/utils/pactl.c:1729
 msgid "You have to specify a sample name to play"
 msgstr "Você deve especificar um nome para amostra a ser reproduzida"
 
-#: ../src/utils/pactl.c:1747
+#: ../src/utils/pactl.c:1741
 msgid "You have to specify a sample name to remove"
 msgstr "Você deve especificar um nome para a amostra a ser removida"
 
-#: ../src/utils/pactl.c:1756
+#: ../src/utils/pactl.c:1750
 msgid "You have to specify a sink input index and a sink"
 msgstr "Você deve especificar a entrada do destino e um destino"
 
-#: ../src/utils/pactl.c:1766
+#: ../src/utils/pactl.c:1760
 msgid "You have to specify a source output index and a source"
 msgstr "Você deve especificar um índice de saída da fonte e uma fonte"
 
-#: ../src/utils/pactl.c:1781
+#: ../src/utils/pactl.c:1775
 msgid "You have to specify a module name and arguments."
 msgstr "Você deve especificar um nome para o módulo e seus argumentos."
 
-#: ../src/utils/pactl.c:1801
+#: ../src/utils/pactl.c:1795
 msgid "You have to specify a module index or name"
 msgstr "Você deve especificar um nome ou índice do módulo"
 
-#: ../src/utils/pactl.c:1814
+#: ../src/utils/pactl.c:1808
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean value."
 msgstr ""
 "Você não pode especificar mais de um destino. Você deve especificar um valor "
 "booleano."
 
-#: ../src/utils/pactl.c:1819 ../src/utils/pactl.c:1839
+#: ../src/utils/pactl.c:1813 ../src/utils/pactl.c:1833
 msgid "Invalid suspend specification."
 msgstr "Especificação de suspensão inválida."
 
-#: ../src/utils/pactl.c:1834
+#: ../src/utils/pactl.c:1828
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value."
@@ -3084,83 +2960,93 @@ msgstr ""
 "Você não pode especificar mais de uma fonte. Você deve especificar um valor "
 "booleano."
 
-#: ../src/utils/pactl.c:1851
+#: ../src/utils/pactl.c:1845
 msgid "You have to specify a card name/index and a profile name"
 msgstr "Você deve especificar um nome/índice para a placa e um nome de perfil"
 
-#: ../src/utils/pactl.c:1862
+#: ../src/utils/pactl.c:1856
 msgid "You have to specify a sink name/index and a port name"
 msgstr "Você deve especificar um nome/índice do destino e o nome da porta"
 
-#: ../src/utils/pactl.c:1873
+#: ../src/utils/pactl.c:1867
 msgid "You have to specify a sink name"
 msgstr "Você deve especificar um nome de destino"
 
-#: ../src/utils/pactl.c:1883
+#: ../src/utils/pactl.c:1877
 msgid "You have to specify a source name/index and a port name"
 msgstr "Você deve especificar um nome/índice da fonte e o nome da porta"
 
-#: ../src/utils/pactl.c:1894
+#: ../src/utils/pactl.c:1888
 msgid "You have to specify a source name"
 msgstr "Você deve especificar um nome de fonte"
 
-#: ../src/utils/pactl.c:1904
+#: ../src/utils/pactl.c:1898
 msgid "You have to specify a sink name/index and a volume"
 msgstr "Você deve especificar um nome/índice do destino e um volume"
 
-#: ../src/utils/pactl.c:1917
+#: ../src/utils/pactl.c:1911
 msgid "You have to specify a source name/index and a volume"
 msgstr "Você deve especificar um nome/índice da fonte e um volume"
 
-#: ../src/utils/pactl.c:1930
+#: ../src/utils/pactl.c:1924
 msgid "You have to specify a sink input index and a volume"
 msgstr "Você deve especificar um índice de entrada para o destino e um volume"
 
-#: ../src/utils/pactl.c:1935
+#: ../src/utils/pactl.c:1929
 msgid "Invalid sink input index"
 msgstr "Índice de entrada de destino inválido"
 
-#: ../src/utils/pactl.c:1946
+#: ../src/utils/pactl.c:1940
 msgid "You have to specify a source output index and a volume"
 msgstr "Você deve especificar um índice de saída da fonte e um volume"
 
-#: ../src/utils/pactl.c:1951
+#: ../src/utils/pactl.c:1945
 msgid "Invalid source output index"
 msgstr "Índice de saída de fonte inválido"
 
-#: ../src/utils/pactl.c:1962
-msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Você deve especificar um nome/índice do destino e um booleano do mudo"
+#: ../src/utils/pactl.c:1956
+msgid ""
+"You have to specify a sink name/index and a mute action (0, 1, or 'toggle')"
+msgstr ""
+"Você deve especificar um nome/índice do destino e uma ação de mudo (0, 1 ou "
+"“toogle”)"
 
-#: ../src/utils/pactl.c:1967 ../src/utils/pactl.c:1982
-#: ../src/utils/pactl.c:2002 ../src/utils/pactl.c:2020
+#: ../src/utils/pactl.c:1961 ../src/utils/pactl.c:1976
+#: ../src/utils/pactl.c:1996 ../src/utils/pactl.c:2014
 msgid "Invalid mute specification"
 msgstr "Especificação de mudo inválida"
 
-#: ../src/utils/pactl.c:1977
-msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Você deve especificar um nome/índice da fonte e um booleano do mudo"
+#: ../src/utils/pactl.c:1971
+msgid ""
+"You have to specify a source name/index and a mute action (0, 1, or 'toggle')"
+msgstr ""
+"Você deve especificar um nome/índice da fonte e uma ação de mudo (0, 1 ou "
+"“toogle”)"
 
-#: ../src/utils/pactl.c:1992
-msgid "You have to specify a sink input index and a mute boolean"
+#: ../src/utils/pactl.c:1986
+msgid ""
+"You have to specify a sink input index and a mute action (0, 1, or 'toggle')"
 msgstr ""
-"Você deve especificar um índice de entrada para o destino e um booleano do "
-"mudo"
+"Você deve especificar um índice de entrada do destino e uma ação de mudo (0, "
+"1 ou “toogle”)"
 
-#: ../src/utils/pactl.c:1997
+#: ../src/utils/pactl.c:1991
 msgid "Invalid sink input index specification"
 msgstr "Especificação do índice de entrada de destino inválida"
 
-#: ../src/utils/pactl.c:2010
-msgid "You have to specify a source output index and a mute boolean"
+#: ../src/utils/pactl.c:2004
+msgid ""
+"You have to specify a source output index and a mute action (0, 1, or "
+"'toggle')"
 msgstr ""
-"Você deve especificar um índice da saída da fonte e um booleano do mudo"
+"Você deve especificar um índice de saída de fonte e uma ação de mudo (0, 1 "
+"ou “toogle”)"
 
-#: ../src/utils/pactl.c:2015
+#: ../src/utils/pactl.c:2009
 msgid "Invalid source output index specification"
 msgstr "Especificação do índice de saída de fonte inválida"
 
-#: ../src/utils/pactl.c:2032
+#: ../src/utils/pactl.c:2026
 msgid ""
 "You have to specify a sink index and a semicolon-separated list of supported "
 "formats"
@@ -3168,61 +3054,61 @@ msgstr ""
 "Você deve especificar um índice do destino e uma lista separada por ponto-e-"
 "vírgulas de formatos aceitos"
 
-#: ../src/utils/pactl.c:2044
+#: ../src/utils/pactl.c:2038
 msgid "You have to specify a card name/index, a port name and a latency offset"
 msgstr ""
 "Você deve especificar nome/índice de uma placa, um nome de porta e uma "
 "mudança de latência"
 
-#: ../src/utils/pactl.c:2051
+#: ../src/utils/pactl.c:2045
 msgid "Could not parse latency offset"
 msgstr "Não foi possível analisar a mudança da latência"
 
-#: ../src/utils/pactl.c:2063
+#: ../src/utils/pactl.c:2057
 msgid "No valid command specified."
 msgstr "Nenhum comando válido especificado."
 
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
 #, c-format
 msgid "fork(): %s\n"
 msgstr "fork(): %s\n"
 
-#: ../src/utils/pasuspender.c:94
+#: ../src/utils/pasuspender.c:92
 #, c-format
 msgid "execvp(): %s\n"
 msgstr "execvp(): %s\n"
 
-#: ../src/utils/pasuspender.c:113
+#: ../src/utils/pasuspender.c:111
 #, c-format
 msgid "Failure to resume: %s\n"
 msgstr "Falha ao prosseguir: %s\n"
 
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
 #, c-format
 msgid "Failure to suspend: %s\n"
 msgstr "Falha em suspender: %s\n"
 
-#: ../src/utils/pasuspender.c:172
+#: ../src/utils/pasuspender.c:170
 #, c-format
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr "AVISO: O servidor de som não é local, e não será suspenso.\n"
 
-#: ../src/utils/pasuspender.c:185
+#: ../src/utils/pasuspender.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Falha na conexão: %s\n"
 
-#: ../src/utils/pasuspender.c:203
+#: ../src/utils/pasuspender.c:201
 #, c-format
 msgid "Got SIGINT, exiting.\n"
 msgstr "Recebido o SIGINT, saindo.\n"
 
-#: ../src/utils/pasuspender.c:221
+#: ../src/utils/pasuspender.c:219
 #, c-format
 msgid "WARNING: Child process terminated by signal %u\n"
 msgstr "AVISO: O processo filho terminou pelo sinal %u\n"
 
-#: ../src/utils/pasuspender.c:230
+#: ../src/utils/pasuspender.c:228
 #, c-format
 msgid ""
 "%s [options] ... \n"
@@ -3240,7 +3126,7 @@ msgstr ""
 "  -s, --server=SERVIDOR                 Nome do servidor a ser conectado\n"
 "\n"
 
-#: ../src/utils/pasuspender.c:268
+#: ../src/utils/pasuspender.c:266
 #, c-format
 msgid ""
 "pasuspender %s\n"
@@ -3251,22 +3137,22 @@ msgstr ""
 "Compilado com libpulse %s\n"
 "Vinculado com libpulse %s\n"
 
-#: ../src/utils/pasuspender.c:297
+#: ../src/utils/pasuspender.c:295
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() falhou.\n"
 
-#: ../src/utils/pasuspender.c:310
+#: ../src/utils/pasuspender.c:308
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() falhou.\n"
 
-#: ../src/utils/pasuspender.c:322
+#: ../src/utils/pasuspender.c:320
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() falhou.\n"
 
-#: ../src/utils/pax11publish.c:60
+#: ../src/utils/pax11publish.c:58
 #, c-format
 msgid ""
 "%s [-D display] [-S server] [-O sink] [-I source] [-c file]  [-d|-e|-i|-r]\n"
@@ -3277,67 +3163,246 @@ msgid ""
 "variables and cookie file.\n"
 " -r    Remove PulseAudio data from X11 display\n"
 msgstr ""
-"%s [-D display] [-S servidor] [-O destino] [-I fonte] [-c arq.]  [-d|-e|-i|-"
+"%s [-D display] [-S servidor] [-O destino] [-I fonte] [-c arq.] [-d|-e|-i|-"
 "r]\n"
 "\n"
-" -d    Mostra os dados atuais do PulseAudio associados ao display X11 "
-"(padrão)\n"
-" -e    Exporta os dados locais do PulseAudio para um display X11\n"
-" -i    Importa os dados do PulseAudio de um display X11 para as variáveis "
-"de\n"
+" -d    Mostra dados atuais do PulseAudio associados ao display X11 (padrão)\n"
+" -e    Exporta dados locais do PulseAudio para um display X11\n"
+" -i    Importa dados do PulseAudio de um display X11 para as variáveis de\n"
 "       ambiente locais e para o arquivo de cookie.\n"
 " -r    Remove os dados do PulseAudio do display X11\n"
 
-#: ../src/utils/pax11publish.c:93
+#: ../src/utils/pax11publish.c:91
 #, c-format
 msgid "Failed to parse command line.\n"
 msgstr "Falha em interpretar a linha de comando.\n"
 
-#: ../src/utils/pax11publish.c:112
+#: ../src/utils/pax11publish.c:110
 #, c-format
 msgid "Server: %s\n"
 msgstr "Servidor: %s\n"
 
-#: ../src/utils/pax11publish.c:114
+#: ../src/utils/pax11publish.c:112
 #, c-format
 msgid "Source: %s\n"
 msgstr "Fonte: %s\n"
 
-#: ../src/utils/pax11publish.c:116
+#: ../src/utils/pax11publish.c:114
 #, c-format
 msgid "Sink: %s\n"
 msgstr "Destino: %s\n"
 
-#: ../src/utils/pax11publish.c:118
+#: ../src/utils/pax11publish.c:116
 #, c-format
 msgid "Cookie: %s\n"
 msgstr "Cookie: %s\n"
 
-#: ../src/utils/pax11publish.c:136
+#: ../src/utils/pax11publish.c:134
 #, c-format
 msgid "Failed to parse cookie data\n"
 msgstr "Falha ao analisar os dados do cookie\n"
 
-#: ../src/utils/pax11publish.c:141
+#: ../src/utils/pax11publish.c:139
 #, c-format
 msgid "Failed to save cookie data\n"
 msgstr "Falha ao salvar os dados do cookie\n"
 
-#: ../src/utils/pax11publish.c:170
+#: ../src/utils/pax11publish.c:168
 #, c-format
 msgid "Failed to get FQDN.\n"
 msgstr "Falha ao obter FQDN.\n"
 
-#: ../src/utils/pax11publish.c:190
+#: ../src/utils/pax11publish.c:188
 #, c-format
 msgid "Failed to load cookie data\n"
 msgstr "Falha ao carregar os dados do cookie\n"
 
-#: ../src/utils/pax11publish.c:208
+#: ../src/utils/pax11publish.c:206
 #, c-format
 msgid "Not yet implemented.\n"
 msgstr "Não implementado ainda.\n"
 
+#~ msgid "Cleaning up privileges."
+#~ msgstr "Limpando privilégios."
+
+#~ msgid "Got signal %s."
+#~ msgstr "Sinal %s recebido."
+
+#~ msgid "Exiting."
+#~ msgstr "Saindo."
+
+#~ msgid "Found user '%s' (UID %lu) and group '%s' (GID %lu)."
+#~ msgstr "Usuário \"%s\" (UID %lu) e grupo \"%s\" (GID %lu) localizados."
+
+#~ msgid "Successfully changed user to \""
+#~ msgstr "Usuário alterado com sucesso para \""
+
+#~ msgid "setrlimit(%s, (%u, %u)) failed: %s"
+#~ msgstr "setrlimit(%s, (%u, %u)) falhou: %s"
+
+#~ msgid "Daemon not running"
+#~ msgstr "O daemon não está em execução"
+
+#~ msgid "Daemon running as PID %u"
+#~ msgstr "Daemon executando como PID %u"
+
+#~ msgid "Daemon startup successful."
+#~ msgstr "Os daemons foram iniciados com sucesso."
+
+#~ msgid "This is PulseAudio %s"
+#~ msgstr "Este é o PulseAudio %s"
+
+#~ msgid "Compilation host: %s"
+#~ msgstr "Máquina da compilação: %s"
+
+#~ msgid "Compilation CFLAGS: %s"
+#~ msgstr "CFLAGS da compilação: %s"
+
+#~ msgid "Running on host: %s"
+#~ msgstr "Executando no host: %s"
+
+#~ msgid "Found %u CPUs."
+#~ msgstr "%u CPUs localizadas."
+
+#~ msgid "Page size is %lu bytes"
+#~ msgstr "O tamanho da página é %lu bytes"
+
+#~ msgid "Compiled with Valgrind support: yes"
+#~ msgstr "Compilado com suporte do Valgrind: sim"
+
+#~ msgid "Compiled with Valgrind support: no"
+#~ msgstr "Compilado com suporte do Valgrind: não"
+
+#~ msgid "Running in valgrind mode: %s"
+#~ msgstr "Executando em modo valgrind: %s"
+
+#~ msgid "Running in VM: %s"
+#~ msgstr "Executando na VM: %s"
+
+#~ msgid "Optimized build: yes"
+#~ msgstr "Build otimizado: sim"
+
+#~ msgid "Optimized build: no"
+#~ msgstr "Build otimizado: não"
+
+#~ msgid "NDEBUG defined, all asserts disabled."
+#~ msgstr "NDEBUG definido, todas as declarações desabilitadas."
+
+#~ msgid "FASTPATH defined, only fast path asserts disabled."
+#~ msgstr ""
+#~ "FASTPATH definido, somente as declarações do \"fast path\" foram "
+#~ "desabilitadas."
+
+#~ msgid "All asserts enabled."
+#~ msgstr "Todas as declarações habilitadas."
+
+#~ msgid "Machine ID is %s."
+#~ msgstr "O ID da máquina é %s."
+
+#~ msgid "Session ID is %s."
+#~ msgstr "O ID da sessão é %s."
+
+#~ msgid "Using runtime directory %s."
+#~ msgstr "Usando o diretório de runtime %s."
+
+#~ msgid "Using state directory %s."
+#~ msgstr "Usando o diretório de estado %s."
+
+#~ msgid "Using modules directory %s."
+#~ msgstr "Usando o diretório de módulos %s."
+
+#~ msgid "Running in system mode: %s"
+#~ msgstr "Executando em modo do sistema: %s"
+
+#~ msgid "Fresh high-resolution timers available! Bon appetit!"
+#~ msgstr "Timers de alta resolução fresquinhos disponíveis! Bon appetit!"
+
+#~ msgid ""
+#~ "Dude, your kernel stinks! The chef's recommendation today is Linux with "
+#~ "high-resolution timers enabled!"
+#~ msgstr ""
+#~ "Cara, seu kernel fede! A recomendação do chef hoje é Linux com timers de "
+#~ "alta resolução habilitados!"
+
+#~ msgid "Daemon startup complete."
+#~ msgstr "A inicialização do daemon foi concluída."
+
+#~ msgid "Daemon shutdown initiated."
+#~ msgstr "O encerramento do daemon foi iniciado."
+
+#~ msgid "Daemon terminated."
+#~ msgstr "Daemon terminado."
+
+#~ msgid "No cookie loaded. Attempting to connect without."
+#~ msgstr "Nenhum cookie foi carregado. Tentativa de conexão sem eles."
+
+#~ msgid ""
+#~ "%s [options]\n"
+#~ "\n"
+#~ "-h, --help                            Show this help\n"
+#~ "-v, --verbose                         Print debug messages\n"
+#~ "      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
+#~ "44100)\n"
+#~ "      --from-format=SAMPLEFORMAT      From sample type (defaults to "
+#~ "s16le)\n"
+#~ "      --from-channels=CHANNELS        From number of channels (defaults "
+#~ "to 1)\n"
+#~ "      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
+#~ "44100)\n"
+#~ "      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
+#~ "      --to-channels=CHANNELS          To number of channels (defaults to "
+#~ "1)\n"
+#~ "      --resample-method=METHOD        Resample method (defaults to auto)\n"
+#~ "      --seconds=SECONDS               From stream duration (defaults to "
+#~ "60)\n"
+#~ "\n"
+#~ "If the formats are not specified, the test performs all formats "
+#~ "combinations,\n"
+#~ "back and forth.\n"
+#~ "\n"
+#~ "Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
+#~ "alaw,\n"
+#~ "s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
+#~ "\n"
+#~ "See --dump-resample-methods for possible values of resample methods.\n"
+#~ msgstr ""
+#~ "%s [opções]\n"
+#~ "\n"
+#~ "-h, --help                            Mostra essa ajuda\n"
+#~ "-v, --verbose                         Mostra mensagens de depuração\n"
+#~ "      --from-rate=TAXA_DE_AMOSTRAGEM  De taxa de amostragem em Hz\n"
+#~ "                                      (padrão 44100)\n"
+#~ "      --from-format=FORMATO_DE_AMOSTRAGEM\n"
+#~ "                                      De tipo de amostragem (padrão "
+#~ "s16le)\n"
+#~ "      --from-channels=CANAIS          De Número de canais (padrão 1)\n"
+#~ "      --to-rate=TAXA_DE_AMOSTRAGEM      Para taxa de amostragem em Hz\n"
+#~ "                                      (padrão 44100)\n"
+#~ "      --to-format=FORMATO_DE_AMOSTRAGEM\n"
+#~ "                                      Para tipo de amostragem (padrão "
+#~ "s16le)\n"
+#~ "      --to-channels=CANAIS            Para número de canais (padrão 1)\n"
+#~ "      --resample-method=MÉTODO        Método de reamostragem (padrão "
+#~ "auto)\n"
+#~ "      --seconds=SEGUNDOS              De duração de fluxo (padrão 60)\n"
+#~ "\n"
+#~ "Se os formatos não forem especificados, o teste realiza todas as "
+#~ "combinações\n"
+#~ "de formatos, para trás e para frente.\n"
+#~ "\n"
+#~ "O tipo de amostragem deve ser um entre s16le, s16be, u8, float32le,\n"
+#~ "float32be, ulaw, alaw, s24le, s24be, s24-32le, s24-32be, s32le e s32be\n"
+#~ "(padrão s16ne)\n"
+#~ "\n"
+#~ "Veja --dump-resample-methods para valores possíveis de métodos de "
+#~ "amostragem.\n"
+
+#~ msgid "%s %s\n"
+#~ msgstr "%s %s\n"
+
+#~ msgid "=== %d seconds: %d Hz %d ch (%s) -> %d Hz %d ch (%s)"
+#~ msgstr "=== %d segundos: %d Hz %d ch (%s) -> %d Hz %d ch (%s)"
+
 #~ msgid "PulseAudio Sound System KDE Routing Policy"
 #~ msgstr "Política de roteamento do KDE para Sistema de som PulseAudio"
 
diff --git a/po/sv.po b/po/sv.po
index 683e28d..75db613 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,8 +1,8 @@
 # Swedish translation for pulseaudio.
-# Copyright © 2008-2014 Free Software Foundation, Inc.
+# Copyright © 2008-2017 Free Software Foundation, Inc.
 # This file is distributed under the same license as the pulseaudio package.
 # Daniel Nylander <po at danielnylander.se>, 2008, 2012.
-# Josef Andersson <josef.andersson at fripost.org>, 2014.
+# Josef Andersson <josef.andersson at fripost.org>, 2014, 2017.
 #
 #
 # Termer:
@@ -19,16 +19,16 @@ msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?"
 "product=PulseAudio&keywords=I18N+L10N&component=misc\n"
-"POT-Creation-Date: 2014-12-18 11:29+0000\n"
-"PO-Revision-Date: 2014-12-15 11:38+0100\n"
-"Last-Translator: Josef Andersson <josef.andersson at fripost.org>\n"
+"POT-Creation-Date: 2017-03-19 15:27+0000\n"
+"PO-Revision-Date: 2017-03-19 23:14+0100\n"
+"Last-Translator: Josef Andersson <l10nl18nsweja at gmail.com>\n"
 "Language-Team: Svenska <tp-sv at listor.tp-sv.se>\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Gtranslator 2.91.6\n"
+"X-Generator: Poedit 1.8.11\n"
 
 #: ../src/daemon/cmdline.c:113
 #, c-format
@@ -89,6 +89,7 @@ msgid ""
 "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
 "                                        platforms that support it.\n"
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+"      --enable-memfd[=BOOL]             Enable memfd shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
 "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
@@ -163,6 +164,8 @@ msgstr ""
 "belastningsbegränsare\n"
 "                                        på plattformar som stöder det.\n"
 "      --disable-shm[=BOOL]              Inaktivera stöd för delat minne.\n"
+"      --enable-memfd[=BOOL]             Aktivera stöd för memfd-delat "
+"minne.\n"
 "\n"
 "STARTSKRIPT:\n"
 "  -L, --load=”MODUL ARGUMENT”           Läs in den angivna insticksmodulen "
@@ -174,15 +177,15 @@ msgstr ""
 "\n"
 "  -n                                    Läs inte in standardskriptfil\n"
 
-#: ../src/daemon/cmdline.c:245
+#: ../src/daemon/cmdline.c:246
 msgid "--daemonize expects boolean argument"
 msgstr "--daemonize förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:253
+#: ../src/daemon/cmdline.c:254
 msgid "--fail expects boolean argument"
 msgstr "--fail förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:264
+#: ../src/daemon/cmdline.c:265
 msgid ""
 "--log-level expects log level argument (either numeric in range 0..4 or one "
 "of debug, info, notice, warn, error)."
@@ -190,133 +193,137 @@ msgstr ""
 "--log-level förväntar sig loggnivåargument (antagligen numeriska i "
 "intervallet 0..4 eller en av debug, info, notice, warn, error)."
 
-#: ../src/daemon/cmdline.c:276
+#: ../src/daemon/cmdline.c:277
 msgid "--high-priority expects boolean argument"
 msgstr "--high-priority förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:284
+#: ../src/daemon/cmdline.c:285
 msgid "--realtime expects boolean argument"
 msgstr "--realtime förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:292
+#: ../src/daemon/cmdline.c:293
 msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:300
+#: ../src/daemon/cmdline.c:301
 msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:308
+#: ../src/daemon/cmdline.c:309
 msgid "--use-pid-file expects boolean argument"
 msgstr "--use-pid-file förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:327
+#: ../src/daemon/cmdline.c:328
 msgid ""
 "Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a "
 "valid file name 'file:<path>', 'newfile:<path>'."
 msgstr ""
 "Ogiltigt mål för loggen: använd ”syslog”, ”journal”, ”stderr”, ”auto” eller "
-"ett giltigt filnamn ”file:<sökväg>“, ”newfile:<sökväg>”."
+"ett giltigt filnamn ”file:<sökväg>”, ”newfile:<sökväg>”."
 
-#: ../src/daemon/cmdline.c:329
+#: ../src/daemon/cmdline.c:330
 msgid ""
 "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
 "name 'file:<path>', 'newfile:<path>'."
 msgstr ""
 "Ogiltigt mål för loggen: använd ”syslog”, ”journal”, ”stderr”, ”auto” eller "
-"ett giltigt filnamn ”file:<sökväg>“, ”newfile:<sökväg>”."
+"ett giltigt filnamn ”file:<sökväg>”, ”newfile:<sökväg>”."
 
-#: ../src/daemon/cmdline.c:337
+#: ../src/daemon/cmdline.c:338
 msgid "--log-time expects boolean argument"
 msgstr "--log-time förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:345
+#: ../src/daemon/cmdline.c:346
 msgid "--log-meta expects boolean argument"
 msgstr "--log-meta förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:365
+#: ../src/daemon/cmdline.c:366
 #, c-format
 msgid "Invalid resample method '%s'."
 msgstr "Ogiltig omsamplingsmetod ”%s”."
 
-#: ../src/daemon/cmdline.c:372
+#: ../src/daemon/cmdline.c:373
 msgid "--system expects boolean argument"
 msgstr "--system förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:380
+#: ../src/daemon/cmdline.c:381
 msgid "--no-cpu-limit expects boolean argument"
 msgstr "--no-cpu-limit förväntar sig ett booleskt argument"
 
-#: ../src/daemon/cmdline.c:388
+#: ../src/daemon/cmdline.c:389
 msgid "--disable-shm expects boolean argument"
 msgstr "--disable-shm förväntar sig ett booleskt argument"
 
-#: ../src/daemon/daemon-conf.c:260
+#: ../src/daemon/cmdline.c:397
+msgid "--enable-memfd expects boolean argument"
+msgstr "--enable-memfd förväntar sig ett booleskt argument"
+
+#: ../src/daemon/daemon-conf.c:262
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Ogiltigt mål för loggen ”%s”."
 
-#: ../src/daemon/daemon-conf.c:275
+#: ../src/daemon/daemon-conf.c:277
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Ogiltig loggnivå ”%s”."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:292
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Ogiltig omsamplingsmetod ”%s”."
 
-#: ../src/daemon/daemon-conf.c:312
+#: ../src/daemon/daemon-conf.c:314
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] Ogiltig rlimit ”%s”."
 
-#: ../src/daemon/daemon-conf.c:332
+#: ../src/daemon/daemon-conf.c:334
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Ogiltigt samplingsformat ”%s”."
 
-#: ../src/daemon/daemon-conf.c:349 ../src/daemon/daemon-conf.c:366
+#: ../src/daemon/daemon-conf.c:351 ../src/daemon/daemon-conf.c:368
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Ogiltig samplingsfrekvens ”%s”."
 
-#: ../src/daemon/daemon-conf.c:389
+#: ../src/daemon/daemon-conf.c:391
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Ogiltiga samplingskanaler ”%s”."
 
-#: ../src/daemon/daemon-conf.c:406
+#: ../src/daemon/daemon-conf.c:408
 #, c-format
 msgid "[%s:%u] Invalid channel map '%s'."
 msgstr "[%s:%u] Ogiltig kanalmappning ”%s”."
 
-#: ../src/daemon/daemon-conf.c:423
+#: ../src/daemon/daemon-conf.c:425
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Ogiltigt antal fragment ”%s”."
 
-#: ../src/daemon/daemon-conf.c:440
+#: ../src/daemon/daemon-conf.c:442
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Ogiltig fragmentstorlek ”%s”."
 
-#: ../src/daemon/daemon-conf.c:457
+#: ../src/daemon/daemon-conf.c:459
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Ogiltig nice-nivå ”%s”."
 
-#: ../src/daemon/daemon-conf.c:500
+#: ../src/daemon/daemon-conf.c:502
 #, c-format
 msgid "[%s:%u] Invalid server type '%s'."
 msgstr "[%s:%u] Ogiltig servertyp ”%s”."
 
-#: ../src/daemon/daemon-conf.c:613
+#: ../src/daemon/daemon-conf.c:620
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Misslyckades med att öppna konfigurationsfil: %s"
 
-#: ../src/daemon/daemon-conf.c:629
+#: ../src/daemon/daemon-conf.c:636
 msgid ""
 "The specified default channel map has a different number of channels than "
 "the specified default number of channels."
@@ -324,122 +331,122 @@ msgstr ""
 "Den angivna standardkanalmappningen har ett annat antal kanaler än den "
 "angivna standardkanalmappningens antal."
 
-#: ../src/daemon/daemon-conf.c:716
+#: ../src/daemon/daemon-conf.c:723
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Läs från konfigurationsfilen: %s ###\n"
 
-#: ../src/daemon/dumpmodules.c:59
+#: ../src/daemon/dumpmodules.c:57
 #, c-format
 msgid "Name: %s\n"
 msgstr "Namn: %s\n"
 
-#: ../src/daemon/dumpmodules.c:62
+#: ../src/daemon/dumpmodules.c:60
 #, c-format
 msgid "No module information available\n"
 msgstr "Ingen modulinformation tillgänglig\n"
 
-#: ../src/daemon/dumpmodules.c:65
+#: ../src/daemon/dumpmodules.c:63
 #, c-format
 msgid "Version: %s\n"
 msgstr "Version: %s\n"
 
-#: ../src/daemon/dumpmodules.c:67
+#: ../src/daemon/dumpmodules.c:65
 #, c-format
 msgid "Description: %s\n"
 msgstr "Beskrivning: %s\n"
 
-#: ../src/daemon/dumpmodules.c:69
+#: ../src/daemon/dumpmodules.c:67
 #, c-format
 msgid "Author: %s\n"
 msgstr "Upphovsman: %s\n"
 
-#: ../src/daemon/dumpmodules.c:71
+#: ../src/daemon/dumpmodules.c:69
 #, c-format
 msgid "Usage: %s\n"
 msgstr "Användning: %s\n"
 
-#: ../src/daemon/dumpmodules.c:72
+#: ../src/daemon/dumpmodules.c:70
 #, c-format
 msgid "Load Once: %s\n"
 msgstr "Läs in en gång: %s\n"
 
-#: ../src/daemon/dumpmodules.c:74
+#: ../src/daemon/dumpmodules.c:72
 #, c-format
 msgid "DEPRECATION WARNING: %s\n"
 msgstr "FÖRÅLDRADVARNING: %s\n"
 
-#: ../src/daemon/dumpmodules.c:78
+#: ../src/daemon/dumpmodules.c:76
 #, c-format
 msgid "Path: %s\n"
 msgstr "Sökväg: %s\n"
 
-#: ../src/daemon/ltdl-bind-now.c:77
+#: ../src/daemon/ltdl-bind-now.c:75
 #, c-format
 msgid "Failed to open module %s: %s"
 msgstr "Misslyckades med att öppna modulen %s: %s"
 
-#: ../src/daemon/ltdl-bind-now.c:128
+#: ../src/daemon/ltdl-bind-now.c:126
 msgid "Failed to find original lt_dlopen loader."
 msgstr "Misslyckades med att hitta original-lt_dlopen loader."
 
-#: ../src/daemon/ltdl-bind-now.c:133
+#: ../src/daemon/ltdl-bind-now.c:131
 msgid "Failed to allocate new dl loader."
 msgstr "Misslyckades med att allokera en ny dl loader."
 
-#: ../src/daemon/ltdl-bind-now.c:146
+#: ../src/daemon/ltdl-bind-now.c:144
 msgid "Failed to add bind-now-loader."
 msgstr "Misslyckades med att lägga till bind-now-loader."
 
-#: ../src/daemon/main.c:162
+#: ../src/daemon/main.c:160
 #, c-format
 msgid "Failed to find user '%s'."
 msgstr "Misslyckades med att hitta användaren ”%s”."
 
-#: ../src/daemon/main.c:167
+#: ../src/daemon/main.c:165
 #, c-format
 msgid "Failed to find group '%s'."
 msgstr "Misslyckades med att hitta gruppen ”%s”."
 
-#: ../src/daemon/main.c:176
+#: ../src/daemon/main.c:174
 #, c-format
 msgid "GID of user '%s' and of group '%s' don't match."
 msgstr "GID för användare ”%s” och för grupp ”%s” stämmer inte överens."
 
-#: ../src/daemon/main.c:181
+#: ../src/daemon/main.c:179
 #, c-format
 msgid "Home directory of user '%s' is not '%s', ignoring."
 msgstr "Hemkatalogen för användaren ”%s” är inte ”%s”, ignorerar."
 
-#: ../src/daemon/main.c:184 ../src/daemon/main.c:189
+#: ../src/daemon/main.c:182 ../src/daemon/main.c:187
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Misslyckades med att skapa ”%s”: %s"
 
-#: ../src/daemon/main.c:196
+#: ../src/daemon/main.c:194
 #, c-format
 msgid "Failed to change group list: %s"
 msgstr "Misslyckades med att ändra grupplista: %s"
 
-#: ../src/daemon/main.c:212
+#: ../src/daemon/main.c:210
 #, c-format
 msgid "Failed to change GID: %s"
 msgstr "Misslyckades med att ändra GID: %s"
 
-#: ../src/daemon/main.c:228
+#: ../src/daemon/main.c:226
 #, c-format
 msgid "Failed to change UID: %s"
 msgstr "Misslyckades med att ändra UID: %s"
 
-#: ../src/daemon/main.c:257
+#: ../src/daemon/main.c:255
 msgid "System wide mode unsupported on this platform."
 msgstr "Systemomfattande läge stöds inte på denna plattform."
 
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:484
 msgid "Failed to parse command line."
 msgstr "Misslyckades med att tolka kommandoraden."
 
-#: ../src/daemon/main.c:525
+#: ../src/daemon/main.c:523
 msgid ""
 "System mode refused for non-root user. Only starting the D-Bus server lookup "
 "service."
@@ -447,12 +454,12 @@ msgstr ""
 "Systemläge vägrades för icke-rootanvändare. Startar bara D-Bus-"
 "serveruppslagningstjänsten."
 
-#: ../src/daemon/main.c:624
+#: ../src/daemon/main.c:622
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Misslyckades med att döda demonen: %s"
 
-#: ../src/daemon/main.c:653
+#: ../src/daemon/main.c:651
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -460,102 +467,101 @@ msgstr ""
 "Detta program är inte tänkt att köras som root (såvida inte --system har "
 "angivits)."
 
-#: ../src/daemon/main.c:656
+#: ../src/daemon/main.c:654
 msgid "Root privileges required."
 msgstr "Root-behörighet krävs."
 
-#: ../src/daemon/main.c:663
+#: ../src/daemon/main.c:661
 msgid "--start not supported for system instances."
 msgstr "--start stöds inte för systeminstanser."
 
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:701
 #, c-format
 msgid "User-configured server at %s, refusing to start/autospawn."
 msgstr "Användaranpassad server på %s, vägrar starta/autostarta."
 
-#: ../src/daemon/main.c:709
+#: ../src/daemon/main.c:707
 #, c-format
 msgid ""
 "User-configured server at %s, which appears to be local. Probing deeper."
 msgstr ""
 "Användaranpassad server på %s, som ser ut att vara lokal. Undersöker djupare."
 
-#: ../src/daemon/main.c:714
-msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "Kör i systemläge, men --disallow-exit är inte angett!"
+#: ../src/daemon/main.c:712
+msgid "Running in system mode, but --disallow-exit not set."
+msgstr "Kör i systemläge, men --disallow-exit är inte angett."
 
-#: ../src/daemon/main.c:717
-msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "Kör i systemläge, men --disallow-module-loading är inte angett!"
+#: ../src/daemon/main.c:715
+msgid "Running in system mode, but --disallow-module-loading not set."
+msgstr "Kör i systemläge, men --disallow-module-loading är inte angett."
 
-#: ../src/daemon/main.c:720
-msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr "Kör i systemläge, tvingar fram inaktivering av SHM-läge!"
+#: ../src/daemon/main.c:718
+msgid "Running in system mode, forcibly disabling SHM mode."
+msgstr "Kör i systemläge, tvingar fram inaktivering av SHM-läge."
 
-#: ../src/daemon/main.c:725
-msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "Kör i systemläge, tvingar fram avslut vid inaktivitet!"
+#: ../src/daemon/main.c:723
+msgid "Running in system mode, forcibly disabling exit idle time."
+msgstr "Kör i systemläge, tvingar fram avslut vid inaktivitet."
 
-#: ../src/daemon/main.c:758
+#: ../src/daemon/main.c:756
 msgid "Failed to acquire stdio."
 msgstr "Misslyckades med att få stdio."
 
-#: ../src/daemon/main.c:764 ../src/daemon/main.c:835
+#: ../src/daemon/main.c:762 ../src/daemon/main.c:833
 #, c-format
 msgid "pipe() failed: %s"
 msgstr "pipe() misslyckades: %s"
 
-#: ../src/daemon/main.c:769 ../src/daemon/main.c:840
+#: ../src/daemon/main.c:767 ../src/daemon/main.c:838
 #, c-format
 msgid "fork() failed: %s"
 msgstr "fork() misslyckades: %s"
 
-#: ../src/daemon/main.c:784 ../src/daemon/main.c:855 ../src/utils/pacat.c:569
+#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:562
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() misslyckades: %s"
 
-#: ../src/daemon/main.c:790
+#: ../src/daemon/main.c:788
 msgid "Daemon startup failed."
 msgstr "Demonstart misslyckades."
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:821
 #, c-format
 msgid "setsid() failed: %s"
 msgstr "setsid() misslyckades: %s"
 
-#: ../src/daemon/main.c:950
+#: ../src/daemon/main.c:948
 msgid "Failed to get machine ID"
 msgstr "Misslyckades med att hämta maskin-ID"
 
-#: ../src/daemon/main.c:976
+#: ../src/daemon/main.c:974
 msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
-"Please read http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode for an "
-"explanation why system mode is usually a bad idea."
+"OK, so you are running PA in system mode. Please make sure that you actually "
+"do want to do that.\n"
+"Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
+"Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
+"mode is usually a bad idea."
 msgstr ""
-"Ok, du kör PA i systemläge. Antagligen borde du inte göra detta.\n"
-"Om du ändå väljer att göra det är det ditt fel om saker inte fungerar som "
-"förväntat.\n"
-"Läs http://pulseaudio.org/wiki/WhatIsWrongWithSystemMode för en förklaring "
-"till varför systemläge är en dålig idé."
+"Ok, du kör PA i systemläge. Försäkra dig om att du verkligen vill göra "
+"detta.\n"
+"Läs http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/"
+"WhatIsWrongWithSystemWide/ för en förklaring till varför systemläge "
+"vanligtvis är en dålig idé."
 
-#: ../src/daemon/main.c:993
+#: ../src/daemon/main.c:990
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() misslyckades."
 
-#: ../src/daemon/main.c:1023
+#: ../src/daemon/main.c:1022
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() misslyckades."
 
-#: ../src/daemon/main.c:1090
+#: ../src/daemon/main.c:1092
 msgid "Failed to initialize daemon."
 msgstr "Misslyckades med att initiera demon."
 
-#: ../src/daemon/main.c:1095
+#: ../src/daemon/main.c:1097
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Demonen startade utan inlästa moduler, fungerar inte."
 
@@ -567,260 +573,295 @@ msgstr "PulseAudio ljudsystem"
 msgid "Start the PulseAudio Sound System"
 msgstr "Starta ljudsystemet PulseAudio"
 
-#: ../src/modules/alsa/alsa-mixer.c:2293
+#: ../src/modules/alsa/alsa-mixer.c:2378
 msgid "Input"
 msgstr "Ingång"
 
-#: ../src/modules/alsa/alsa-mixer.c:2294
+#: ../src/modules/alsa/alsa-mixer.c:2379
 msgid "Docking Station Input"
 msgstr "Ingång för dockningsstation"
 
-#: ../src/modules/alsa/alsa-mixer.c:2295
+#: ../src/modules/alsa/alsa-mixer.c:2380
 msgid "Docking Station Microphone"
 msgstr "Mikrofon för dockningsstation"
 
-#: ../src/modules/alsa/alsa-mixer.c:2296
+#: ../src/modules/alsa/alsa-mixer.c:2381
 msgid "Docking Station Line In"
 msgstr "Linje in för dockningsstation"
 
-#: ../src/modules/alsa/alsa-mixer.c:2297 ../src/modules/alsa/alsa-mixer.c:2382
+#: ../src/modules/alsa/alsa-mixer.c:2382 ../src/modules/alsa/alsa-mixer.c:2467
 msgid "Line In"
 msgstr "Linje in"
 
-#: ../src/modules/alsa/alsa-mixer.c:2298 ../src/modules/alsa/alsa-mixer.c:2376
-#: ../src/modules/bluetooth/module-bluez4-device.c:2104
-#: ../src/modules/bluetooth/module-bluez5-device.c:1712
+#: ../src/modules/alsa/alsa-mixer.c:2383 ../src/modules/alsa/alsa-mixer.c:2461
+#: ../src/modules/bluetooth/module-bluez4-device.c:2103
+#: ../src/modules/bluetooth/module-bluez5-device.c:1727
 msgid "Microphone"
 msgstr "Mikrofon"
 
-#: ../src/modules/alsa/alsa-mixer.c:2299 ../src/modules/alsa/alsa-mixer.c:2377
+#: ../src/modules/alsa/alsa-mixer.c:2384 ../src/modules/alsa/alsa-mixer.c:2462
 msgid "Front Microphone"
 msgstr "Frontmikrofon"
 
-#: ../src/modules/alsa/alsa-mixer.c:2300 ../src/modules/alsa/alsa-mixer.c:2378
+#: ../src/modules/alsa/alsa-mixer.c:2385 ../src/modules/alsa/alsa-mixer.c:2463
 msgid "Rear Microphone"
 msgstr "Bakre mikrofon"
 
-#: ../src/modules/alsa/alsa-mixer.c:2301
+#: ../src/modules/alsa/alsa-mixer.c:2386
 msgid "External Microphone"
 msgstr "Extern mikrofon"
 
-#: ../src/modules/alsa/alsa-mixer.c:2302 ../src/modules/alsa/alsa-mixer.c:2380
+#: ../src/modules/alsa/alsa-mixer.c:2387 ../src/modules/alsa/alsa-mixer.c:2465
 msgid "Internal Microphone"
 msgstr "Intern mikrofon"
 
-#: ../src/modules/alsa/alsa-mixer.c:2303 ../src/modules/alsa/alsa-mixer.c:2383
+#: ../src/modules/alsa/alsa-mixer.c:2388 ../src/modules/alsa/alsa-mixer.c:2468
 msgid "Radio"
 msgstr "Radio"
 
-#: ../src/modules/alsa/alsa-mixer.c:2304 ../src/modules/alsa/alsa-mixer.c:2384
+#: ../src/modules/alsa/alsa-mixer.c:2389 ../src/modules/alsa/alsa-mixer.c:2469
 msgid "Video"
 msgstr "Video"
 
-#: ../src/modules/alsa/alsa-mixer.c:2305
+#: ../src/modules/alsa/alsa-mixer.c:2390
 msgid "Automatic Gain Control"
 msgstr "Automatisk förstärkningskontroll"
 
-#: ../src/modules/alsa/alsa-mixer.c:2306
+#: ../src/modules/alsa/alsa-mixer.c:2391
 msgid "No Automatic Gain Control"
 msgstr "Ingen automatisk förstärkningskontroll"
 
-#: ../src/modules/alsa/alsa-mixer.c:2307
+#: ../src/modules/alsa/alsa-mixer.c:2392
 msgid "Boost"
 msgstr "Ökning"
 
-#: ../src/modules/alsa/alsa-mixer.c:2308
+#: ../src/modules/alsa/alsa-mixer.c:2393
 msgid "No Boost"
 msgstr "Ingen ökning"
 
-#: ../src/modules/alsa/alsa-mixer.c:2309
+#: ../src/modules/alsa/alsa-mixer.c:2394
 msgid "Amplifier"
 msgstr "Förstärkare"
 
-#: ../src/modules/alsa/alsa-mixer.c:2310
+#: ../src/modules/alsa/alsa-mixer.c:2395
 msgid "No Amplifier"
 msgstr "Ingen förstärkare"
 
-#: ../src/modules/alsa/alsa-mixer.c:2311
+#: ../src/modules/alsa/alsa-mixer.c:2396
 msgid "Bass Boost"
 msgstr "Basökning"
 
-#: ../src/modules/alsa/alsa-mixer.c:2312
+#: ../src/modules/alsa/alsa-mixer.c:2397
 msgid "No Bass Boost"
 msgstr "Ingen basökning"
 
-#: ../src/modules/alsa/alsa-mixer.c:2313
-#: ../src/modules/bluetooth/module-bluez4-device.c:2109
-#: ../src/modules/bluetooth/module-bluez5-device.c:1719
+#: ../src/modules/alsa/alsa-mixer.c:2398
+#: ../src/modules/bluetooth/module-bluez4-device.c:2108
+#: ../src/modules/bluetooth/module-bluez5-device.c:1734
 msgid "Speaker"
 msgstr "Högtalare"
 
-#: ../src/modules/alsa/alsa-mixer.c:2314 ../src/modules/alsa/alsa-mixer.c:2386
+#: ../src/modules/alsa/alsa-mixer.c:2399 ../src/modules/alsa/alsa-mixer.c:2471
 msgid "Headphones"
 msgstr "Hörlurar"
 
-#: ../src/modules/alsa/alsa-mixer.c:2375
+#: ../src/modules/alsa/alsa-mixer.c:2460
 msgid "Analog Input"
 msgstr "Analog ingång"
 
-#: ../src/modules/alsa/alsa-mixer.c:2379
+#: ../src/modules/alsa/alsa-mixer.c:2464
 msgid "Dock Microphone"
 msgstr "Dockmikrofon"
 
-#: ../src/modules/alsa/alsa-mixer.c:2381
+#: ../src/modules/alsa/alsa-mixer.c:2466
 msgid "Headset Microphone"
 msgstr "Headset-mikrofon"
 
-#: ../src/modules/alsa/alsa-mixer.c:2385
+#: ../src/modules/alsa/alsa-mixer.c:2470
 msgid "Analog Output"
 msgstr "Analog utgång"
 
-#: ../src/modules/alsa/alsa-mixer.c:2387
+#: ../src/modules/alsa/alsa-mixer.c:2472
 msgid "LFE on Separate Mono Output"
 msgstr "LFE på separat monoutgång"
 
-#: ../src/modules/alsa/alsa-mixer.c:2388
+#: ../src/modules/alsa/alsa-mixer.c:2473
 msgid "Line Out"
 msgstr "Linje ut"
 
-#: ../src/modules/alsa/alsa-mixer.c:2389
+#: ../src/modules/alsa/alsa-mixer.c:2474
 msgid "Analog Mono Output"
 msgstr "Analog monoutgång"
 
-#: ../src/modules/alsa/alsa-mixer.c:2390
+#: ../src/modules/alsa/alsa-mixer.c:2475
 msgid "Speakers"
 msgstr "Högtalare"
 
-#: ../src/modules/alsa/alsa-mixer.c:2391
+#: ../src/modules/alsa/alsa-mixer.c:2476
 msgid "HDMI / DisplayPort"
 msgstr "HDMI / DisplayPort"
 
-#: ../src/modules/alsa/alsa-mixer.c:2392
+#: ../src/modules/alsa/alsa-mixer.c:2477
 msgid "Digital Output (S/PDIF)"
 msgstr "Digital utgång (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2393
+#: ../src/modules/alsa/alsa-mixer.c:2478
 msgid "Digital Input (S/PDIF)"
 msgstr "Digital ingång (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2394
+#: ../src/modules/alsa/alsa-mixer.c:2479
 msgid "Digital Passthrough (S/PDIF)"
 msgstr "Digital genomströmning (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3900
+#: ../src/modules/alsa/alsa-mixer.c:2480
+msgid "Multichannel Input"
+msgstr "Multikanalingång"
+
+#: ../src/modules/alsa/alsa-mixer.c:2481
+msgid "Multichannel Output"
+msgstr "Multikanalutgång"
+
+#: ../src/modules/alsa/alsa-mixer.c:3990
 msgid "Analog Mono"
 msgstr "Analog mono"
 
-#: ../src/modules/alsa/alsa-mixer.c:3901
+#. Note: Not translated to "Analog Stereo Input", because the source
+#. * name gets "Input" appended to it automatically, so adding "Input"
+#. * here would lead to the source name to become "Analog Stereo Input
+#. * Input". The same logic applies to analog-stereo-output,
+#. * multichannel-input and multichannel-output.
+#: ../src/modules/alsa/alsa-mixer.c:3991 ../src/modules/alsa/alsa-mixer.c:3997
+#: ../src/modules/alsa/alsa-mixer.c:3998
 msgid "Analog Stereo"
 msgstr "Analog stereo"
 
-#: ../src/modules/alsa/alsa-mixer.c:3902
+#: ../src/modules/alsa/alsa-mixer.c:3999 ../src/modules/alsa/alsa-mixer.c:4000
 msgid "Multichannel"
 msgstr "Multikanal"
 
-#: ../src/modules/alsa/alsa-mixer.c:3903
+#: ../src/modules/alsa/alsa-mixer.c:4001
 msgid "Analog Surround 2.1"
 msgstr "Analog surround 2.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3904
+#: ../src/modules/alsa/alsa-mixer.c:4002
 msgid "Analog Surround 3.0"
 msgstr "Analog surround 3.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3905
+#: ../src/modules/alsa/alsa-mixer.c:4003
 msgid "Analog Surround 3.1"
 msgstr "Analog surround 3.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3906
+#: ../src/modules/alsa/alsa-mixer.c:4004
 msgid "Analog Surround 4.0"
 msgstr "Analog surround 4.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3907
+#: ../src/modules/alsa/alsa-mixer.c:4005
 msgid "Analog Surround 4.1"
 msgstr "Analog surround 4.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3908
+#: ../src/modules/alsa/alsa-mixer.c:4006
 msgid "Analog Surround 5.0"
 msgstr "Analog surround 5.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3909
+#: ../src/modules/alsa/alsa-mixer.c:4007
 msgid "Analog Surround 5.1"
 msgstr "Analog surround 5.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3910
+#: ../src/modules/alsa/alsa-mixer.c:4008
 msgid "Analog Surround 6.0"
 msgstr "Analog surround 6.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3911
+#: ../src/modules/alsa/alsa-mixer.c:4009
 msgid "Analog Surround 6.1"
 msgstr "Analog surround 6.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3912
+#: ../src/modules/alsa/alsa-mixer.c:4010
 msgid "Analog Surround 7.0"
 msgstr "Analog surround 7.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:3913
+#: ../src/modules/alsa/alsa-mixer.c:4011
 msgid "Analog Surround 7.1"
 msgstr "Analog surround 7.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:3914
+#: ../src/modules/alsa/alsa-mixer.c:4012
 msgid "Digital Stereo (IEC958)"
 msgstr "Digital stereo (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3915
+#: ../src/modules/alsa/alsa-mixer.c:4013
 msgid "Digital Passthrough  (IEC958)"
 msgstr "Digital genomströmning (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3916
+#: ../src/modules/alsa/alsa-mixer.c:4014
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr "Digital surround 4.0 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3917
+#: ../src/modules/alsa/alsa-mixer.c:4015
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr "Digital surround 5.1 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3918
+#: ../src/modules/alsa/alsa-mixer.c:4016
 msgid "Digital Surround 5.1 (IEC958/DTS)"
 msgstr "Digital surround 5.1 (IEC958/DTS)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3919
+#: ../src/modules/alsa/alsa-mixer.c:4017
 msgid "Digital Stereo (HDMI)"
 msgstr "Digital stereo (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:3920
+#: ../src/modules/alsa/alsa-mixer.c:4018
 msgid "Digital Surround 5.1 (HDMI)"
 msgstr "Digital surround 5.1 (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4051
+#: ../src/modules/alsa/alsa-mixer.c:4151
 msgid "Analog Mono Duplex"
 msgstr "Analog mono duplex"
 
-#: ../src/modules/alsa/alsa-mixer.c:4052
+#: ../src/modules/alsa/alsa-mixer.c:4152
 msgid "Analog Stereo Duplex"
 msgstr "Analog stereo duplex"
 
-#: ../src/modules/alsa/alsa-mixer.c:4053
+#: ../src/modules/alsa/alsa-mixer.c:4153
 msgid "Digital Stereo Duplex (IEC958)"
 msgstr "Digital stereo duplex (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4054
-#: ../src/modules/alsa/module-alsa-card.c:192
-#: ../src/modules/bluetooth/module-bluez4-device.c:2300
-#: ../src/modules/bluetooth/module-bluez5-device.c:1943
+#: ../src/modules/alsa/alsa-mixer.c:4154
+msgid "Multichannel Duplex"
+msgstr "Multikanalduplex"
+
+#: ../src/modules/alsa/alsa-mixer.c:4155
+#: ../src/modules/alsa/module-alsa-card.c:186
+#: ../src/modules/bluetooth/module-bluez4-device.c:2323
+#: ../src/modules/bluetooth/module-bluez5-device.c:1982
 msgid "Off"
 msgstr "Av"
 
-#: ../src/modules/alsa/alsa-mixer.c:4153
+#: ../src/modules/alsa/alsa-mixer.c:4254
 #, c-format
 msgid "%s Output"
 msgstr "%s utgång"
 
-#: ../src/modules/alsa/alsa-mixer.c:4161
+#: ../src/modules/alsa/alsa-mixer.c:4262
 #, c-format
 msgid "%s Input"
 msgstr "%s ingång"
 
-#: ../src/modules/alsa/alsa-sink.c:572 ../src/modules/alsa/alsa-sink.c:749
+#: ../src/modules/alsa/alsa-sink.c:572
+#, c-format
+msgid ""
+"ALSA woke us up to write new data to the device, but there was actually "
+"nothing to write.\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA väckte oss för att skriva ny data till enheten, men det fanns inget att "
+"skriva.\n"
+"Förmodligen är detta ett fel i ALSA-drivrutinen ”%s”. Vänligen rapportera "
+"detta problem till ALSA-utvecklarna.\n"
+"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+
+#: ../src/modules/alsa/alsa-sink.c:756
 #, c-format
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
@@ -837,7 +878,24 @@ msgstr ""
 "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
 "returned 0 or another value < min_avail."
 
-#: ../src/modules/alsa/alsa-source.c:531 ../src/modules/alsa/alsa-source.c:682
+#: ../src/modules/alsa/alsa-source.c:529
+#, c-format
+msgid ""
+"ALSA woke us up to read new data from the device, but there was actually "
+"nothing to read.\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+msgstr ""
+"ALSA väckte oss för att läsa ny data från enheten, men det fanns inget att "
+"läsa.\n"
+"Förmodligen är detta ett fel i ALSA-drivrutinen ”%s”. Vänligen rapportera "
+"detta problem till ALSA-utvecklarna.\n"
+"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
+"returned 0 or another value < min_avail."
+
+#: ../src/modules/alsa/alsa-source.c:680
 #, c-format
 msgid ""
 "ALSA woke us up to read new data from the device, but there was actually "
@@ -854,7 +912,7 @@ msgstr ""
 "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
 "returned 0 or another value < min_avail."
 
-#: ../src/modules/alsa/alsa-util.c:1136 ../src/modules/alsa/alsa-util.c:1211
+#: ../src/modules/alsa/alsa-util.c:1168 ../src/modules/alsa/alsa-util.c:1243
 #, c-format
 msgid ""
 "snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -867,7 +925,7 @@ msgstr ""
 "Förmodligen är detta ett fel i ALSA-drivrutinen ”%s”. Vänligen rapportera "
 "problemet till ALSA-utvecklarna."
 
-#: ../src/modules/alsa/alsa-util.c:1186
+#: ../src/modules/alsa/alsa-util.c:1218
 #, c-format
 msgid ""
 "snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s"
@@ -880,7 +938,7 @@ msgstr ""
 "Förmodligen är detta ett fel i ALSA-drivrutinen ”%s”. Vänligen rapportera "
 "problemet till ALSA-utvecklarna."
 
-#: ../src/modules/alsa/alsa-util.c:1227
+#: ../src/modules/alsa/alsa-util.c:1259
 #, c-format
 msgid ""
 "snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
@@ -893,7 +951,7 @@ msgstr ""
 "Förmodligen är detta ett fel i ALSA-drivrutinen ”%s”. Vänligen rapportera "
 "problemet till ALSA-utvecklarna."
 
-#: ../src/modules/alsa/alsa-util.c:1270
+#: ../src/modules/alsa/alsa-util.c:1302
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -906,89 +964,89 @@ msgstr ""
 "Förmodligen är detta ett fel i ALSA-drivrutinen ”%s”. Vänligen rapportera "
 "problemet till ALSA-utvecklarna."
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2094
-#: ../src/modules/bluetooth/module-bluez5-device.c:1702
+#: ../src/modules/bluetooth/module-bluez4-device.c:2093
+#: ../src/modules/bluetooth/module-bluez5-device.c:1717
 msgid "Headset"
 msgstr "Headset"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2099
-#: ../src/modules/bluetooth/module-bluez5-device.c:1707
+#: ../src/modules/bluetooth/module-bluez4-device.c:2098
+#: ../src/modules/bluetooth/module-bluez5-device.c:1722
 msgid "Handsfree"
 msgstr "Handsfree"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2114
-#: ../src/modules/bluetooth/module-bluez5-device.c:1725
+#: ../src/modules/bluetooth/module-bluez4-device.c:2113
+#: ../src/modules/bluetooth/module-bluez5-device.c:1740
 msgid "Headphone"
 msgstr "Hörlurar"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2119
-#: ../src/modules/bluetooth/module-bluez5-device.c:1730
+#: ../src/modules/bluetooth/module-bluez4-device.c:2118
+#: ../src/modules/bluetooth/module-bluez5-device.c:1745
 msgid "Portable"
 msgstr "Bärbar"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2124
-#: ../src/modules/bluetooth/module-bluez5-device.c:1735
+#: ../src/modules/bluetooth/module-bluez4-device.c:2123
+#: ../src/modules/bluetooth/module-bluez5-device.c:1750
 msgid "Car"
 msgstr "Bil"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2129
-#: ../src/modules/bluetooth/module-bluez5-device.c:1740
+#: ../src/modules/bluetooth/module-bluez4-device.c:2128
+#: ../src/modules/bluetooth/module-bluez5-device.c:1755
 msgid "HiFi"
 msgstr "HiFi"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2134
-#: ../src/modules/bluetooth/module-bluez5-device.c:1745
+#: ../src/modules/bluetooth/module-bluez4-device.c:2133
+#: ../src/modules/bluetooth/module-bluez5-device.c:1760
 msgid "Phone"
 msgstr "Telefon"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2142
-#: ../src/modules/bluetooth/module-bluez5-device.c:1697
-#: ../src/modules/bluetooth/module-bluez5-device.c:1713
-#: ../src/modules/bluetooth/module-bluez5-device.c:1751
+#: ../src/modules/bluetooth/module-bluez4-device.c:2141
+#: ../src/modules/bluetooth/module-bluez5-device.c:1712
+#: ../src/modules/bluetooth/module-bluez5-device.c:1728
+#: ../src/modules/bluetooth/module-bluez5-device.c:1766
 msgid "Bluetooth Output"
 msgstr "Bluetooth-utgång"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2145
-#: ../src/modules/bluetooth/module-bluez5-device.c:1696
-#: ../src/modules/bluetooth/module-bluez5-device.c:1718
-#: ../src/modules/bluetooth/module-bluez5-device.c:1724
-#: ../src/modules/bluetooth/module-bluez5-device.c:1750
+#: ../src/modules/bluetooth/module-bluez4-device.c:2144
+#: ../src/modules/bluetooth/module-bluez5-device.c:1711
+#: ../src/modules/bluetooth/module-bluez5-device.c:1733
+#: ../src/modules/bluetooth/module-bluez5-device.c:1739
+#: ../src/modules/bluetooth/module-bluez5-device.c:1765
 msgid "Bluetooth Input"
 msgstr "Bluetooth-ingång"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2181
+#: ../src/modules/bluetooth/module-bluez4-device.c:2185
 msgid "High Fidelity Playback (A2DP)"
 msgstr "High fidelity playback (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2192
+#: ../src/modules/bluetooth/module-bluez4-device.c:2197
 msgid "High Fidelity Capture (A2DP)"
 msgstr "High fidelity capture (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2203
+#: ../src/modules/bluetooth/module-bluez4-device.c:2209
 msgid "Telephony Duplex (HSP/HFP)"
 msgstr "Telephony duplex (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2215
+#: ../src/modules/bluetooth/module-bluez4-device.c:2222
 msgid "Handsfree Gateway"
 msgstr "Handsfree gateway"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1788
+#: ../src/modules/bluetooth/module-bluez5-device.c:1807
 msgid "High Fidelity Playback (A2DP Sink)"
 msgstr "High fidelity playback (A2DP Sink)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1799
+#: ../src/modules/bluetooth/module-bluez5-device.c:1819
 msgid "High Fidelity Capture (A2DP Source)"
 msgstr "High fidelity capture (A2DP Source)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1810
+#: ../src/modules/bluetooth/module-bluez5-device.c:1831
 msgid "Headset Head Unit (HSP/HFP)"
 msgstr "Headset head unit (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1822
+#: ../src/modules/bluetooth/module-bluez5-device.c:1844
 msgid "Headset Audio Gateway (HSP/HFP)"
 msgstr "Headset audio gateway (HSP/HFP)"
 
-#: ../src/modules/echo-cancel/module-echo-cancel.c:63
+#: ../src/modules/echo-cancel/module-echo-cancel.c:61
 msgid ""
 "source_name=<name for the source> source_properties=<properties for the "
 "source> source_master=<name of source to filter> sink_name=<name for the "
@@ -998,37 +1056,39 @@ msgid ""
 "rate> channels=<number of channels> channel_map=<channel map> "
 "aec_method=<implementation to use> aec_args=<parameters for the AEC engine> "
 "save_aec=<save AEC data in /tmp> autoloaded=<set if this module is being "
-"loaded automatically> use_volume_sharing=<yes or no> "
+"loaded automatically> use_volume_sharing=<yes or no> use_master_format=<yes "
+"or no> "
 msgstr ""
 "source_name=<namn på källa> source_properties=<egenskaper för källa> "
 "source_master=<namn på källa att filtrera> sink_name=<namn på mottagare> "
 "sink_properties=<egenskaper för mottagare> sink_master=<namn på mottagare "
-"att filtrera> adjust_time=<hur ofta frekvens ska justeras> "
+"att filtrera> adjust_time=<hur ofta frekvens ska justeras i s> "
 "adjust_threshold=<hur mycket avsteg ska justeras i ms> "
 "format=<samplingsformat> rate=<samplingshastighet> channels=<antal kanaler> "
 "channel_map=<kanalmappning> aec_method=<implementation att använda> "
 "aec_args=<parametrar för AEC-motorn> save_aec=<spara AEC-data i /tmp> "
 "autoloaded=<ange om denna modul läses in automatiskt> use_volume_sharing=<ja "
-"eller nej> "
+"eller nej> use_master_format=<ja eller nej> "
 
 #. add on profile
-#: ../src/modules/macosx/module-coreaudio-device.c:756
+#: ../src/modules/macosx/module-coreaudio-device.c:811
 msgid "On"
 msgstr "På"
 
-#: ../src/modules/module-always-sink.c:38
-msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "Håll alltid minst en mottagare inläst även om den är null"
-
+#: ../src/modules/module-allow-passthrough.c:73
 #: ../src/modules/module-always-sink.c:82
 msgid "Dummy Output"
 msgstr "Attrapputgång"
 
-#: ../src/modules/module-equalizer-sink.c:72
+#: ../src/modules/module-always-sink.c:36
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr "Håll alltid minst en mottagare inläst även om den är null"
+
+#: ../src/modules/module-equalizer-sink.c:70
 msgid "General Purpose Equalizer"
 msgstr "Allmän equalizer"
 
-#: ../src/modules/module-equalizer-sink.c:76
+#: ../src/modules/module-equalizer-sink.c:74
 msgid ""
 "sink_name=<name of the sink> sink_properties=<properties for the sink> "
 "sink_master=<sink to connect to> format=<sample format> rate=<sample rate> "
@@ -1041,15 +1101,15 @@ msgstr ""
 "channel_map=<kanalmappning> autoloaded=<om denna modul läses in automatiskt> "
 "use_volume_sharing=<ja eller nej> "
 
-#: ../src/modules/module-filter-apply.c:48
+#: ../src/modules/module-filter-apply.c:47
 msgid "autoclean=<automatically unload unused filters?>"
 msgstr "autoclean=<automatiskt inaktivera oanvända filter?>"
 
-#: ../src/modules/module-ladspa-sink.c:53
+#: ../src/modules/module-ladspa-sink.c:51
 msgid "Virtual LADSPA sink"
 msgstr "Virtual LADSPA-mottagare"
 
-#: ../src/modules/module-ladspa-sink.c:57
+#: ../src/modules/module-ladspa-sink.c:55
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
 "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
@@ -1068,49 +1128,49 @@ msgstr ""
 "LADSPA-portnamn för ingång> output_ladspaport_map=<kommaseparerad lista över "
 "LADSPA-portnamn för utgång> "
 
-#: ../src/modules/module-null-sink.c:49
+#: ../src/modules/module-null-sink.c:47
 msgid "Clocked NULL sink"
 msgstr "Klockad NULL-mottagare"
 
-#: ../src/modules/module-null-sink.c:280
+#: ../src/modules/module-null-sink.c:284
 msgid "Null Output"
 msgstr "Nullutgång"
 
-#: ../src/modules/module-rygel-media-server.c:510
-#: ../src/modules/module-rygel-media-server.c:548
-#: ../src/modules/module-rygel-media-server.c:907
+#: ../src/modules/module-rygel-media-server.c:508
+#: ../src/modules/module-rygel-media-server.c:546
+#: ../src/modules/module-rygel-media-server.c:905
 msgid "Output Devices"
 msgstr "Utgångsenheter"
 
-#: ../src/modules/module-rygel-media-server.c:511
-#: ../src/modules/module-rygel-media-server.c:549
-#: ../src/modules/module-rygel-media-server.c:908
+#: ../src/modules/module-rygel-media-server.c:509
+#: ../src/modules/module-rygel-media-server.c:547
+#: ../src/modules/module-rygel-media-server.c:906
 msgid "Input Devices"
 msgstr "Ingångsenheter"
 
-#: ../src/modules/module-rygel-media-server.c:1065
+#: ../src/modules/module-rygel-media-server.c:1063
 msgid "Audio on @HOSTNAME@"
 msgstr "Ljud på @HOSTNAME@"
 
 #. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis at lazus'
 #. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis at lazus'
-#: ../src/modules/module-tunnel-sink-new.c:300
-#: ../src/modules/module-tunnel-source-new.c:307
+#: ../src/modules/module-tunnel-sink-new.c:307
+#: ../src/modules/module-tunnel-source-new.c:305
 #, c-format
 msgid "Tunnel for %s@%s"
 msgstr "Tunnel för %s@%s"
 
-#: ../src/modules/module-tunnel-sink-new.c:510
-#: ../src/modules/module-tunnel-source-new.c:518
+#: ../src/modules/module-tunnel-sink-new.c:521
+#: ../src/modules/module-tunnel-source-new.c:520
 #, c-format
 msgid "Tunnel to %s/%s"
 msgstr "Tunnel till %s/%s"
 
-#: ../src/modules/module-virtual-surround-sink.c:49
+#: ../src/modules/module-virtual-surround-sink.c:47
 msgid "Virtual surround sink"
 msgstr "Virtual surround-mottagare"
 
-#: ../src/modules/module-virtual-surround-sink.c:53
+#: ../src/modules/module-virtual-surround-sink.c:51
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
 "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
@@ -1124,707 +1184,650 @@ msgstr ""
 "channel_map=<kanalmappning> use_volume_sharing=<ja eller nej> "
 "force_flat_volume=<ja eller nej> hrir=/path/to/left_hrir.wav "
 
-#: ../src/modules/reserve-wrap.c:151
+#: ../src/modules/reserve-wrap.c:149
 msgid "PulseAudio Sound Server"
 msgstr "PulseAudio ljudserver"
 
-#: ../src/pulse/channelmap.c:105 ../src/pulse/channelmap.c:760
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:771
 msgid "Mono"
 msgstr "Mono"
 
-#: ../src/pulse/channelmap.c:107
+#: ../src/pulse/channelmap.c:105
 msgid "Front Center"
 msgstr "Center fram"
 
-#: ../src/pulse/channelmap.c:108
+#: ../src/pulse/channelmap.c:106
 msgid "Front Left"
 msgstr "Vänster fram"
 
-#: ../src/pulse/channelmap.c:109
+#: ../src/pulse/channelmap.c:107
 msgid "Front Right"
 msgstr "Höger fram"
 
-#: ../src/pulse/channelmap.c:111
+#: ../src/pulse/channelmap.c:109
 msgid "Rear Center"
 msgstr "Center bak"
 
-#: ../src/pulse/channelmap.c:112
+#: ../src/pulse/channelmap.c:110
 msgid "Rear Left"
 msgstr "Vänster bak"
 
-#: ../src/pulse/channelmap.c:113
+#: ../src/pulse/channelmap.c:111
 msgid "Rear Right"
 msgstr "Höger bak"
 
-#: ../src/pulse/channelmap.c:115
+#: ../src/pulse/channelmap.c:113
 msgid "Subwoofer"
 msgstr "Subwoofer"
 
-#: ../src/pulse/channelmap.c:117
+#: ../src/pulse/channelmap.c:115
 msgid "Front Left-of-center"
 msgstr "Vänster-om-center fram"
 
-#: ../src/pulse/channelmap.c:118
+#: ../src/pulse/channelmap.c:116
 msgid "Front Right-of-center"
 msgstr "Höger-om-center fram"
 
-#: ../src/pulse/channelmap.c:120
+#: ../src/pulse/channelmap.c:118
 msgid "Side Left"
 msgstr "Vänster sida"
 
-#: ../src/pulse/channelmap.c:121
+#: ../src/pulse/channelmap.c:119
 msgid "Side Right"
 msgstr "Höger sida"
 
-#: ../src/pulse/channelmap.c:123
+#: ../src/pulse/channelmap.c:121
 msgid "Auxiliary 0"
 msgstr "Auxiliary 0"
 
-#: ../src/pulse/channelmap.c:124
+#: ../src/pulse/channelmap.c:122
 msgid "Auxiliary 1"
 msgstr "Auxiliary 1"
 
-#: ../src/pulse/channelmap.c:125
+#: ../src/pulse/channelmap.c:123
 msgid "Auxiliary 2"
 msgstr "Auxiliary 2"
 
-#: ../src/pulse/channelmap.c:126
+#: ../src/pulse/channelmap.c:124
 msgid "Auxiliary 3"
 msgstr "Auxiliary 3"
 
-#: ../src/pulse/channelmap.c:127
+#: ../src/pulse/channelmap.c:125
 msgid "Auxiliary 4"
 msgstr "Auxiliary 4"
 
-#: ../src/pulse/channelmap.c:128
+#: ../src/pulse/channelmap.c:126
 msgid "Auxiliary 5"
 msgstr "Auxiliary 5"
 
-#: ../src/pulse/channelmap.c:129
+#: ../src/pulse/channelmap.c:127
 msgid "Auxiliary 6"
 msgstr "Auxiliary 6"
 
-#: ../src/pulse/channelmap.c:130
+#: ../src/pulse/channelmap.c:128
 msgid "Auxiliary 7"
 msgstr "Auxiliary 7"
 
-#: ../src/pulse/channelmap.c:131
+#: ../src/pulse/channelmap.c:129
 msgid "Auxiliary 8"
 msgstr "Auxiliary 8"
 
-#: ../src/pulse/channelmap.c:132
+#: ../src/pulse/channelmap.c:130
 msgid "Auxiliary 9"
 msgstr "Auxiliary 9"
 
-#: ../src/pulse/channelmap.c:133
+#: ../src/pulse/channelmap.c:131
 msgid "Auxiliary 10"
 msgstr "Auxiliary 10"
 
-#: ../src/pulse/channelmap.c:134
+#: ../src/pulse/channelmap.c:132
 msgid "Auxiliary 11"
 msgstr "Auxiliary 11"
 
-#: ../src/pulse/channelmap.c:135
+#: ../src/pulse/channelmap.c:133
 msgid "Auxiliary 12"
 msgstr "Auxiliary 12"
 
-#: ../src/pulse/channelmap.c:136
+#: ../src/pulse/channelmap.c:134
 msgid "Auxiliary 13"
 msgstr "Auxiliary 13"
 
-#: ../src/pulse/channelmap.c:137
+#: ../src/pulse/channelmap.c:135
 msgid "Auxiliary 14"
 msgstr "Auxiliary 14"
 
-#: ../src/pulse/channelmap.c:138
+#: ../src/pulse/channelmap.c:136
 msgid "Auxiliary 15"
 msgstr "Auxiliary 15"
 
-#: ../src/pulse/channelmap.c:139
+#: ../src/pulse/channelmap.c:137
 msgid "Auxiliary 16"
 msgstr "Auxiliary 16"
 
-#: ../src/pulse/channelmap.c:140
+#: ../src/pulse/channelmap.c:138
 msgid "Auxiliary 17"
 msgstr "Auxiliary 17"
 
-#: ../src/pulse/channelmap.c:141
+#: ../src/pulse/channelmap.c:139
 msgid "Auxiliary 18"
 msgstr "Auxiliary 18"
 
-#: ../src/pulse/channelmap.c:142
+#: ../src/pulse/channelmap.c:140
 msgid "Auxiliary 19"
 msgstr "Auxiliary 19"
 
-#: ../src/pulse/channelmap.c:143
+#: ../src/pulse/channelmap.c:141
 msgid "Auxiliary 20"
 msgstr "Auxiliary 20"
 
-#: ../src/pulse/channelmap.c:144
+#: ../src/pulse/channelmap.c:142
 msgid "Auxiliary 21"
 msgstr "Auxiliary 21"
 
-#: ../src/pulse/channelmap.c:145
+#: ../src/pulse/channelmap.c:143
 msgid "Auxiliary 22"
 msgstr "Auxiliary 22"
 
-#: ../src/pulse/channelmap.c:146
+#: ../src/pulse/channelmap.c:144
 msgid "Auxiliary 23"
 msgstr "Auxiliary 23"
 
-#: ../src/pulse/channelmap.c:147
+#: ../src/pulse/channelmap.c:145
 msgid "Auxiliary 24"
 msgstr "Auxiliary 24"
 
-#: ../src/pulse/channelmap.c:148
+#: ../src/pulse/channelmap.c:146
 msgid "Auxiliary 25"
 msgstr "Auxiliary 25"
 
-#: ../src/pulse/channelmap.c:149
+#: ../src/pulse/channelmap.c:147
 msgid "Auxiliary 26"
 msgstr "Auxiliary 26"
 
-#: ../src/pulse/channelmap.c:150
+#: ../src/pulse/channelmap.c:148
 msgid "Auxiliary 27"
 msgstr "Auxiliary 27"
 
-#: ../src/pulse/channelmap.c:151
+#: ../src/pulse/channelmap.c:149
 msgid "Auxiliary 28"
 msgstr "Auxiliary 28"
 
-#: ../src/pulse/channelmap.c:152
+#: ../src/pulse/channelmap.c:150
 msgid "Auxiliary 29"
 msgstr "Auxiliary 29"
 
-#: ../src/pulse/channelmap.c:153
+#: ../src/pulse/channelmap.c:151
 msgid "Auxiliary 30"
 msgstr "Auxiliary 30"
 
-#: ../src/pulse/channelmap.c:154
+#: ../src/pulse/channelmap.c:152
 msgid "Auxiliary 31"
 msgstr "Auxiliary 31"
 
-#: ../src/pulse/channelmap.c:156
+#: ../src/pulse/channelmap.c:154
 msgid "Top Center"
 msgstr "Topp mitten"
 
-#: ../src/pulse/channelmap.c:158
+#: ../src/pulse/channelmap.c:156
 msgid "Top Front Center"
 msgstr "Topp fram mitten"
 
-#: ../src/pulse/channelmap.c:159
+#: ../src/pulse/channelmap.c:157
 msgid "Top Front Left"
 msgstr "Topp fram vänster"
 
-#: ../src/pulse/channelmap.c:160
+#: ../src/pulse/channelmap.c:158
 msgid "Top Front Right"
 msgstr "Upp fram höger"
 
-#: ../src/pulse/channelmap.c:162
+#: ../src/pulse/channelmap.c:160
 msgid "Top Rear Center"
 msgstr "Topp bak mitten"
 
-#: ../src/pulse/channelmap.c:163
+#: ../src/pulse/channelmap.c:161
 msgid "Top Rear Left"
 msgstr "Topp bak vänster"
 
-#: ../src/pulse/channelmap.c:164
+#: ../src/pulse/channelmap.c:162
 msgid "Top Rear Right"
 msgstr "Topp bak höger"
 
-#: ../src/pulse/channelmap.c:481 ../src/pulse/format.c:123
-#: ../src/pulse/sample.c:177 ../src/pulse/volume.c:296
-#: ../src/pulse/volume.c:322 ../src/pulse/volume.c:342
-#: ../src/pulse/volume.c:374 ../src/pulse/volume.c:414
-#: ../src/pulse/volume.c:433
+#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:121
+#: ../src/pulse/sample.c:174 ../src/pulse/volume.c:294
+#: ../src/pulse/volume.c:320 ../src/pulse/volume.c:340
+#: ../src/pulse/volume.c:372 ../src/pulse/volume.c:412
+#: ../src/pulse/volume.c:431
 msgid "(invalid)"
 msgstr "(ogiltig)"
 
-#: ../src/pulse/channelmap.c:764
+#: ../src/pulse/channelmap.c:775
 msgid "Stereo"
 msgstr "Stereo"
 
-#: ../src/pulse/channelmap.c:769
+#: ../src/pulse/channelmap.c:780
 msgid "Surround 4.0"
 msgstr "Surround 4.0"
 
-#: ../src/pulse/channelmap.c:775
+#: ../src/pulse/channelmap.c:786
 msgid "Surround 4.1"
 msgstr "Surround 4.1"
 
-#: ../src/pulse/channelmap.c:781
+#: ../src/pulse/channelmap.c:792
 msgid "Surround 5.0"
 msgstr "Surround 5.0"
 
-#: ../src/pulse/channelmap.c:787
+#: ../src/pulse/channelmap.c:798
 msgid "Surround 5.1"
 msgstr "Surround 5.1"
 
-#: ../src/pulse/channelmap.c:794
+#: ../src/pulse/channelmap.c:805
 msgid "Surround 7.1"
 msgstr "Surround 7.1"
 
-#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:99
+#: ../src/pulse/client-conf-x11.c:53 ../src/utils/pax11publish.c:97
 msgid "xcb_connect() failed"
 msgstr "xcb_connect() misslyckades"
 
-#: ../src/pulse/client-conf-x11.c:60 ../src/utils/pax11publish.c:104
+#: ../src/pulse/client-conf-x11.c:58 ../src/utils/pax11publish.c:102
 msgid "xcb_connection_has_error() returned true"
 msgstr "xcb_connection_has_error() returnerade true"
 
-#: ../src/pulse/client-conf-x11.c:96
+#: ../src/pulse/client-conf-x11.c:94
 msgid "Failed to parse cookie data"
 msgstr "Misslyckades med att tolka kakdata"
 
-#: ../src/pulse/context.c:658
+#: ../src/pulse/context.c:702
 #, c-format
 msgid "fork(): %s"
 msgstr "fork(): %s"
 
-#: ../src/pulse/context.c:713
+#: ../src/pulse/context.c:757
 #, c-format
 msgid "waitpid(): %s"
 msgstr "waitpid(): %s"
 
-#: ../src/pulse/context.c:1414
+#: ../src/pulse/context.c:1463
 #, c-format
 msgid "Received message for unknown extension '%s'"
 msgstr "Tog emot meddelande för okända tillägget ”%s”"
 
-#: ../src/pulse/direction.c:39
+#: ../src/pulse/direction.c:37
 msgid "input"
 msgstr "ingång"
 
-#: ../src/pulse/direction.c:41
+#: ../src/pulse/direction.c:39
 msgid "output"
 msgstr "utgång"
 
-#: ../src/pulse/direction.c:43
+#: ../src/pulse/direction.c:41
 msgid "bidirectional"
 msgstr "dubbelriktad"
 
-#: ../src/pulse/direction.c:45
+#: ../src/pulse/direction.c:43
 msgid "invalid"
 msgstr "ogiltig"
 
-#: ../src/pulsecore/core-util.c:1822
+#: ../src/pulsecore/core-util.c:1856
 #, c-format
 msgid ""
 "XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
 "e g happen if you try to connect to a non-root PulseAudio as a root user, "
 "over the native protocol. Don't do that.)"
 msgstr ""
-"XDG_RUNTIME_DIR (%s) ägs inte av oss (uid %d), utan av %d! (Det kan hända om "
-"du exempelvis försöker att ansluta till en icke-root PulseAudio som en root-"
-"användare över det interna protokollet. Gör inte det.)"
+"XDG_RUNTIME_DIR (%s) ägs inte av oss (uid %d), utan av uid %d! (Det kan "
+"hända om du exempelvis försöker att ansluta till en icke-root PulseAudio som "
+"en root-användare över det interna protokollet. Gör inte det.)"
 
-#: ../src/pulsecore/core-util.h:95
+#: ../src/pulsecore/core-util.h:97
 msgid "yes"
 msgstr "ja"
 
-#: ../src/pulsecore/core-util.h:95
+#: ../src/pulsecore/core-util.h:97
 msgid "no"
 msgstr "nej"
 
-#: ../src/pulsecore/lock-autospawn.c:143 ../src/pulsecore/lock-autospawn.c:229
+#: ../src/pulsecore/lock-autospawn.c:141 ../src/pulsecore/lock-autospawn.c:227
 msgid "Cannot access autospawn lock."
 msgstr "Kan inte komma åt låset för autospawn."
 
-#: ../src/pulsecore/log.c:155
+#: ../src/pulsecore/log.c:165
 #, c-format
 msgid "Failed to open target file '%s'."
 msgstr "Misslyckades med att öppna målfilen ”%s”."
 
-#: ../src/pulsecore/log.c:178
+#: ../src/pulsecore/log.c:188
 #, c-format
 msgid ""
 "Tried to open target file '%s', '%s.1', '%s.2' ... '%s.%d', but all failed."
 msgstr ""
 "Försökte att öppna målfilen ”%s”, ”%s.1”, ”%s.2” … ”%s.%d” men misslyckades."
 
-#: ../src/pulsecore/log.c:633
+#: ../src/pulsecore/log.c:651
 msgid "Invalid log target."
 msgstr "Ogiltigt mål för logg."
 
-#: ../src/pulsecore/sink.c:3429
+#: ../src/pulsecore/sink.c:3458
 msgid "Built-in Audio"
 msgstr "Inbyggt ljud"
 
-#: ../src/pulsecore/sink.c:3434
+#: ../src/pulsecore/sink.c:3463
 msgid "Modem"
 msgstr "Modem"
 
-#: ../src/pulse/error.c:40
+#: ../src/pulse/error.c:38
 msgid "OK"
 msgstr "OK"
 
-#: ../src/pulse/error.c:41
+#: ../src/pulse/error.c:39
 msgid "Access denied"
 msgstr "Åtkomst nekad"
 
-#: ../src/pulse/error.c:42
+#: ../src/pulse/error.c:40
 msgid "Unknown command"
 msgstr "Okänt kommando"
 
-#: ../src/pulse/error.c:43
+#: ../src/pulse/error.c:41
 msgid "Invalid argument"
 msgstr "Ogiltigt argument"
 
-#: ../src/pulse/error.c:44
+#: ../src/pulse/error.c:42
 msgid "Entity exists"
 msgstr "Entiteten finns"
 
-#: ../src/pulse/error.c:45
+#: ../src/pulse/error.c:43
 msgid "No such entity"
 msgstr "Ingen sådan entitet"
 
-#: ../src/pulse/error.c:46
+#: ../src/pulse/error.c:44
 msgid "Connection refused"
 msgstr "Anslutning nekades"
 
-#: ../src/pulse/error.c:47
+#: ../src/pulse/error.c:45
 msgid "Protocol error"
 msgstr "Protokollfel"
 
-#: ../src/pulse/error.c:48
+#: ../src/pulse/error.c:46
 msgid "Timeout"
 msgstr "Tidsgräns nåddes"
 
-#: ../src/pulse/error.c:49
+#: ../src/pulse/error.c:47
 msgid "No authentication key"
 msgstr "Ingen autentiseringsnyckel"
 
-#: ../src/pulse/error.c:50
+#: ../src/pulse/error.c:48
 msgid "Internal error"
 msgstr "Internt fel"
 
-#: ../src/pulse/error.c:51
+#: ../src/pulse/error.c:49
 msgid "Connection terminated"
 msgstr "Anslutningen terminerad"
 
-#: ../src/pulse/error.c:52
+#: ../src/pulse/error.c:50
 msgid "Entity killed"
 msgstr "Entitet dödad"
 
-#: ../src/pulse/error.c:53
+#: ../src/pulse/error.c:51
 msgid "Invalid server"
 msgstr "Ogiltig server"
 
-#: ../src/pulse/error.c:54
+#: ../src/pulse/error.c:52
 msgid "Module initialization failed"
 msgstr "Misslyckades med att starta modul"
 
-#: ../src/pulse/error.c:55
+#: ../src/pulse/error.c:53
 msgid "Bad state"
 msgstr "Felaktigt tillstånd"
 
-#: ../src/pulse/error.c:56
+#: ../src/pulse/error.c:54
 msgid "No data"
 msgstr "Ingen data"
 
-#: ../src/pulse/error.c:57
+#: ../src/pulse/error.c:55
 msgid "Incompatible protocol version"
 msgstr "Inkompatibel protokollversion"
 
-#: ../src/pulse/error.c:58
+#: ../src/pulse/error.c:56
 msgid "Too large"
 msgstr "För stor"
 
-#: ../src/pulse/error.c:59
+#: ../src/pulse/error.c:57
 msgid "Not supported"
 msgstr "Stöds inte"
 
-#: ../src/pulse/error.c:60
+#: ../src/pulse/error.c:58
 msgid "Unknown error code"
 msgstr "Okänd felkod"
 
-#: ../src/pulse/error.c:61
+#: ../src/pulse/error.c:59
 msgid "No such extension"
 msgstr "Det finns inget sådant tillägg"
 
-#: ../src/pulse/error.c:62
+#: ../src/pulse/error.c:60
 msgid "Obsolete functionality"
 msgstr "Föråldrad funktionalitet"
 
-#: ../src/pulse/error.c:63
+#: ../src/pulse/error.c:61
 msgid "Missing implementation"
 msgstr "Implementering saknas"
 
-#: ../src/pulse/error.c:64
+#: ../src/pulse/error.c:62
 msgid "Client forked"
 msgstr "Klienten förgrenad"
 
-#: ../src/pulse/error.c:65
+#: ../src/pulse/error.c:63
 msgid "Input/Output error"
 msgstr "In-/utgångsfel"
 
-#: ../src/pulse/error.c:66
+#: ../src/pulse/error.c:64
 msgid "Device or resource busy"
 msgstr "Enhet eller resurs upptagen"
 
-#: ../src/pulse/sample.c:179
+#: ../src/pulse/sample.c:176
 #, c-format
 msgid "%s %uch %uHz"
 msgstr "%s %u kan. %u Hz"
 
-#: ../src/pulse/sample.c:191
+#: ../src/pulse/sample.c:188
 #, c-format
 msgid "%0.1f GiB"
 msgstr "%0.1f GiB"
 
-#: ../src/pulse/sample.c:193
+#: ../src/pulse/sample.c:190
 #, c-format
 msgid "%0.1f MiB"
 msgstr "%0.1f MiB"
 
-#: ../src/pulse/sample.c:195
+#: ../src/pulse/sample.c:192
 #, c-format
 msgid "%0.1f KiB"
 msgstr "%0.1f KiB"
 
-#: ../src/pulse/sample.c:197
+#: ../src/pulse/sample.c:194
 #, c-format
 msgid "%u B"
 msgstr "%u B"
 
-#: ../src/tests/resampler-test.c:257
-#, c-format
-msgid ""
-"%s [options]\n"
-"\n"
-"-h, --help                            Show this help\n"
-"-v, --verbose                         Print debug messages\n"
-"      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
-"44100)\n"
-"      --from-format=SAMPLEFORMAT      From sample type (defaults to s16le)\n"
-"      --from-channels=CHANNELS        From number of channels (defaults to "
-"1)\n"
-"      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
-"44100)\n"
-"      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
-"      --to-channels=CHANNELS          To number of channels (defaults to 1)\n"
-"      --resample-method=METHOD        Resample method (defaults to auto)\n"
-"      --seconds=SECONDS               From stream duration (defaults to 60)\n"
-"\n"
-"If the formats are not specified, the test performs all formats "
-"combinations,\n"
-"back and forth.\n"
-"\n"
-"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
-"alaw,\n"
-"s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
-"\n"
-"See --dump-resample-methods for possible values of resample methods.\n"
-msgstr ""
-"%s [flaggor]\n"
-"\n"
-"-h, --help                            Visa denna hjälp\n"
-"-v, --verbose                         Skriv ut felmeddelanden\n"
-"      --from-rate=SAMPLINGSFREKVENS   Från samplingsfrekvens i Hz (standard "
-"44100)\n"
-"      --from-format=SAMPLINGSFORMAT   Från samplingstyp (standard s16le)\n"
-"      --from-channels=KANALER         Från antal kanaler (standard 1)\n"
-"      --to-rate=SAMPLINGSFREKVENS     Till samplingsfrekvens i Hz (standard "
-"44100)\n"
-"      --to-format=SAMPLINGSFORMAT     Till samplingstyp (standard s16le)\n"
-"      --to-channels=KANALER           Till antal kanaler (standard 1)\n"
-"      --resample-method=METOD         Omsamplingsmetod (standard auto)\n"
-"      --seconds=SEKUNDER              Från strömuthållighet (standard 60)\n"
-"\n"
-"Om formaten inte är angivna utför testet alla formatkombinationer,\n"
-"fram och tillbaka.\n"
-"\n"
-"Samplingstyp måste vare en av s16le, s16be, u8, float32le, float32be, ulaw, "
-"alaw,\n"
-"s24le, s24be, s24-32le, s24-32be, s32le, s32be (standard s16ne)\n"
-"\n"
-"Se --dump-resample-methods för möjliga värden på omsamplingsmetoder.\n"
-
-#: ../src/tests/resampler-test.c:356
-#, c-format
-msgid "%s %s\n"
-msgstr "%s %s\n"
-
-#: ../src/utils/pacat.c:118
+#: ../src/utils/pacat.c:134
 #, c-format
 msgid "Failed to drain stream: %s"
 msgstr "Misslyckades med att dränera strömmen: %s"
 
-#: ../src/utils/pacat.c:123
+#: ../src/utils/pacat.c:139
 msgid "Playback stream drained."
 msgstr "Uppspelningsströmmen dränerad."
 
-#: ../src/utils/pacat.c:134
+#: ../src/utils/pacat.c:150
 msgid "Draining connection to server."
 msgstr "Dränerar anslutning till servern."
 
-#: ../src/utils/pacat.c:147
+#: ../src/utils/pacat.c:163
 #, c-format
 msgid "pa_stream_drain(): %s"
 msgstr "pa_stream_drain(): %s"
 
-#: ../src/utils/pacat.c:170
-#, c-format
-msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write() misslyckades: %s"
-
-#: ../src/utils/pacat.c:211
+#: ../src/utils/pacat.c:194 ../src/utils/pacat.c:543
 #, c-format
 msgid "pa_stream_begin_write() failed: %s"
 msgstr "pa_stream_begin_write() misslyckades: %s"
 
-#: ../src/utils/pacat.c:261 ../src/utils/pacat.c:291
+#: ../src/utils/pacat.c:244 ../src/utils/pacat.c:274
 #, c-format
 msgid "pa_stream_peek() failed: %s"
 msgstr "pa_stream_peek() misslyckades: %s"
 
-#: ../src/utils/pacat.c:341
+#: ../src/utils/pacat.c:324
 msgid "Stream successfully created."
 msgstr "Strömmen skapad."
 
-#: ../src/utils/pacat.c:344
+#: ../src/utils/pacat.c:327
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s"
 msgstr "pa_stream_get_buffer_attr() misslyckades: %s"
 
-#: ../src/utils/pacat.c:348
+#: ../src/utils/pacat.c:331
 #, c-format
 msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 msgstr "Buffertmått: maxlength=%u tlength=%u prebuf=%u minreq=%u"
 
-#: ../src/utils/pacat.c:351
+#: ../src/utils/pacat.c:334
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u"
 msgstr "Buffertmått: maxlength=%u fragsize=%u"
 
-#: ../src/utils/pacat.c:355
+#: ../src/utils/pacat.c:338
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'."
 msgstr "Använder samplingsspec ”%s”, kanalmappning ”%s”."
 
-#: ../src/utils/pacat.c:359
+#: ../src/utils/pacat.c:342
 #, c-format
 msgid "Connected to device %s (index: %u, suspended: %s)."
 msgstr "Ansluten till enheten %s (index:%u, vänteläge: %s)."
 
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:352
 #, c-format
 msgid "Stream error: %s"
 msgstr "Strömfel: %s"
 
-#: ../src/utils/pacat.c:379
+#: ../src/utils/pacat.c:362
 #, c-format
 msgid "Stream device suspended.%s"
 msgstr "Strömenheten avstängd.%s"
 
-#: ../src/utils/pacat.c:381
+#: ../src/utils/pacat.c:364
 #, c-format
 msgid "Stream device resumed.%s"
 msgstr "Strömenheten återaktiverad.%s"
 
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:372
 #, c-format
 msgid "Stream underrun.%s"
 msgstr "Strömmen underskriden.%s"
 
-#: ../src/utils/pacat.c:396
+#: ../src/utils/pacat.c:379
 #, c-format
 msgid "Stream overrun.%s"
 msgstr "Strömmen överskriden.%s"
 
-#: ../src/utils/pacat.c:403
+#: ../src/utils/pacat.c:386
 #, c-format
 msgid "Stream started.%s"
 msgstr "Strömmen startad.%s"
 
-#: ../src/utils/pacat.c:410
+#: ../src/utils/pacat.c:393
 #, c-format
 msgid "Stream moved to device %s (%u, %ssuspended).%s"
 msgstr "Strömmen flyttad till enhet %s (%u, %savstängd).%s"
 
-#: ../src/utils/pacat.c:410
+#: ../src/utils/pacat.c:393
 msgid "not "
 msgstr "inte "
 
-#: ../src/utils/pacat.c:417
+#: ../src/utils/pacat.c:400
 #, c-format
 msgid "Stream buffer attributes changed.%s"
 msgstr "Strömbuffertattribut ändrade.%s"
 
-#: ../src/utils/pacat.c:432
+#: ../src/utils/pacat.c:415
 msgid "Cork request stack is empty: corking stream"
 msgstr "Korkningsbegäransstacken är tom: Korkar igen ström"
 
-#: ../src/utils/pacat.c:438
+#: ../src/utils/pacat.c:421
 msgid "Cork request stack is empty: uncorking stream"
 msgstr "Korkningsbegäransstacken är tom: Korkar ur ström"
 
-#: ../src/utils/pacat.c:442
-msgid "Warning: Received more uncork requests than cork requests!"
-msgstr "Varning: Mottog fler urkorkningsbegäran än korkningsbegäran!"
+#: ../src/utils/pacat.c:425
+msgid "Warning: Received more uncork requests than cork requests."
+msgstr "Varning: Mottog fler urkorkningsbegäran än korkningsbegäran."
 
-#: ../src/utils/pacat.c:467
+#: ../src/utils/pacat.c:450
 #, c-format
 msgid "Connection established.%s"
 msgstr "Anslutning etablerad.%s"
 
-#: ../src/utils/pacat.c:470
+#: ../src/utils/pacat.c:453
 #, c-format
 msgid "pa_stream_new() failed: %s"
 msgstr "pa_stream_new() misslyckades: %s"
 
-#: ../src/utils/pacat.c:508
+#: ../src/utils/pacat.c:491
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s"
 msgstr "pa_stream_connect_playback() misslyckades: %s"
 
-#: ../src/utils/pacat.c:514
+#: ../src/utils/pacat.c:497
 #, c-format
 msgid "Failed to set monitor stream: %s"
-msgstr "Misslyckades med att ange övervakningsströmmen: ”%s”."
+msgstr "Misslyckades med att ange övervakningsströmmen: %s"
 
-#: ../src/utils/pacat.c:518
+#: ../src/utils/pacat.c:501
 #, c-format
 msgid "pa_stream_connect_record() failed: %s"
 msgstr "pa_stream_connect_record() misslyckades: %s"
 
-#: ../src/utils/pacat.c:531 ../src/utils/pactl.c:1448
+#: ../src/utils/pacat.c:514 ../src/utils/pactl.c:1446
 #, c-format
 msgid "Connection failure: %s"
 msgstr "Anslutningsfel: %s"
 
-#: ../src/utils/pacat.c:564
+#: ../src/utils/pacat.c:557
 msgid "Got EOF."
 msgstr "Fick filslut."
 
-#: ../src/utils/pacat.c:601
+#: ../src/utils/pacat.c:581
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "pa_stream_write() misslyckades: %s"
+
+#: ../src/utils/pacat.c:605
 #, c-format
 msgid "write() failed: %s"
 msgstr "write() misslyckades: %s"
 
-#: ../src/utils/pacat.c:622
+#: ../src/utils/pacat.c:626
 msgid "Got signal, exiting."
 msgstr "Fick signal, avslutar."
 
-#: ../src/utils/pacat.c:636
+#: ../src/utils/pacat.c:640
 #, c-format
 msgid "Failed to get latency: %s"
 msgstr "Misslyckades med att avgöra latens: %s"
 
-#: ../src/utils/pacat.c:641
+#: ../src/utils/pacat.c:645
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec."
 msgstr "Tid: %0.3f s; Latens: %0.0f μs."
 
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:666
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s"
 msgstr "pa_stream_update_timing_info() misslyckades: %s"
 
-#: ../src/utils/pacat.c:672
+#: ../src/utils/pacat.c:676
 #, c-format
 msgid ""
 "%s [options]\n"
+"%s\n"
 "\n"
 "  -h, --help                            Show this help\n"
 "      --version                         Show version\n"
@@ -1888,6 +1891,7 @@ msgid ""
 "index INDEX.\n"
 msgstr ""
 "%s [flaggor]\n"
+"%s\n"
 "\n"
 "  -h, --help                            Visa denna hjälp\n"
 "      --version                         Visa version\n"
@@ -1935,8 +1939,8 @@ msgstr ""
 "      --latency=BYTE                    Begär angiven latens i byte.\n"
 "      --process-time=BYTE               Begär angiven processtid per begäran "
 "i byte.\n"
-"      --latency-msec=ms                 Begär angiven latens i ms.\n"
-"      --process-time-msec=ms            Begär angiven processtid per begäran "
+"      --latency-msec=MS                 Begär angiven latens i ms.\n"
+"      --process-time-msec=MS            Begär angiven processtid per begäran "
 "i ms.\n"
 "      --property=EGENSKAP=VÄRDE         Sätt angiven egenskap till angivet "
 "värde.\n"
@@ -1948,7 +1952,32 @@ msgstr ""
 "      --monitor-stream=INDEX            Spela in från mottagaringången med "
 "index INDEX.\n"
 
-#: ../src/utils/pacat.c:810
+#: ../src/utils/pacat.c:793
+msgid "Play back encoded audio files on a PulseAudio sound server."
+msgstr "Spela upp kodade ljudfiler på en PulseAudio-server."
+
+#: ../src/utils/pacat.c:797
+msgid ""
+"Capture audio data from a PulseAudio sound server and write it to a file."
+msgstr "Fånga ljuddata från en PulseAudio-ljudserver och skriv den till fil."
+
+#: ../src/utils/pacat.c:801
+msgid ""
+"Capture audio data from a PulseAudio sound server and write it to STDOUT or "
+"the specified file."
+msgstr ""
+"Fånga ljuddata från en PulseAudio-ljudserver och skriv den till STDOUT eller "
+"angiven fil."
+
+#: ../src/utils/pacat.c:805
+msgid ""
+"Play back audio data from STDIN or the specified file on a PulseAudio sound "
+"server."
+msgstr ""
+"Spela upp ljuddata från STDIN eller den angivna filen, på en PulseAudio-"
+"server."
+
+#: ../src/utils/pacat.c:819
 #, c-format
 msgid ""
 "pacat %s\n"
@@ -1959,72 +1988,72 @@ msgstr ""
 "Kompilerade med libpulse %s\n"
 "Länkade med libpulse %s\n"
 
-#: ../src/utils/pacat.c:843 ../src/utils/pactl.c:1644
+#: ../src/utils/pacat.c:852 ../src/utils/pactl.c:1648
 #, c-format
 msgid "Invalid client name '%s'"
 msgstr "Ogiltigt klientnamn ”%s”"
 
-#: ../src/utils/pacat.c:858
+#: ../src/utils/pacat.c:867
 #, c-format
 msgid "Invalid stream name '%s'"
 msgstr "Ogiltigt namn på strömmen ”%s”"
 
-#: ../src/utils/pacat.c:895
+#: ../src/utils/pacat.c:904
 #, c-format
 msgid "Invalid channel map '%s'"
 msgstr "Ogiltig kanalmappning ”%s”"
 
-#: ../src/utils/pacat.c:924 ../src/utils/pacat.c:938
+#: ../src/utils/pacat.c:933 ../src/utils/pacat.c:947
 #, c-format
 msgid "Invalid latency specification '%s'"
 msgstr "Ogiltig latensangivelse ”%s”"
 
-#: ../src/utils/pacat.c:931 ../src/utils/pacat.c:945
+#: ../src/utils/pacat.c:940 ../src/utils/pacat.c:954
 #, c-format
 msgid "Invalid process time specification '%s'"
 msgstr "Ogiltig angivelse av processtid ”%s”"
 
-#: ../src/utils/pacat.c:957
+#: ../src/utils/pacat.c:966
 #, c-format
 msgid "Invalid property '%s'"
 msgstr "Ogiltig egenskap ”%s”"
 
-#: ../src/utils/pacat.c:976
+#: ../src/utils/pacat.c:985
 #, c-format
 msgid "Unknown file format %s."
 msgstr "Okänt filformat %s."
 
-#: ../src/utils/pacat.c:991
+#: ../src/utils/pacat.c:1000
 msgid "Failed to parse the argument for --monitor-stream"
 msgstr "Misslyckades med att tolka argumentet för --monitor-stream"
 
-#: ../src/utils/pacat.c:1002
+#: ../src/utils/pacat.c:1011
 msgid "Invalid sample specification"
 msgstr "Ogiltig samplingsspecifikation"
 
-#: ../src/utils/pacat.c:1012
+#: ../src/utils/pacat.c:1021
 #, c-format
 msgid "open(): %s"
 msgstr "open(): %s"
 
-#: ../src/utils/pacat.c:1017
+#: ../src/utils/pacat.c:1026
 #, c-format
 msgid "dup2(): %s"
 msgstr "dup2(): %s"
 
-#: ../src/utils/pacat.c:1024
+#: ../src/utils/pacat.c:1033
 msgid "Too many arguments."
 msgstr "För många argument."
 
-#: ../src/utils/pacat.c:1035
+#: ../src/utils/pacat.c:1044
 msgid "Failed to generate sample specification for file."
 msgstr "Misslyckades med att generera samplingsspecifikation för filen."
 
-#: ../src/utils/pacat.c:1061
+#: ../src/utils/pacat.c:1070
 msgid "Failed to open audio file."
 msgstr "Misslyckades med att öppna ljudfilen."
 
-#: ../src/utils/pacat.c:1067
+#: ../src/utils/pacat.c:1076
 msgid ""
 "Warning: specified sample specification will be overwritten with "
 "specification from file."
@@ -2032,23 +2061,23 @@ msgstr ""
 "Varning: angiven samplingsspecifikation kommer att skrivas över med "
 "specifikation från filen."
 
-#: ../src/utils/pacat.c:1070 ../src/utils/pactl.c:1708
+#: ../src/utils/pacat.c:1079 ../src/utils/pactl.c:1712
 msgid "Failed to determine sample specification from file."
 msgstr "Misslyckades med att avgöra samplingsspecifikation från filen."
 
-#: ../src/utils/pacat.c:1079
+#: ../src/utils/pacat.c:1088
 msgid "Warning: Failed to determine channel map from file."
 msgstr "Varning: Misslyckades med att avgöra kanalmappningen från filen."
 
-#: ../src/utils/pacat.c:1090
+#: ../src/utils/pacat.c:1099
 msgid "Channel map doesn't match sample specification"
 msgstr "Kanalmappning stämmer inte överens med samplingsspecifikationen"
 
-#: ../src/utils/pacat.c:1101
+#: ../src/utils/pacat.c:1110
 msgid "Warning: failed to write channel map to file."
 msgstr "Varning: Misslyckades med att skriva kanalmappningen till filen."
 
-#: ../src/utils/pacat.c:1116
+#: ../src/utils/pacat.c:1125
 #, c-format
 msgid ""
 "Opening a %s stream with sample specification '%s' and channel map '%s'."
@@ -2056,133 +2085,133 @@ msgstr ""
 "Öppnar en %s-ström med samplingsspecifikationen ”%s” och kanalmappningen "
 "”%s”."
 
-#: ../src/utils/pacat.c:1117
+#: ../src/utils/pacat.c:1126
 msgid "recording"
 msgstr "inspelning"
 
-#: ../src/utils/pacat.c:1117
+#: ../src/utils/pacat.c:1126
 msgid "playback"
 msgstr "uppspelning"
 
-#: ../src/utils/pacat.c:1141
+#: ../src/utils/pacat.c:1150
 msgid "Failed to set media name."
 msgstr "Misslyckades med att ange medienamn."
 
-#: ../src/utils/pacat.c:1148 ../src/utils/pactl.c:2058
+#: ../src/utils/pacat.c:1160 ../src/utils/pactl.c:2062
 msgid "pa_mainloop_new() failed."
 msgstr "pa_mainloop_new() misslyckades."
 
-#: ../src/utils/pacat.c:1171
+#: ../src/utils/pacat.c:1183
 msgid "io_new() failed."
 msgstr "io_new() misslyckades."
 
-#: ../src/utils/pacat.c:1178 ../src/utils/pactl.c:2070
+#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2074
 msgid "pa_context_new() failed."
 msgstr "pa_context_new() misslyckades."
 
-#: ../src/utils/pacat.c:1186 ../src/utils/pactl.c:2076
+#: ../src/utils/pacat.c:1198 ../src/utils/pactl.c:2080
 #, c-format
 msgid "pa_context_connect() failed: %s"
 msgstr "pa_context_connect() misslyckades: %s"
 
-#: ../src/utils/pacat.c:1192
+#: ../src/utils/pacat.c:1204
 msgid "pa_context_rttime_new() failed."
 msgstr "pa_context_rttime_new() misslyckades."
 
-#: ../src/utils/pacat.c:1199 ../src/utils/pactl.c:2081
+#: ../src/utils/pacat.c:1211 ../src/utils/pactl.c:2085
 msgid "pa_mainloop_run() failed."
 msgstr "pa_mainloop_run() misslyckades."
 
-#: ../src/utils/pacmd.c:53 ../src/utils/pactl.c:1566
+#: ../src/utils/pacmd.c:51 ../src/utils/pactl.c:1570
 msgid "NAME [ARGS ...]"
 msgstr "NAMN [ARG …]"
 
-#: ../src/utils/pacmd.c:54 ../src/utils/pacmd.c:62 ../src/utils/pactl.c:1567
+#: ../src/utils/pacmd.c:52 ../src/utils/pacmd.c:60 ../src/utils/pactl.c:1571
 msgid "NAME|#N"
 msgstr "NAMN|#N"
 
-#: ../src/utils/pacmd.c:55 ../src/utils/pacmd.c:65 ../src/utils/pactl.c:1565
-#: ../src/utils/pactl.c:1571
+#: ../src/utils/pacmd.c:53 ../src/utils/pacmd.c:63 ../src/utils/pactl.c:1569
+#: ../src/utils/pactl.c:1575
 msgid "NAME"
 msgstr "NAMN"
 
-#: ../src/utils/pacmd.c:56
+#: ../src/utils/pacmd.c:54
 msgid "NAME|#N VOLUME"
 msgstr "NAMN|#N VOLYM"
 
-#: ../src/utils/pacmd.c:57
+#: ../src/utils/pacmd.c:55
 msgid "#N VOLUME"
 msgstr "#N VOLYM"
 
-#: ../src/utils/pacmd.c:58 ../src/utils/pacmd.c:72 ../src/utils/pactl.c:1569
+#: ../src/utils/pacmd.c:56 ../src/utils/pacmd.c:70 ../src/utils/pactl.c:1573
 msgid "NAME|#N 1|0"
 msgstr "NAMN|#N 1|0"
 
-#: ../src/utils/pacmd.c:59
+#: ../src/utils/pacmd.c:57
 msgid "#N 1|0"
 msgstr "#N 1|0"
 
-#: ../src/utils/pacmd.c:60
+#: ../src/utils/pacmd.c:58
 msgid "NAME|#N KEY=VALUE"
 msgstr "NAMN|#N NYCKEL=VÄRDE"
 
-#: ../src/utils/pacmd.c:61
+#: ../src/utils/pacmd.c:59
 msgid "#N KEY=VALUE"
 msgstr "#N NYCKEL=VÄRDE"
 
-#: ../src/utils/pacmd.c:63
+#: ../src/utils/pacmd.c:61
 msgid "#N"
 msgstr "#N"
 
-#: ../src/utils/pacmd.c:64
+#: ../src/utils/pacmd.c:62
 msgid "NAME SINK|#N"
 msgstr "NAMN MOTTAGARE|#N"
 
-#: ../src/utils/pacmd.c:66 ../src/utils/pacmd.c:67
+#: ../src/utils/pacmd.c:64 ../src/utils/pacmd.c:65
 msgid "NAME FILENAME"
 msgstr "NAMN FILNAMN"
 
-#: ../src/utils/pacmd.c:68
+#: ../src/utils/pacmd.c:66
 msgid "PATHNAME"
 msgstr "SÖKVÄGSNAMN"
 
-#: ../src/utils/pacmd.c:69
+#: ../src/utils/pacmd.c:67
 msgid "FILENAME SINK|#N"
 msgstr "FILNAMN MOTTAGARE|#N"
 
-#: ../src/utils/pacmd.c:71 ../src/utils/pactl.c:1568
+#: ../src/utils/pacmd.c:69 ../src/utils/pactl.c:1572
 msgid "#N SINK|SOURCE"
 msgstr "#N MOTTAGARE|KÄLLA"
 
-#: ../src/utils/pacmd.c:73 ../src/utils/pacmd.c:79 ../src/utils/pacmd.c:80
+#: ../src/utils/pacmd.c:71 ../src/utils/pacmd.c:77 ../src/utils/pacmd.c:78
 msgid "1|0"
 msgstr "1|0"
 
-#: ../src/utils/pacmd.c:74 ../src/utils/pactl.c:1570
+#: ../src/utils/pacmd.c:72 ../src/utils/pactl.c:1574
 msgid "CARD PROFILE"
 msgstr "KORT PROFIL"
 
-#: ../src/utils/pacmd.c:75 ../src/utils/pactl.c:1572
+#: ../src/utils/pacmd.c:73 ../src/utils/pactl.c:1576
 msgid "NAME|#N PORT"
 msgstr "NAMN|#N PORT"
 
-#: ../src/utils/pacmd.c:76 ../src/utils/pactl.c:1578
+#: ../src/utils/pacmd.c:74 ../src/utils/pactl.c:1582
 msgid "CARD-NAME|CARD-#N PORT OFFSET"
 msgstr "KORT-NAMN|KORT-#N PORT OFFSET"
 
-#: ../src/utils/pacmd.c:77
+#: ../src/utils/pacmd.c:75
 msgid "TARGET"
 msgstr "MÅL"
 
-#: ../src/utils/pacmd.c:78
-msgid "NUMERIC LEVEL"
+#: ../src/utils/pacmd.c:76
+msgid "NUMERIC-LEVEL"
 msgstr "NUMERISK NIVÅ"
 
-#: ../src/utils/pacmd.c:81
+#: ../src/utils/pacmd.c:79
 msgid "FRAMES"
 msgstr "LJUDRUTOR"
 
-#: ../src/utils/pacmd.c:83
+#: ../src/utils/pacmd.c:81
 #, c-format
 msgid ""
 "\n"
@@ -2195,7 +2224,7 @@ msgstr ""
 "      --version                         Visa version\n"
 "När inget kommando anges startar pacmd i det interaktiva läget.\n"
 
-#: ../src/utils/pacmd.c:130
+#: ../src/utils/pacmd.c:128
 #, c-format
 msgid ""
 "pacmd %s\n"
@@ -2206,70 +2235,70 @@ msgstr ""
 "Kompilerad med libpulse %s\n"
 "Länkad med libpulse %s\n"
 
-#: ../src/utils/pacmd.c:144
+#: ../src/utils/pacmd.c:142
 msgid "No PulseAudio daemon running, or not running as session daemon."
 msgstr "Ingen PulseAudio-demon körs, eller körs ej som en sessionsdemon."
 
-#: ../src/utils/pacmd.c:149
+#: ../src/utils/pacmd.c:147
 #, c-format
 msgid "socket(PF_UNIX, SOCK_STREAM, 0): %s"
 msgstr "socket(PF_UNIX, SOCK_STREAM, 0): %s"
 
-#: ../src/utils/pacmd.c:166
+#: ../src/utils/pacmd.c:164
 #, c-format
 msgid "connect(): %s"
 msgstr "connect(): %s"
 
-#: ../src/utils/pacmd.c:174
+#: ../src/utils/pacmd.c:172
 msgid "Failed to kill PulseAudio daemon."
 msgstr "Misslyckades med att döda PulseAudio-demon."
 
-#: ../src/utils/pacmd.c:182
+#: ../src/utils/pacmd.c:180
 msgid "Daemon not responding."
 msgstr "Demon svarar ej."
 
-#: ../src/utils/pacmd.c:214 ../src/utils/pacmd.c:323 ../src/utils/pacmd.c:341
+#: ../src/utils/pacmd.c:212 ../src/utils/pacmd.c:321 ../src/utils/pacmd.c:339
 #, c-format
 msgid "write(): %s"
 msgstr "write(): %s"
 
-#: ../src/utils/pacmd.c:270
+#: ../src/utils/pacmd.c:268
 #, c-format
 msgid "poll(): %s"
 msgstr "poll(): %s"
 
-#: ../src/utils/pacmd.c:281 ../src/utils/pacmd.c:301
+#: ../src/utils/pacmd.c:279 ../src/utils/pacmd.c:299
 #, c-format
 msgid "read(): %s"
 msgstr "read(): %s"
 
-#: ../src/utils/pactl.c:166
+#: ../src/utils/pactl.c:164
 #, c-format
 msgid "Failed to get statistics: %s"
 msgstr "Misslyckades med att hämta statistik: %s"
 
-#: ../src/utils/pactl.c:172
+#: ../src/utils/pactl.c:170
 #, c-format
 msgid "Currently in use: %u blocks containing %s bytes total.\n"
 msgstr "Används för närvarande: %u block innehållande %s byte totalt.\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:173
 #, c-format
 msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
 msgstr ""
 "Allokerade under hela livstiden: %u block innehållande %s byte totalt.\n"
 
-#: ../src/utils/pactl.c:178
+#: ../src/utils/pactl.c:176
 #, c-format
 msgid "Sample cache size: %s\n"
 msgstr "Samplingscachestorlek: %s\n"
 
-#: ../src/utils/pactl.c:187
+#: ../src/utils/pactl.c:185
 #, c-format
 msgid "Failed to get server information: %s"
 msgstr "Misslyckades med att hämta serverinformation: %s"
 
-#: ../src/utils/pactl.c:192
+#: ../src/utils/pactl.c:190
 #, c-format
 msgid ""
 "Server String: %s\n"
@@ -2286,7 +2315,7 @@ msgstr ""
 "Klientindex: %u\n"
 "Blockstorlek: %zu\n"
 
-#: ../src/utils/pactl.c:208
+#: ../src/utils/pactl.c:206
 #, c-format
 msgid ""
 "User Name: %s\n"
@@ -2309,12 +2338,12 @@ msgstr ""
 "Förvald källa: %s\n"
 "Kaka: %04x:%04x\n"
 
-#: ../src/utils/pactl.c:257 ../src/utils/pactl.c:902 ../src/utils/pactl.c:980
+#: ../src/utils/pactl.c:255 ../src/utils/pactl.c:900 ../src/utils/pactl.c:978
 #, c-format
 msgid "Failed to get sink information: %s"
 msgstr "Misslyckades med att få information om mottagare: %s"
 
-#: ../src/utils/pactl.c:283
+#: ../src/utils/pactl.c:281
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -2353,27 +2382,27 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:327 ../src/utils/pactl.c:433 ../src/utils/pactl.c:594
+#: ../src/utils/pactl.c:325 ../src/utils/pactl.c:431 ../src/utils/pactl.c:592
 #, c-format
 msgid "\tPorts:\n"
 msgstr "\tPortar:\n"
 
-#: ../src/utils/pactl.c:334 ../src/utils/pactl.c:440
+#: ../src/utils/pactl.c:332 ../src/utils/pactl.c:438
 #, c-format
 msgid "\tActive Port: %s\n"
 msgstr "\tAktiv port: %s\n"
 
-#: ../src/utils/pactl.c:340 ../src/utils/pactl.c:446
+#: ../src/utils/pactl.c:338 ../src/utils/pactl.c:444
 #, c-format
 msgid "\tFormats:\n"
 msgstr "\tFormat:\n"
 
-#: ../src/utils/pactl.c:364 ../src/utils/pactl.c:922 ../src/utils/pactl.c:995
+#: ../src/utils/pactl.c:362 ../src/utils/pactl.c:920 ../src/utils/pactl.c:993
 #, c-format
 msgid "Failed to get source information: %s"
 msgstr "Misslyckades med att få information om källa: %s"
 
-#: ../src/utils/pactl.c:390
+#: ../src/utils/pactl.c:388
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -2412,20 +2441,20 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:418 ../src/utils/pactl.c:488 ../src/utils/pactl.c:531
-#: ../src/utils/pactl.c:573 ../src/utils/pactl.c:671 ../src/utils/pactl.c:672
-#: ../src/utils/pactl.c:683 ../src/utils/pactl.c:741 ../src/utils/pactl.c:742
-#: ../src/utils/pactl.c:753 ../src/utils/pactl.c:804 ../src/utils/pactl.c:805
-#: ../src/utils/pactl.c:811
+#: ../src/utils/pactl.c:416 ../src/utils/pactl.c:486 ../src/utils/pactl.c:529
+#: ../src/utils/pactl.c:571 ../src/utils/pactl.c:669 ../src/utils/pactl.c:670
+#: ../src/utils/pactl.c:681 ../src/utils/pactl.c:739 ../src/utils/pactl.c:740
+#: ../src/utils/pactl.c:751 ../src/utils/pactl.c:802 ../src/utils/pactl.c:803
+#: ../src/utils/pactl.c:809
 msgid "n/a"
 msgstr "ej tillämpligt"
 
-#: ../src/utils/pactl.c:457 ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:455 ../src/utils/pactl.c:859
 #, c-format
 msgid "Failed to get module information: %s"
 msgstr "Misslyckades med att få modulinformation: %s"
 
-#: ../src/utils/pactl.c:480
+#: ../src/utils/pactl.c:478
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -2442,12 +2471,12 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:499
+#: ../src/utils/pactl.c:497
 #, c-format
 msgid "Failed to get client information: %s"
 msgstr "Misslyckades med att få klientinformation: %s"
 
-#: ../src/utils/pactl.c:525
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -2462,12 +2491,12 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:542
+#: ../src/utils/pactl.c:540
 #, c-format
 msgid "Failed to get card information: %s"
 msgstr "Misslyckades med att få kortinformation: %s"
 
-#: ../src/utils/pactl.c:565
+#: ../src/utils/pactl.c:563
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -2484,17 +2513,23 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:581
+#: ../src/utils/pactl.c:579
 #, c-format
 msgid "\tProfiles:\n"
 msgstr "\tProfiler:\n"
 
-#: ../src/utils/pactl.c:588
+#: ../src/utils/pactl.c:581
+#, c-format
+msgid "\t\t%s: %s (sinks: %u, sources: %u, priority: %u, available: %s)\n"
+msgstr ""
+"\t\t%s: %s (mottagare: %u, källor: %u, prioritet: %u, tillgängliga: %s)\n"
+
+#: ../src/utils/pactl.c:586
 #, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "\tAktiv profil: %s\n"
 
-#: ../src/utils/pactl.c:602
+#: ../src/utils/pactl.c:600
 #, c-format
 msgid ""
 "\t\t\tProperties:\n"
@@ -2503,17 +2538,17 @@ msgstr ""
 "\t\t\tEgenskaper:\n"
 "\t\t\t\t%s\n"
 
-#: ../src/utils/pactl.c:607
+#: ../src/utils/pactl.c:605
 #, c-format
 msgid "\t\t\tPart of profile(s): %s"
 msgstr "\t\t\tDel av profil(er): %s"
 
-#: ../src/utils/pactl.c:624 ../src/utils/pactl.c:942 ../src/utils/pactl.c:1010
+#: ../src/utils/pactl.c:622 ../src/utils/pactl.c:940 ../src/utils/pactl.c:1008
 #, c-format
 msgid "Failed to get sink input information: %s"
 msgstr "Misslyckades med att få ingångsinformation för mottagaren: %s"
 
-#: ../src/utils/pactl.c:653
+#: ../src/utils/pactl.c:651
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -2552,12 +2587,12 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:694 ../src/utils/pactl.c:962 ../src/utils/pactl.c:1025
+#: ../src/utils/pactl.c:692 ../src/utils/pactl.c:960 ../src/utils/pactl.c:1023
 #, c-format
 msgid "Failed to get source output information: %s"
 msgstr "Misslyckades med att få information om källutgång: %s"
 
-#: ../src/utils/pactl.c:723
+#: ../src/utils/pactl.c:721
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -2596,12 +2631,12 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:764
+#: ../src/utils/pactl.c:762
 #, c-format
 msgid "Failed to get sample information: %s"
 msgstr "Misslyckades med att få samplingsinformation: %s"
 
-#: ../src/utils/pactl.c:791
+#: ../src/utils/pactl.c:789
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -2630,17 +2665,17 @@ msgstr ""
 "\tEgenskaper:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:819 ../src/utils/pactl.c:829
+#: ../src/utils/pactl.c:817 ../src/utils/pactl.c:827
 #, c-format
 msgid "Failure: %s"
 msgstr "Misslyckande: %s"
 
-#: ../src/utils/pactl.c:868
+#: ../src/utils/pactl.c:866
 #, c-format
 msgid "Failed to unload module: Module %s not loaded"
 msgstr "Misslyckades med att stänga modul: Modulen %s är inte aktiv"
 
-#: ../src/utils/pactl.c:886
+#: ../src/utils/pactl.c:884
 #, c-format
 msgid ""
 "Failed to set volume: You tried to set volumes for %d channels, whereas "
@@ -2649,99 +2684,97 @@ msgstr ""
 "Misslyckades att sätta volym: Du försökte att sätta volymer för %d kanaler, "
 "medan antalet kanaler som stöds = %d\n"
 
-#: ../src/utils/pactl.c:1052
+#: ../src/utils/pactl.c:1050
 #, c-format
 msgid "Failed to set format: invalid format string %s"
 msgstr "Misslyckades med att ange format: ogiltig formatsträng %s"
 
-#: ../src/utils/pactl.c:1095
+#: ../src/utils/pactl.c:1093
 #, c-format
 msgid "Failed to upload sample: %s"
 msgstr "Misslyckades med att skicka upp samplingen: %s"
 
-#: ../src/utils/pactl.c:1112
+#: ../src/utils/pactl.c:1110
 msgid "Premature end of file"
 msgstr "För tidigt filslut"
 
-#: ../src/utils/pactl.c:1132
+#: ../src/utils/pactl.c:1130
 msgid "new"
 msgstr "ny"
 
-#: ../src/utils/pactl.c:1135
+#: ../src/utils/pactl.c:1133
 msgid "change"
 msgstr "ändra"
 
-#: ../src/utils/pactl.c:1138
+#: ../src/utils/pactl.c:1136
 msgid "remove"
 msgstr "ta bort"
 
-#: ../src/utils/pactl.c:1141 ../src/utils/pactl.c:1176
+#: ../src/utils/pactl.c:1139 ../src/utils/pactl.c:1174
 msgid "unknown"
 msgstr "okänd"
 
-#: ../src/utils/pactl.c:1149
+#: ../src/utils/pactl.c:1147
 msgid "sink"
 msgstr "mottagare"
 
-#: ../src/utils/pactl.c:1152
+#: ../src/utils/pactl.c:1150
 msgid "source"
 msgstr "källa"
 
-#: ../src/utils/pactl.c:1155
+#: ../src/utils/pactl.c:1153
 msgid "sink-input"
 msgstr "mottagaringång"
 
-#: ../src/utils/pactl.c:1158
+#: ../src/utils/pactl.c:1156
 msgid "source-output"
 msgstr "källutgång"
 
-#: ../src/utils/pactl.c:1161
+#: ../src/utils/pactl.c:1159
 msgid "module"
 msgstr "modul"
 
-#: ../src/utils/pactl.c:1164
+#: ../src/utils/pactl.c:1162
 msgid "client"
 msgstr "klient"
 
-#: ../src/utils/pactl.c:1167
+#: ../src/utils/pactl.c:1165
 msgid "sample-cache"
 msgstr "sample-cache"
 
-#: ../src/utils/pactl.c:1170
+#: ../src/utils/pactl.c:1168
 msgid "server"
 msgstr "server"
 
-#: ../src/utils/pactl.c:1173
+#: ../src/utils/pactl.c:1171
 msgid "card"
 msgstr "kort"
 
-#: ../src/utils/pactl.c:1182
+#: ../src/utils/pactl.c:1180
 #, c-format
 msgid "Event '%s' on %s #%u\n"
 msgstr "Händelse '%s' på %s #%u\n"
 
-#: ../src/utils/pactl.c:1454
+#: ../src/utils/pactl.c:1452
 msgid "Got SIGINT, exiting."
 msgstr "Fick SIGINT, avslutar."
 
-#: ../src/utils/pactl.c:1481
+#: ../src/utils/pactl.c:1485
 msgid "Invalid volume specification"
 msgstr "Ogiltig volymangivelse"
 
-#: ../src/utils/pactl.c:1504
+#: ../src/utils/pactl.c:1508
 msgid "Volume outside permissible range.\n"
 msgstr "Volym utanför tillåtet intervall.\n"
 
-#: ../src/utils/pactl.c:1517
+#: ../src/utils/pactl.c:1521
 msgid "Invalid number of volume specifications.\n"
 msgstr "Ogiltigt antal volymspecifikationer.\n"
 
-#: ../src/utils/pactl.c:1529
+#: ../src/utils/pactl.c:1533
 msgid "Inconsistent volume specification.\n"
 msgstr "Inkonsekvent volymspecifikation.\n"
 
-#: ../src/utils/pactl.c:1559 ../src/utils/pactl.c:1560
-#: ../src/utils/pactl.c:1561 ../src/utils/pactl.c:1562
 #: ../src/utils/pactl.c:1563 ../src/utils/pactl.c:1564
 #: ../src/utils/pactl.c:1565 ../src/utils/pactl.c:1566
 #: ../src/utils/pactl.c:1567 ../src/utils/pactl.c:1568
@@ -2750,43 +2783,45 @@ msgstr "Inkonsekvent volymspecifikation.\n"
 #: ../src/utils/pactl.c:1573 ../src/utils/pactl.c:1574
 #: ../src/utils/pactl.c:1575 ../src/utils/pactl.c:1576
 #: ../src/utils/pactl.c:1577 ../src/utils/pactl.c:1578
-#: ../src/utils/pactl.c:1579
+#: ../src/utils/pactl.c:1579 ../src/utils/pactl.c:1580
+#: ../src/utils/pactl.c:1581 ../src/utils/pactl.c:1582
+#: ../src/utils/pactl.c:1583
 msgid "[options]"
 msgstr "[flaggor]"
 
-#: ../src/utils/pactl.c:1561
+#: ../src/utils/pactl.c:1565
 msgid "[TYPE]"
 msgstr "[TYP]"
 
-#: ../src/utils/pactl.c:1563
+#: ../src/utils/pactl.c:1567
 msgid "FILENAME [NAME]"
 msgstr "FILNAMN [NAMN]"
 
-#: ../src/utils/pactl.c:1564
+#: ../src/utils/pactl.c:1568
 msgid "NAME [SINK]"
 msgstr "NAMN [MOTTAGARE]"
 
-#: ../src/utils/pactl.c:1573
+#: ../src/utils/pactl.c:1577
 msgid "NAME|#N VOLUME [VOLUME ...]"
 msgstr "NAMN|#N VOLYM [VOLYM …]"
 
-#: ../src/utils/pactl.c:1574
+#: ../src/utils/pactl.c:1578
 msgid "#N VOLUME [VOLUME ...]"
 msgstr "#N VOLYM [VOLYM …]"
 
-#: ../src/utils/pactl.c:1575
+#: ../src/utils/pactl.c:1579
 msgid "NAME|#N 1|0|toggle"
 msgstr "NAMN|#N 1|0|växla"
 
-#: ../src/utils/pactl.c:1576
+#: ../src/utils/pactl.c:1580
 msgid "#N 1|0|toggle"
 msgstr "#N 1|0|växla"
 
-#: ../src/utils/pactl.c:1577
+#: ../src/utils/pactl.c:1581
 msgid "#N FORMATS"
 msgstr "#N FORMAT"
 
-#: ../src/utils/pactl.c:1580
+#: ../src/utils/pactl.c:1584
 #, c-format
 msgid ""
 "\n"
@@ -2797,7 +2832,7 @@ msgstr ""
 "Specialnamnen @DEFAULT_SINK@, @DEFAULT_SOURCE och @DEFAULT_MONITOR@\n"
 "kan användas för att ange standardmottagare, källa och övervakare.\n"
 
-#: ../src/utils/pactl.c:1583
+#: ../src/utils/pactl.c:1587
 #, c-format
 msgid ""
 "\n"
@@ -2816,7 +2851,7 @@ msgstr ""
 "  -s, --server=SERVER                   Namnet på servern att ansluta till\n"
 "  -n, --client-name=NAMN                Vad klienten ska kallas på servern\n"
 
-#: ../src/utils/pactl.c:1624
+#: ../src/utils/pactl.c:1628
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -2827,139 +2862,151 @@ msgstr ""
 "Kompilerad med libpulse %s\n"
 "Länkad med libpulse %s\n"
 
-#: ../src/utils/pactl.c:1680
+#: ../src/utils/pactl.c:1684
 #, c-format
 msgid "Specify nothing, or one of: %s"
 msgstr "Specificera inget, eller endera av: %s"
 
-#: ../src/utils/pactl.c:1690
+#: ../src/utils/pactl.c:1694
 msgid "Please specify a sample file to load"
 msgstr "Ange en samplingsfil att ladda"
 
-#: ../src/utils/pactl.c:1703
+#: ../src/utils/pactl.c:1707
 msgid "Failed to open sound file."
 msgstr "Misslyckades med att öppna ljudfilen."
 
-#: ../src/utils/pactl.c:1715
+#: ../src/utils/pactl.c:1719
 msgid "Warning: Failed to determine sample specification from file."
 msgstr ""
 "Varning: Misslyckades med att avgöra samplingsspecifikationen från filen."
 
-#: ../src/utils/pactl.c:1725
+#: ../src/utils/pactl.c:1729
 msgid "You have to specify a sample name to play"
 msgstr "Du måste ange ett samplingsnamn att spela"
 
-#: ../src/utils/pactl.c:1737
+#: ../src/utils/pactl.c:1741
 msgid "You have to specify a sample name to remove"
 msgstr "Du måste ange ett samplingsnamn att ta bort"
 
-#: ../src/utils/pactl.c:1746
+#: ../src/utils/pactl.c:1750
 msgid "You have to specify a sink input index and a sink"
 msgstr "Du måste ange ett index för en ingångsmottagare och en mottagare"
 
-#: ../src/utils/pactl.c:1756
+#: ../src/utils/pactl.c:1760
 msgid "You have to specify a source output index and a source"
 msgstr "Du måste ange ett index för en källutgång och en källa"
 
-#: ../src/utils/pactl.c:1771
+#: ../src/utils/pactl.c:1775
 msgid "You have to specify a module name and arguments."
 msgstr "Du måste ange ett modulnamn och argument."
 
-#: ../src/utils/pactl.c:1791
+#: ../src/utils/pactl.c:1795
 msgid "You have to specify a module index or name"
 msgstr "Du måste ange ett modulindex eller namn"
 
-#: ../src/utils/pactl.c:1804
+#: ../src/utils/pactl.c:1808
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean value."
 msgstr ""
 "Du får inte ange fler än en mottagare. Du måste ange ett booleskt värde."
 
-#: ../src/utils/pactl.c:1809 ../src/utils/pactl.c:1829
+#: ../src/utils/pactl.c:1813 ../src/utils/pactl.c:1833
 msgid "Invalid suspend specification."
 msgstr "Ogiltig avstängningsspecifikation."
 
-#: ../src/utils/pactl.c:1824
+#: ../src/utils/pactl.c:1828
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value."
 msgstr "Du får inte ange fler än en källa. Du måste ange ett booleskt värde."
 
-#: ../src/utils/pactl.c:1841
+#: ../src/utils/pactl.c:1845
 msgid "You have to specify a card name/index and a profile name"
 msgstr "Du måste ange ett kortnamn/-index och ett profilnamn"
 
-#: ../src/utils/pactl.c:1852
+#: ../src/utils/pactl.c:1856
 msgid "You have to specify a sink name/index and a port name"
 msgstr "Du måste ange ett mottagarnamn/-index och ett portnamn"
 
-#: ../src/utils/pactl.c:1863
+#: ../src/utils/pactl.c:1867
 msgid "You have to specify a sink name"
 msgstr "Du måste ange namn på en mottagare"
 
-#: ../src/utils/pactl.c:1873
+#: ../src/utils/pactl.c:1877
 msgid "You have to specify a source name/index and a port name"
 msgstr "Du måste ange ett källnamn/-index och ett portnamn"
 
-#: ../src/utils/pactl.c:1884
+#: ../src/utils/pactl.c:1888
 msgid "You have to specify a source name"
 msgstr "Du måste ange namn på en källa"
 
-#: ../src/utils/pactl.c:1894
+#: ../src/utils/pactl.c:1898
 msgid "You have to specify a sink name/index and a volume"
 msgstr "Du måste ange ett mottagarnamn/-index och en volym"
 
-#: ../src/utils/pactl.c:1907
+#: ../src/utils/pactl.c:1911
 msgid "You have to specify a source name/index and a volume"
 msgstr "Du måste ange ett källnamn/-index och en volym"
 
-#: ../src/utils/pactl.c:1920
+#: ../src/utils/pactl.c:1924
 msgid "You have to specify a sink input index and a volume"
 msgstr "Du måste ange ett index för en mottagaringång och en volym"
 
-#: ../src/utils/pactl.c:1925
+#: ../src/utils/pactl.c:1929
 msgid "Invalid sink input index"
 msgstr "Ogiltigt index för mottagaringång"
 
-#: ../src/utils/pactl.c:1936
+#: ../src/utils/pactl.c:1940
 msgid "You have to specify a source output index and a volume"
 msgstr "Du måste ange ett källutgångsindex och en volym"
 
-#: ../src/utils/pactl.c:1941
+#: ../src/utils/pactl.c:1945
 msgid "Invalid source output index"
 msgstr "Ogiltigt källutgångsindex"
 
-#: ../src/utils/pactl.c:1952
-msgid "You have to specify a sink name/index and a mute boolean"
-msgstr "Du måste ange en mottagarnamn/-index och ett booleskt dämpningsvärde"
+#: ../src/utils/pactl.c:1956
+msgid ""
+"You have to specify a sink name/index and a mute action (0, 1, or 'toggle')"
+msgstr ""
+"Du måste ange en mottagarnamn/-index och ett dämpningsvärde (0, 1, eller "
+"”toggle”)"
 
-#: ../src/utils/pactl.c:1957 ../src/utils/pactl.c:1972
-#: ../src/utils/pactl.c:1992 ../src/utils/pactl.c:2010
+#: ../src/utils/pactl.c:1961 ../src/utils/pactl.c:1976
+#: ../src/utils/pactl.c:1996 ../src/utils/pactl.c:2014
 msgid "Invalid mute specification"
 msgstr "Ogiltig dämpningsspecifikation"
 
-#: ../src/utils/pactl.c:1967
-msgid "You have to specify a source name/index and a mute boolean"
-msgstr "Du måste ange ett källnamn/-index och ett booleskt dämpningsvärde"
+#: ../src/utils/pactl.c:1971
+msgid ""
+"You have to specify a source name/index and a mute action (0, 1, or 'toggle')"
+msgstr ""
+"Du måste ange ett källnamn/-index och ett dämpningsvärde (0, 1, eller "
+"”toggle”)"
 
-#: ../src/utils/pactl.c:1982
-msgid "You have to specify a sink input index and a mute boolean"
+#: ../src/utils/pactl.c:1986
+msgid ""
+"You have to specify a sink input index and a mute action (0, 1, or 'toggle')"
 msgstr ""
-"Du måste ange ett index för en mottagaringång och ett booleskt dämpningsvärde"
+"Du måste ange ett index för en mottagaringång och ett dämpningsvärde (0, 1, "
+"eller ”toggle”)"
 
-#: ../src/utils/pactl.c:1987
+#: ../src/utils/pactl.c:1991
 msgid "Invalid sink input index specification"
 msgstr "Ogiltig angivelse av index för mottagaringång"
 
-#: ../src/utils/pactl.c:2000
-msgid "You have to specify a source output index and a mute boolean"
-msgstr "Du måste ange ett källutgångsindex och ett booleskt dämpningsvärde"
+#: ../src/utils/pactl.c:2004
+msgid ""
+"You have to specify a source output index and a mute action (0, 1, or "
+"'toggle')"
+msgstr ""
+"Du måste ange ett källutgångsindex och ett dämpningsvärde (0, 1, eller "
+"”toggle”)"
 
-#: ../src/utils/pactl.c:2005
+#: ../src/utils/pactl.c:2009
 msgid "Invalid source output index specification"
 msgstr "Ogiltig specificering av källutgångsindex"
 
-#: ../src/utils/pactl.c:2022
+#: ../src/utils/pactl.c:2026
 msgid ""
 "You have to specify a sink index and a semicolon-separated list of supported "
 "formats"
@@ -2967,59 +3014,59 @@ msgstr ""
 "Du måste ange ett mottagarindex och en semikolonavskild lista med format som "
 "stöds"
 
-#: ../src/utils/pactl.c:2034
+#: ../src/utils/pactl.c:2038
 msgid "You have to specify a card name/index, a port name and a latency offset"
 msgstr "Du måste ange ett kortnamn/-index, ett portnamn och en latensoffset"
 
-#: ../src/utils/pactl.c:2041
+#: ../src/utils/pactl.c:2045
 msgid "Could not parse latency offset"
 msgstr "Kunde inte tolka latensoffset"
 
-#: ../src/utils/pactl.c:2053
+#: ../src/utils/pactl.c:2057
 msgid "No valid command specified."
 msgstr "Inget giltigt kommando angett."
 
-#: ../src/utils/pasuspender.c:81
+#: ../src/utils/pasuspender.c:79
 #, c-format
 msgid "fork(): %s\n"
 msgstr "fork(): %s\n"
 
-#: ../src/utils/pasuspender.c:94
+#: ../src/utils/pasuspender.c:92
 #, c-format
 msgid "execvp(): %s\n"
 msgstr "execvp(): %s\n"
 
-#: ../src/utils/pasuspender.c:113
+#: ../src/utils/pasuspender.c:111
 #, c-format
 msgid "Failure to resume: %s\n"
 msgstr "Misslyckades med att återuppta: %s\n"
 
-#: ../src/utils/pasuspender.c:147
+#: ../src/utils/pasuspender.c:145
 #, c-format
 msgid "Failure to suspend: %s\n"
 msgstr "Misslyckades med vänteläge: %s\n"
 
-#: ../src/utils/pasuspender.c:172
+#: ../src/utils/pasuspender.c:170
 #, c-format
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr "VARNING: Ljudservern är inte lokal, försätter ej i vänteläge.\n"
 
-#: ../src/utils/pasuspender.c:185
+#: ../src/utils/pasuspender.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Anslutningsfel: %s\n"
 
-#: ../src/utils/pasuspender.c:203
+#: ../src/utils/pasuspender.c:201
 #, c-format
 msgid "Got SIGINT, exiting.\n"
 msgstr "Erhöll SIGINT, avslutar.\n"
 
-#: ../src/utils/pasuspender.c:221
+#: ../src/utils/pasuspender.c:219
 #, c-format
 msgid "WARNING: Child process terminated by signal %u\n"
 msgstr "VARNING: Underordnad process avslutad av signalen %u\n"
 
-#: ../src/utils/pasuspender.c:230
+#: ../src/utils/pasuspender.c:228
 #, c-format
 msgid ""
 "%s [options] ... \n"
@@ -3037,7 +3084,7 @@ msgstr ""
 "  -s, --server=SERVER                   Namnet på servern att ansluta till\n"
 "\n"
 
-#: ../src/utils/pasuspender.c:268
+#: ../src/utils/pasuspender.c:266
 #, c-format
 msgid ""
 "pasuspender %s\n"
@@ -3048,22 +3095,22 @@ msgstr ""
 "Kompilerad med libpulse %s\n"
 "Länkad med libpulse %s\n"
 
-#: ../src/utils/pasuspender.c:297
+#: ../src/utils/pasuspender.c:295
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() misslyckades.\n"
 
-#: ../src/utils/pasuspender.c:310
+#: ../src/utils/pasuspender.c:308
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() misslyckades.\n"
 
-#: ../src/utils/pasuspender.c:322
+#: ../src/utils/pasuspender.c:320
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() misslyckades.\n"
 
-#: ../src/utils/pax11publish.c:60
+#: ../src/utils/pax11publish.c:58
 #, c-format
 msgid ""
 "%s [-D display] [-S server] [-O sink] [-I source] [-c file]  [-d|-e|-i|-r]\n"
@@ -3083,52 +3130,110 @@ msgstr ""
 "och kakfil.\n"
 " -r    Ta bort PulseAudio-data från X11-display\n"
 
-#: ../src/utils/pax11publish.c:93
+#: ../src/utils/pax11publish.c:91
 #, c-format
 msgid "Failed to parse command line.\n"
 msgstr "Misslyckades med att tolka kommandorad.\n"
 
-#: ../src/utils/pax11publish.c:112
+#: ../src/utils/pax11publish.c:110
 #, c-format
 msgid "Server: %s\n"
 msgstr "Server: %s\n"
 
-#: ../src/utils/pax11publish.c:114
+#: ../src/utils/pax11publish.c:112
 #, c-format
 msgid "Source: %s\n"
 msgstr "Källa: %s\n"
 
-#: ../src/utils/pax11publish.c:116
+#: ../src/utils/pax11publish.c:114
 #, c-format
 msgid "Sink: %s\n"
 msgstr "Mottagare: %s\n"
 
-#: ../src/utils/pax11publish.c:118
+#: ../src/utils/pax11publish.c:116
 #, c-format
 msgid "Cookie: %s\n"
 msgstr "Kaka: %s\n"
 
-#: ../src/utils/pax11publish.c:136
+#: ../src/utils/pax11publish.c:134
 #, c-format
 msgid "Failed to parse cookie data\n"
 msgstr "Misslyckades med att tolka kakdata\n"
 
-#: ../src/utils/pax11publish.c:141
+#: ../src/utils/pax11publish.c:139
 #, c-format
 msgid "Failed to save cookie data\n"
 msgstr "Misslyckades med att spara kakdata\n"
 
-#: ../src/utils/pax11publish.c:170
+#: ../src/utils/pax11publish.c:168
 #, c-format
 msgid "Failed to get FQDN.\n"
 msgstr "Misslyckades med att hämta FQDN.\n"
 
-#: ../src/utils/pax11publish.c:190
+#: ../src/utils/pax11publish.c:188
 #, c-format
 msgid "Failed to load cookie data\n"
 msgstr "Misslyckades med att läsa in kakdata\n"
 
-#: ../src/utils/pax11publish.c:208
+#: ../src/utils/pax11publish.c:206
 #, c-format
 msgid "Not yet implemented.\n"
 msgstr "Ännu inte implementerad.\n"
+
+#~ msgid ""
+#~ "%s [options]\n"
+#~ "\n"
+#~ "-h, --help                            Show this help\n"
+#~ "-v, --verbose                         Print debug messages\n"
+#~ "      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
+#~ "44100)\n"
+#~ "      --from-format=SAMPLEFORMAT      From sample type (defaults to "
+#~ "s16le)\n"
+#~ "      --from-channels=CHANNELS        From number of channels (defaults "
+#~ "to 1)\n"
+#~ "      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
+#~ "44100)\n"
+#~ "      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
+#~ "      --to-channels=CHANNELS          To number of channels (defaults to "
+#~ "1)\n"
+#~ "      --resample-method=METHOD        Resample method (defaults to auto)\n"
+#~ "      --seconds=SECONDS               From stream duration (defaults to "
+#~ "60)\n"
+#~ "\n"
+#~ "If the formats are not specified, the test performs all formats "
+#~ "combinations,\n"
+#~ "back and forth.\n"
+#~ "\n"
+#~ "Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
+#~ "alaw,\n"
+#~ "s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
+#~ "\n"
+#~ "See --dump-resample-methods for possible values of resample methods.\n"
+#~ msgstr ""
+#~ "%s [flaggor]\n"
+#~ "\n"
+#~ "-h, --help                            Visa denna hjälp\n"
+#~ "-v, --verbose                         Skriv ut felmeddelanden\n"
+#~ "      --from-rate=SAMPLINGSFREKVENS   Från samplingsfrekvens i Hz "
+#~ "(standard 44100)\n"
+#~ "      --from-format=SAMPLINGSFORMAT   Från samplingstyp (standard s16le)\n"
+#~ "      --from-channels=KANALER         Från antal kanaler (standard 1)\n"
+#~ "      --to-rate=SAMPLINGSFREKVENS     Till samplingsfrekvens i Hz "
+#~ "(standard 44100)\n"
+#~ "      --to-format=SAMPLINGSFORMAT     Till samplingstyp (standard s16le)\n"
+#~ "      --to-channels=KANALER           Till antal kanaler (standard 1)\n"
+#~ "      --resample-method=METOD         Omsamplingsmetod (standard auto)\n"
+#~ "      --seconds=SEKUNDER              Från strömuthållighet (standard "
+#~ "60)\n"
+#~ "\n"
+#~ "Om formaten inte är angivna utför testet alla formatkombinationer,\n"
+#~ "fram och tillbaka.\n"
+#~ "\n"
+#~ "Samplingstyp måste vare en av s16le, s16be, u8, float32le, float32be, "
+#~ "ulaw, alaw,\n"
+#~ "s24le, s24be, s24-32le, s24-32be, s32le, s32be (standard s16ne)\n"
+#~ "\n"
+#~ "Se --dump-resample-methods för möjliga värden på omsamplingsmetoder.\n"
+
+#~ msgid "%s %s\n"
+#~ msgstr "%s %s\n"
diff --git a/po/tr.po b/po/tr.po
index da121d5..9a72759 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -3,15 +3,15 @@
 # This file is distributed under the same license as the PulseAudio package.
 # Necdet Yücel <necdetyucel at gmail.com>, 2014.
 # Kaan Özdinçer <kaanozdincer at gmail.com>, 2014.
-# Muhammet Kara <muhammetk at gmail.com>, 2015, 2016.
+# Muhammet Kara <muhammetk at gmail.com>, 2015, 2016, 2017.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: PulseAudio master\n"
 "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?"
 "product=PulseAudio&keywords=I18N+L10N&component=misc\n"
-"POT-Creation-Date: 2016-03-11 02:23+0000\n"
-"PO-Revision-Date: 2016-04-17 01:04+0300\n"
+"POT-Creation-Date: 2017-05-02 15:27+0000\n"
+"PO-Revision-Date: 2017-05-20 11:16+0300\n"
 "Last-Translator: Muhammet Kara <muhammetk at gmail.com>\n"
 "Language-Team: Türkçe <gnome-turk at gnome.org>\n"
 "Language: tr\n"
@@ -21,8 +21,81 @@ msgstr ""
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: Gtranslator 2.91.7\n"
 
-#: ../src/daemon/cmdline.c:111
+#: ../src/daemon/cmdline.c:113
 #, c-format
+#| msgid ""
+#| "%s [options]\n"
+#| "\n"
+#| "COMMANDS:\n"
+#| "  -h, --help                            Show this help\n"
+#| "      --version                         Show version\n"
+#| "      --dump-conf                       Dump default configuration\n"
+#| "      --dump-modules                    Dump list of available modules\n"
+#| "      --dump-resample-methods           Dump available resample methods\n"
+#| "      --cleanup-shm                     Cleanup stale shared memory "
+#| "segments\n"
+#| "      --start                           Start the daemon if it is not "
+#| "running\n"
+#| "  -k  --kill                            Kill a running daemon\n"
+#| "      --check                           Check for a running daemon (only "
+#| "returns exit code)\n"
+#| "\n"
+#| "OPTIONS:\n"
+#| "      --system[=BOOL]                   Run as system-wide instance\n"
+#| "  -D, --daemonize[=BOOL]                Daemonize after startup\n"
+#| "      --fail[=BOOL]                     Quit when startup fails\n"
+#| "      --high-priority[=BOOL]            Try to set high nice level\n"
+#| "                                        (only available as root, when "
+#| "SUID or\n"
+#| "                                        with elevated RLIMIT_NICE)\n"
+#| "      --realtime[=BOOL]                 Try to enable realtime "
+#| "scheduling\n"
+#| "                                        (only available as root, when "
+#| "SUID or\n"
+#| "                                        with elevated RLIMIT_RTPRIO)\n"
+#| "      --disallow-module-loading[=BOOL]  Disallow module user requested "
+#| "module\n"
+#| "                                        loading/unloading after startup\n"
+#| "      --disallow-exit[=BOOL]            Disallow user requested exit\n"
+#| "      --exit-idle-time=SECS             Terminate the daemon when idle "
+#| "and this\n"
+#| "                                        time passed\n"
+#| "      --scache-idle-time=SECS           Unload autoloaded samples when "
+#| "idle and\n"
+#| "                                        this time passed\n"
+#| "      --log-level[=LEVEL]               Increase or set verbosity level\n"
+#| "  -v  --verbose                         Increase the verbosity level\n"
+#| "      --log-target={auto,syslog,stderr,file:PATH,newfile:PATH}\n"
+#| "                                        Specify the log target\n"
+#| "      --log-meta[=BOOL]                 Include code location in log "
+#| "messages\n"
+#| "      --log-time[=BOOL]                 Include timestamps in log "
+#| "messages\n"
+#| "      --log-backtrace=FRAMES            Include a backtrace in log "
+#| "messages\n"
+#| "  -p, --dl-search-path=PATH             Set the search path for dynamic "
+#| "shared\n"
+#| "                                        objects (plugins)\n"
+#| "      --resample-method=METHOD          Use the specified resampling "
+#| "method\n"
+#| "                                        (See --dump-resample-methods for\n"
+#| "                                        possible values)\n"
+#| "      --use-pid-file[=BOOL]             Create a PID file\n"
+#| "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter "
+#| "on\n"
+#| "                                        platforms that support it.\n"
+#| "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+#| "\n"
+#| "STARTUP SCRIPT:\n"
+#| "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin "
+#| "module with\n"
+#| "                                        the specified argument\n"
+#| "  -F, --file=FILENAME                   Run the specified script\n"
+#| "  -C                                    Open a command line on the "
+#| "running TTY\n"
+#| "                                        after startup\n"
+#| "\n"
+#| "  -n                                    Don't load default script file\n"
 msgid ""
 "%s [options]\n"
 "\n"
@@ -80,6 +153,7 @@ msgid ""
 "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
 "                                        platforms that support it.\n"
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+"      --enable-memfd[=BOOL]             Enable memfd shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
 "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
@@ -149,36 +223,38 @@ msgstr ""
 "  -p, --dl-search-path=PATH             Dinamik paylaşımlı nesneler "
 "(eklentiler)\n"
 "                                        için arama yolu ayarlar\n"
-"      --resample-method=METHOD          Belirtilen yeniden "
-"örneklendirme                                          yöntemini kullanır\n"
-"                                        (Olası değerler için şuna bakın\n"
+"      --resample-method=METHOD          Belirtilen yeniden örneklendirme "
+"yöntemini kullanır\n"
+"                                        (Olası değerler için şuna bakın:\n"
 "                                         --dump-resample-methods)\n"
 "      --use-pid-file[=BOOL]             Bir PID dosyası oluştur\n"
 "      --no-cpu-limit[=BOOL]             Desteklendiği platformlarda\n"
 "                                        CPU yükü sınırlayıcı kurmaz.\n"
 "      --disable-shm[=BOOL]              Paylaşımlı bellek desteğini devre "
 "dışı bırakır.\n"
+"      --enable-memfd[=BOOL]             memfd paylaşılan bellek desteğini "
+"etkinleştirir.\n"
 "\n"
 "BAŞLATMA KOMUT DOSYALARI:\n"
-"  -L, --load=\"MODÜL DEĞİŞKENLERİ\"         Belirtilen değişkenler ile\n"
+"  -L, --load=\"MODÜL DEĞİŞKENLERİ\"       Belirtilen değişkenler ile\n"
 "                                        belirtilen eklenti modüllerini "
 "yükler.\n"
 "  -F, --file=DOSYAADI                   Belirtilen betiği çalıştırır\n"
-"  -C                                  Başlangıçtan sonra çalışan TTY "
+"  -C                                    Başlangıçtan sonra çalışan TTY "
 "üzerinde\n"
 "                                        bir komut satırı açar\n"
 "\n"
 "  -n                                    Öntanımlı betik dosyasını yüklemez\n"
 
-#: ../src/daemon/cmdline.c:243
+#: ../src/daemon/cmdline.c:246
 msgid "--daemonize expects boolean argument"
 msgstr "--daemonize boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:251
+#: ../src/daemon/cmdline.c:254
 msgid "--fail expects boolean argument"
 msgstr "--fail boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:262
+#: ../src/daemon/cmdline.c:265
 msgid ""
 "--log-level expects log level argument (either numeric in range 0..4 or one "
 "of debug, info, notice, warn, error)."
@@ -186,27 +262,27 @@ msgstr ""
 "--log-level log seviyesi değişkeni bekler (ya 0..4 aralığında sayısal değer "
 "ya da debug, info, notice, warn, error değişkenlerinden birini)."
 
-#: ../src/daemon/cmdline.c:274
+#: ../src/daemon/cmdline.c:277
 msgid "--high-priority expects boolean argument"
 msgstr "--high-priority boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:282
+#: ../src/daemon/cmdline.c:285
 msgid "--realtime expects boolean argument"
 msgstr "--realtime boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:290
+#: ../src/daemon/cmdline.c:293
 msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:298
+#: ../src/daemon/cmdline.c:301
 msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:306
+#: ../src/daemon/cmdline.c:309
 msgid "--use-pid-file expects boolean argument"
 msgstr "--use-pid-file boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:325
+#: ../src/daemon/cmdline.c:328
 msgid ""
 "Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a "
 "valid file name 'file:<path>', 'newfile:<path>'."
@@ -214,7 +290,7 @@ msgstr ""
 "Geçersiz log hedefi: ya 'syslog', 'journal', 'stderr', 'auto' ya da geçerli "
 "bir dosya adı 'dosya: <path>','yenidosya:<path>' kullan."
 
-#: ../src/daemon/cmdline.c:327
+#: ../src/daemon/cmdline.c:330
 msgid ""
 "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
 "name 'file:<path>', 'newfile:<path>'."
@@ -222,97 +298,102 @@ msgstr ""
 "Geçersiz log hedefi: ya 'syslog', 'stderr', 'auto' ya da geçerli bir dosya "
 "adı 'dosya: <path>','yenidosya:<path>' kullan."
 
-#: ../src/daemon/cmdline.c:335
+#: ../src/daemon/cmdline.c:338
 msgid "--log-time expects boolean argument"
 msgstr "--log-time boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:343
+#: ../src/daemon/cmdline.c:346
 msgid "--log-meta expects boolean argument"
 msgstr "--log-meta boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:363
+#: ../src/daemon/cmdline.c:366
 #, c-format
 msgid "Invalid resample method '%s'."
 msgstr "Geçersiz yeniden örneklendirme yöntemi '%s'."
 
-#: ../src/daemon/cmdline.c:370
+#: ../src/daemon/cmdline.c:373
 msgid "--system expects boolean argument"
 msgstr "--system boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:378
+#: ../src/daemon/cmdline.c:381
 msgid "--no-cpu-limit expects boolean argument"
 msgstr "--no-cpu-limit boolean değişken bekler"
 
-#: ../src/daemon/cmdline.c:386
+#: ../src/daemon/cmdline.c:389
 msgid "--disable-shm expects boolean argument"
 msgstr "--disable-shm boolean değişken bekler"
 
-#: ../src/daemon/daemon-conf.c:259
+#: ../src/daemon/cmdline.c:397
+#| msgid "--realtime expects boolean argument"
+msgid "--enable-memfd expects boolean argument"
+msgstr "--enable-memfd boolean değişken bekler"
+
+#: ../src/daemon/daemon-conf.c:262
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Geçersiz log hedefi '%s'."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:277
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Geçersiz log seviyesi '%s'."
 
-#: ../src/daemon/daemon-conf.c:289
+#: ../src/daemon/daemon-conf.c:292
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Geçersiz yeniden örneklendirme yöntemi '%s'."
 
-#: ../src/daemon/daemon-conf.c:311
+#: ../src/daemon/daemon-conf.c:314
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] Geçersiz rlimit '%s'."
 
-#: ../src/daemon/daemon-conf.c:331
+#: ../src/daemon/daemon-conf.c:334
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Geçersiz örnekleme biçimi '%s'."
 
-#: ../src/daemon/daemon-conf.c:348 ../src/daemon/daemon-conf.c:365
+#: ../src/daemon/daemon-conf.c:351 ../src/daemon/daemon-conf.c:368
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Geçersiz örnekleme oranı '%s'."
 
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:391
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Geçersiz örnekleme kanalları '%s'."
 
-#: ../src/daemon/daemon-conf.c:405
+#: ../src/daemon/daemon-conf.c:408
 #, c-format
 msgid "[%s:%u] Invalid channel map '%s'."
 msgstr "[%s:%u] Geçersiz kanal adresleme '%s'."
 
-#: ../src/daemon/daemon-conf.c:422
+#: ../src/daemon/daemon-conf.c:425
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Geçersiz bölümlenme sayısı '%s'."
 
-#: ../src/daemon/daemon-conf.c:439
+#: ../src/daemon/daemon-conf.c:442
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Geçersiz bölümlenme boyutu '%s'."
 
-#: ../src/daemon/daemon-conf.c:456
+#: ../src/daemon/daemon-conf.c:459
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Geçersiz nice seviyesi '%s'."
 
-#: ../src/daemon/daemon-conf.c:499
+#: ../src/daemon/daemon-conf.c:502
 #, c-format
 msgid "[%s:%u] Invalid server type '%s'."
 msgstr "[%s:%u] Geçersiz sunucu türü '%s'."
 
-#: ../src/daemon/daemon-conf.c:613
+#: ../src/daemon/daemon-conf.c:620
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Yapılandırma dosyası açılamadı: %s"
 
-#: ../src/daemon/daemon-conf.c:629
+#: ../src/daemon/daemon-conf.c:636
 msgid ""
 "The specified default channel map has a different number of channels than "
 "the specified default number of channels."
@@ -320,7 +401,7 @@ msgstr ""
 "Belirtilen öntanımlı kanal adresleme belirtilmiş öntanımlı kanal sayısından "
 "farklı sayıda kanala sahiptir."
 
-#: ../src/daemon/daemon-conf.c:716
+#: ../src/daemon/daemon-conf.c:723
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Yapılandırma dosyasından oku: %s ###\n"
@@ -480,23 +561,19 @@ msgstr ""
 "%s. "
 
 #: ../src/daemon/main.c:712
-#| msgid "Running in system mode, but --disallow-exit not set!"
 msgid "Running in system mode, but --disallow-exit not set."
 msgstr "Sistem kipinde çalıştırılıyor fakat --disallow-exit ayarlı değil."
 
 #: ../src/daemon/main.c:715
-#| msgid "Running in system mode, but --disallow-module-loading not set!"
 msgid "Running in system mode, but --disallow-module-loading not set."
 msgstr ""
 "Sistem kipinde çalıştırılıyor fakat --disallow-module-loading ayarlı değil."
 
 #: ../src/daemon/main.c:718
-#| msgid "Running in system mode, forcibly disabling SHM mode!"
 msgid "Running in system mode, forcibly disabling SHM mode."
 msgstr "Sistem kipinde çalıştırılıyor, SHM kipi zorla devre dışı bırakılıyor."
 
 #: ../src/daemon/main.c:723
-#| msgid "Running in system mode, forcibly disabling exit idle time!"
 msgid "Running in system mode, forcibly disabling exit idle time."
 msgstr ""
 "Sistem kipinde çalıştırılıyor, boşta kalma süresi çıkışı zorla devre dışı "
@@ -516,7 +593,7 @@ msgstr "pipe() başarısız oldu: %s"
 msgid "fork() failed: %s"
 msgstr "fork() başarısız oldu: %s"
 
-#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:568
+#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:562
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() başarısız oldu: %s"
@@ -535,36 +612,40 @@ msgid "Failed to get machine ID"
 msgstr "Makine kimliği alınamadı"
 
 #: ../src/daemon/main.c:974
+#| msgid ""
+#| "OK, so you are running PA in system mode. Please note that you most "
+#| "likely shouldn't be doing that.\n"
+#| "If you do it nonetheless then it's your own fault if things don't work as "
+#| "expected.\n"
+#| "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
+#| "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why "
+#| "system mode is usually a bad idea."
 msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
+"OK, so you are running PA in system mode. Please make sure that you actually "
+"do want to do that.\n"
 "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
 "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
 "mode is usually a bad idea."
 msgstr ""
-"Tamam, sistem kipinde PA çalıştırıyorsunuz. Lütfen bunu yapmamanız "
-"gerektiğini aklınızda bulundurun.\n"
-"Eğer bunu yine de yaparsanız, bir şeyler beklendiği şekilde çalışmazsa o "
-"zaman bu sizin suçunuzdur.\n"
+"Tamam, sistem kipinde PA çalıştırıyorsunuz. Lütfen gerçekten bunu yapmak "
+"istediğinizden emin olun.\n"
 "Lütfen sistem kipinin neden genellikle kötü bir fikir olduğunun açıklamasını "
 "http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/"
 "WhatIsWrongWithSystemWide/ adresinden okuyunuz."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:990
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() başarısız oldu."
 
-#: ../src/daemon/main.c:1021
+#: ../src/daemon/main.c:1022
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() başarısız oldu."
 
-#: ../src/daemon/main.c:1089
+#: ../src/daemon/main.c:1092
 msgid "Failed to initialize daemon."
 msgstr "Artalan işlem başlatılamadı."
 
-#: ../src/daemon/main.c:1094
+#: ../src/daemon/main.c:1097
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Hiç yüklü modül olmadan artalan işlemlerin çalışması reddediliyor."
 
@@ -597,8 +678,8 @@ msgid "Line In"
 msgstr "Hat girişi"
 
 #: ../src/modules/alsa/alsa-mixer.c:2383 ../src/modules/alsa/alsa-mixer.c:2461
-#: ../src/modules/bluetooth/module-bluez4-device.c:2099
-#: ../src/modules/bluetooth/module-bluez5-device.c:1710
+#: ../src/modules/bluetooth/module-bluez4-device.c:2104
+#: ../src/modules/bluetooth/module-bluez5-device.c:1696
 msgid "Microphone"
 msgstr "Mikrofon"
 
@@ -659,8 +740,8 @@ msgid "No Bass Boost"
 msgstr "Bas Artırma"
 
 #: ../src/modules/alsa/alsa-mixer.c:2398
-#: ../src/modules/bluetooth/module-bluez4-device.c:2104
-#: ../src/modules/bluetooth/module-bluez5-device.c:1717
+#: ../src/modules/bluetooth/module-bluez4-device.c:2109
+#: ../src/modules/bluetooth/module-bluez5-device.c:1703
 msgid "Speaker"
 msgstr "Hoparlör"
 
@@ -717,12 +798,10 @@ msgid "Digital Passthrough (S/PDIF)"
 msgstr "Sayısal Düzgeçiş (S/PDIF)"
 
 #: ../src/modules/alsa/alsa-mixer.c:2480
-#| msgid "Multichannel"
 msgid "Multichannel Input"
 msgstr "Çok Kanallı Girdi"
 
 #: ../src/modules/alsa/alsa-mixer.c:2481
-#| msgid "Multichannel"
 msgid "Multichannel Output"
 msgstr "Çok Kanallı Çıktı"
 
@@ -816,49 +895,50 @@ msgstr "Dijital İki Kanallı (HDMI)"
 msgid "Digital Surround 5.1 (HDMI)"
 msgstr "Dijital Çevresel Ses 5.1 (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4151
+#: ../src/modules/alsa/alsa-mixer.c:4019 ../src/pulse/channelmap.c:775
+msgid "Stereo"
+msgstr "Stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:4152
 msgid "Analog Mono Duplex"
 msgstr "Analog Tekli İkili"
 
-#: ../src/modules/alsa/alsa-mixer.c:4152
+#: ../src/modules/alsa/alsa-mixer.c:4153
 msgid "Analog Stereo Duplex"
 msgstr "Analog İkili Stereo"
 
-#: ../src/modules/alsa/alsa-mixer.c:4153
+#: ../src/modules/alsa/alsa-mixer.c:4154
 msgid "Digital Stereo Duplex (IEC958)"
 msgstr "Sayısal İkili Stereo (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4154
-#| msgid "Multichannel"
+#: ../src/modules/alsa/alsa-mixer.c:4155
 msgid "Multichannel Duplex"
 msgstr "Çok Kanallı Duplex"
 
-#: ../src/modules/alsa/alsa-mixer.c:4155
+#: ../src/modules/alsa/alsa-mixer.c:4156
+#| msgid "Analog Stereo Duplex"
+msgid "Stereo Duplex"
+msgstr "İkili Stereo"
+
+#: ../src/modules/alsa/alsa-mixer.c:4157
 #: ../src/modules/alsa/module-alsa-card.c:186
-#: ../src/modules/bluetooth/module-bluez4-device.c:2295
-#: ../src/modules/bluetooth/module-bluez5-device.c:1941
+#: ../src/modules/bluetooth/module-bluez4-device.c:2324
+#: ../src/modules/bluetooth/module-bluez5-device.c:1951
 msgid "Off"
 msgstr "Kapalı"
 
-#: ../src/modules/alsa/alsa-mixer.c:4254
+#: ../src/modules/alsa/alsa-mixer.c:4256
 #, c-format
 msgid "%s Output"
 msgstr "%s Çıkışı"
 
-#: ../src/modules/alsa/alsa-mixer.c:4262
+#: ../src/modules/alsa/alsa-mixer.c:4264
 #, c-format
 msgid "%s Input"
 msgstr "%s Girişi"
 
-#: ../src/modules/alsa/alsa-sink.c:570
+#: ../src/modules/alsa/alsa-sink.c:572
 #, c-format
-#| msgid ""
-#| "ALSA woke us up to write new data to the device, but there was actually "
-#| "nothing to write!\n"
-#| "Most likely this is a bug in the ALSA driver '%s'. Please report this "
-#| "issue to the ALSA developers.\n"
-#| "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-#| "returned 0 or another value < min_avail."
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
 "nothing to write.\n"
@@ -874,7 +954,7 @@ msgstr ""
 "Biz POLLOUT ayarı ile uyandırıldık -- bununla birlikte sonraki "
 "snd_pcm_avail() 0 ya da min_avail değerinden küçük başka bir değer döndü."
 
-#: ../src/modules/alsa/alsa-sink.c:747
+#: ../src/modules/alsa/alsa-sink.c:756
 #, c-format
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
@@ -893,13 +973,6 @@ msgstr ""
 
 #: ../src/modules/alsa/alsa-source.c:529
 #, c-format
-#| msgid ""
-#| "ALSA woke us up to read new data from the device, but there was actually "
-#| "nothing to read!\n"
-#| "Most likely this is a bug in the ALSA driver '%s'. Please report this "
-#| "issue to the ALSA developers.\n"
-#| "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-#| "returned 0 or another value < min_avail."
 msgid ""
 "ALSA woke us up to read new data from the device, but there was actually "
 "nothing to read.\n"
@@ -932,7 +1005,7 @@ msgstr ""
 "Biz POLLIN ayarı ile anladık -- ayrıca sonraki snd_pcm_avail() 0 ya da "
 "min_avail değerinden küçük başka bir değer döndü."
 
-#: ../src/modules/alsa/alsa-util.c:1166 ../src/modules/alsa/alsa-util.c:1241
+#: ../src/modules/alsa/alsa-util.c:1168 ../src/modules/alsa/alsa-util.c:1243
 #, c-format
 msgid ""
 "snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -944,7 +1017,7 @@ msgstr ""
 "Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
 "geliştiricilerine bildirin."
 
-#: ../src/modules/alsa/alsa-util.c:1216
+#: ../src/modules/alsa/alsa-util.c:1218
 #, c-format
 msgid ""
 "snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s"
@@ -956,7 +1029,7 @@ msgstr ""
 "Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
 "geliştiricilerine bildirin."
 
-#: ../src/modules/alsa/alsa-util.c:1257
+#: ../src/modules/alsa/alsa-util.c:1259
 #, c-format
 msgid ""
 "snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
@@ -969,7 +1042,7 @@ msgstr ""
 "Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
 "geliştiricilerine bildirin."
 
-#: ../src/modules/alsa/alsa-util.c:1300
+#: ../src/modules/alsa/alsa-util.c:1302
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -981,100 +1054,89 @@ msgstr ""
 "Büyük ihtimalle bu bir ALSA sürücüsü '%s' hatasıdır. Lütfen bu sorunu ALSA "
 "geliştiricilerine bildirin."
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2089
-#: ../src/modules/bluetooth/module-bluez5-device.c:1700
+#: ../src/modules/bluetooth/module-bluez4-device.c:2094
+#: ../src/modules/bluetooth/module-bluez5-device.c:1686
 msgid "Headset"
 msgstr "Kulaklık"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2094
-#: ../src/modules/bluetooth/module-bluez5-device.c:1705
+#: ../src/modules/bluetooth/module-bluez4-device.c:2099
+#: ../src/modules/bluetooth/module-bluez5-device.c:1691
 msgid "Handsfree"
 msgstr "Ahizesiz"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2109
-#: ../src/modules/bluetooth/module-bluez5-device.c:1723
+#: ../src/modules/bluetooth/module-bluez4-device.c:2114
+#: ../src/modules/bluetooth/module-bluez5-device.c:1709
 msgid "Headphone"
 msgstr "Kulaklık"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2114
-#: ../src/modules/bluetooth/module-bluez5-device.c:1728
+#: ../src/modules/bluetooth/module-bluez4-device.c:2119
+#: ../src/modules/bluetooth/module-bluez5-device.c:1714
 msgid "Portable"
 msgstr "Taşınabilir"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2119
-#: ../src/modules/bluetooth/module-bluez5-device.c:1733
+#: ../src/modules/bluetooth/module-bluez4-device.c:2124
+#: ../src/modules/bluetooth/module-bluez5-device.c:1719
 msgid "Car"
 msgstr "Araba"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2124
-#: ../src/modules/bluetooth/module-bluez5-device.c:1738
+#: ../src/modules/bluetooth/module-bluez4-device.c:2129
+#: ../src/modules/bluetooth/module-bluez5-device.c:1724
 msgid "HiFi"
 msgstr "Yüksek duyarlılık"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2129
-#: ../src/modules/bluetooth/module-bluez5-device.c:1743
+#: ../src/modules/bluetooth/module-bluez4-device.c:2134
+#: ../src/modules/bluetooth/module-bluez5-device.c:1729
 msgid "Phone"
 msgstr "Telefon"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2137
-#: ../src/modules/bluetooth/module-bluez5-device.c:1695
-#: ../src/modules/bluetooth/module-bluez5-device.c:1711
-#: ../src/modules/bluetooth/module-bluez5-device.c:1749
+#: ../src/modules/bluetooth/module-bluez4-device.c:2142
+#: ../src/modules/bluetooth/module-bluez5-device.c:1681
+#: ../src/modules/bluetooth/module-bluez5-device.c:1697
+#: ../src/modules/bluetooth/module-bluez5-device.c:1735
 msgid "Bluetooth Output"
 msgstr "Bluetooth Çıkışı"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2140
-#: ../src/modules/bluetooth/module-bluez5-device.c:1694
-#: ../src/modules/bluetooth/module-bluez5-device.c:1716
-#: ../src/modules/bluetooth/module-bluez5-device.c:1722
-#: ../src/modules/bluetooth/module-bluez5-device.c:1748
+#: ../src/modules/bluetooth/module-bluez4-device.c:2145
+#: ../src/modules/bluetooth/module-bluez5-device.c:1680
+#: ../src/modules/bluetooth/module-bluez5-device.c:1702
+#: ../src/modules/bluetooth/module-bluez5-device.c:1708
+#: ../src/modules/bluetooth/module-bluez5-device.c:1734
 msgid "Bluetooth Input"
 msgstr "Bluetooth Girişi"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2176
+#: ../src/modules/bluetooth/module-bluez4-device.c:2186
 msgid "High Fidelity Playback (A2DP)"
 msgstr "Yüksek Kaliteli Çalma (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2187
+#: ../src/modules/bluetooth/module-bluez4-device.c:2198
 msgid "High Fidelity Capture (A2DP)"
 msgstr "Yüksek Kaliteli Yakalama (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2198
+#: ../src/modules/bluetooth/module-bluez4-device.c:2210
 msgid "Telephony Duplex (HSP/HFP)"
 msgstr "Çift yönlü Telefon (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2210
+#: ../src/modules/bluetooth/module-bluez4-device.c:2223
 msgid "Handsfree Gateway"
 msgstr "Eller Serbest Geçidi"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1786
+#: ../src/modules/bluetooth/module-bluez5-device.c:1776
 msgid "High Fidelity Playback (A2DP Sink)"
 msgstr "Yüksek Kaliteli Çalma (A2DP Alıcı)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1797
+#: ../src/modules/bluetooth/module-bluez5-device.c:1788
 msgid "High Fidelity Capture (A2DP Source)"
 msgstr "Yüksek Kaliteli Yakalama (A2DP Kaynak)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1808
+#: ../src/modules/bluetooth/module-bluez5-device.c:1800
 msgid "Headset Head Unit (HSP/HFP)"
 msgstr "Kulaklık Ana Birimi (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1820
+#: ../src/modules/bluetooth/module-bluez5-device.c:1813
 msgid "Headset Audio Gateway (HSP/HFP)"
 msgstr "Kulanlık Ses Geçidi (HSP/HFP)"
 
 #: ../src/modules/echo-cancel/module-echo-cancel.c:61
-#| msgid ""
-#| "source_name=<name for the source> source_properties=<properties for the "
-#| "source> source_master=<name of source to filter> sink_name=<name for the "
-#| "sink> sink_properties=<properties for the sink> sink_master=<name of sink "
-#| "to filter> adjust_time=<how often to readjust rates in s> "
-#| "adjust_threshold=<how much drift to readjust after in ms> format=<sample "
-#| "format> rate=<sample rate> channels=<number of channels> "
-#| "channel_map=<channel map> aec_method=<implementation to use> "
-#| "aec_args=<parameters for the AEC engine> save_aec=<save AEC data in /tmp> "
-#| "autoloaded=<set if this module is being loaded automatically> "
-#| "use_volume_sharing=<yes or no> "
 msgid ""
 "source_name=<name for the source> source_properties=<properties for the "
 "source> source_master=<name of source to filter> sink_name=<name for the "
@@ -1103,14 +1165,15 @@ msgstr ""
 msgid "On"
 msgstr "Açık"
 
-#: ../src/modules/module-always-sink.c:36
-msgid "Always keeps at least one sink loaded even if it's a null one"
-msgstr "Yüklenen alıcı boş bile olsa her zaman en az bir tanesini korur"
-
+#: ../src/modules/module-allow-passthrough.c:73
 #: ../src/modules/module-always-sink.c:82
 msgid "Dummy Output"
 msgstr "Sahte Çıkış"
 
+#: ../src/modules/module-always-sink.c:36
+msgid "Always keeps at least one sink loaded even if it's a null one"
+msgstr "Yüklenen alıcı boş bile olsa her zaman en az bir tanesini korur"
+
 #: ../src/modules/module-equalizer-sink.c:70
 msgid "General Purpose Equalizer"
 msgstr "Genel Amaçlı Denkleştirici"
@@ -1128,7 +1191,7 @@ msgstr ""
 "otomatikyüklenmiş=<set if this module is being loaded automatically> "
 "ses_paylaşım_kullan=<yes or no> "
 
-#: ../src/modules/module-filter-apply.c:46
+#: ../src/modules/module-filter-apply.c:48
 msgid "autoclean=<automatically unload unused filters?>"
 msgstr "otomatik temizle=<automatically unload unused filters?>"
 
@@ -1137,28 +1200,39 @@ msgid "Virtual LADSPA sink"
 msgstr "Sanal LADSPA alıcısı"
 
 #: ../src/modules/module-ladspa-sink.c:55
+#| msgid ""
+#| "sink_name=<name for the sink> sink_properties=<properties for the sink> "
+#| "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+#| "channels=<number of channels> channel_map=<input channel map> "
+#| "plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma "
+#| "separated list of input control values> input_ladspaport_map=<comma "
+#| "separated list of input LADSPA port names> output_ladspaport_map=<comma "
+#| "separated list of output LADSPA port names> "
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma separated list of "
-"input control values> input_ladspaport_map=<comma separated list of input "
-"LADSPA port names> output_ladspaport_map=<comma separated list of output "
-"LADSPA port names> "
-msgstr ""
-"alıcı_adı=<name for the sink> alıcı_özellikleri=<properties for the sink> "
-"ana=<name of sink to filter> biçim=<sample format> hız=<sample rate> "
-"kanallar=<number of channels> kanal_adresleme=<input channel map> "
-"eklenti=<ladspa plugin name> etiket=<ladspa plugin label> kontrol=<comma "
-"separated list of input control values> ladspaport_giriş_listesi=<comma "
-"separated list of input LADSPA port names> ladspaport_çıkış_listesi=<comma "
-"separated list of output LADSPA port names> "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<input channel map> plugin=<ladspa plugin name> label=<ladspa "
+"plugin label> control=<comma separated list of input control values> "
+"input_ladspaport_map=<comma separated list of input LADSPA port names> "
+"output_ladspaport_map=<comma separated list of output LADSPA port names> "
+"autoloaded=<set if this module is being loaded automatically> "
+msgstr ""
+"sink_name=<alıcı adı> sink_properties=<alıcı özellikleri> master=<süzülecek "
+"alıcının adı> sink_master=<süzülecek alıcının adı> format=<örnek biçimi> "
+"rate=<örnek hızı> channels=<kanal sayısı> channel_map=<giriş kanal haritası> "
+"plugin=<ladspa eklenti adı> label=<ladspa eklenti etiketi> control=<giriş "
+"denetim değerlerinin virgülle ayrılmış listesi> input_ladspaport_map=<giriş "
+"LADSPA bağlantı noktası adlarının virgülle ayrılmış listesi> "
+"output_ladspaport_map=<çıkış LADSPA bağlantı noktası adlarının virgülle "
+"ayrılmış listesi> autoloaded=<eğer bu modül kendiliğinden yükleniyorsa bunu "
+"ayarlayın> "
 
 #: ../src/modules/module-null-sink.c:47
 msgid "Clocked NULL sink"
 msgstr "Zamanlanmış BOŞ alıcı"
 
-#: ../src/modules/module-null-sink.c:280
+#: ../src/modules/module-null-sink.c:284
 msgid "Null Output"
 msgstr "Boş Çıkış"
 
@@ -1186,8 +1260,8 @@ msgstr "@HOSTNAME@ üzerindeki SES"
 msgid "Tunnel for %s@%s"
 msgstr "%s@%s için tünel"
 
-#: ../src/modules/module-tunnel-sink-new.c:517
-#: ../src/modules/module-tunnel-source-new.c:516
+#: ../src/modules/module-tunnel-sink-new.c:521
+#: ../src/modules/module-tunnel-source-new.c:520
 #, c-format
 msgid "Tunnel to %s/%s"
 msgstr "%s/%s tünel"
@@ -1197,18 +1271,26 @@ msgid "Virtual surround sink"
 msgstr "Sanal çevresel ses alıcısı"
 
 #: ../src/modules/module-virtual-surround-sink.c:51
+#| msgid ""
+#| "sink_name=<name for the sink> sink_properties=<properties for the sink> "
+#| "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+#| "channels=<number of channels> channel_map=<channel map> "
+#| "use_volume_sharing=<yes or no> force_flat_volume=<yes or no> hrir=/path/"
+#| "to/left_hrir.wav "
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> "
-"use_volume_sharing=<yes or no> force_flat_volume=<yes or no> hrir=/path/to/"
-"left_hrir.wav "
-msgstr ""
-"alıcı_adı=<name for the sink> alıcı_özellikleri=<properties for the sink> "
-"ana=<name of sink to filter> biçim=<sample format> hız=<sample rate> "
-"kanallar=<number of channels> kanal_adresleme=<channel map> "
-"ses_paylaşımı_kullan=<yes or no> force_flat_volume=<yes or no> hrir=/path/to/"
-"left_hrir.wav "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<channel map> use_volume_sharing=<yes or no> "
+"force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav autoloaded=<set if "
+"this module is being loaded automatically> "
+msgstr ""
+"sink_name=<alıcı adı> sink_properties=<alıcı özellikleri> master=<süzülecek "
+"alıcı adı> sink_master=<süzülecek alıcı adı> format=<örnek biçimi> "
+"rate=<örnek hızı> channels=<kanal sayısı> channel_map=<kanal haritası> "
+"use_volume_sharing=<evet ya da hayır> force_flat_volume=<evet ya da hayır> "
+"hrir=/dosyaya/gidenyol/left_hrir.wav autoloaded=<eğer bu modül kendiliğinden "
+"yükleniyorsa bunu ayarlayın> "
 
 #: ../src/modules/reserve-wrap.c:149
 msgid "PulseAudio Sound Server"
@@ -1418,18 +1500,14 @@ msgstr "Üst Arka Sol"
 msgid "Top Rear Right"
 msgstr "Üst Arka Sağ"
 
-#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:127
-#: ../src/pulse/sample.c:175 ../src/pulse/volume.c:294
-#: ../src/pulse/volume.c:320 ../src/pulse/volume.c:340
-#: ../src/pulse/volume.c:372 ../src/pulse/volume.c:412
-#: ../src/pulse/volume.c:431
+#: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:121
+#: ../src/pulse/sample.c:177 ../src/pulse/volume.c:306
+#: ../src/pulse/volume.c:332 ../src/pulse/volume.c:352
+#: ../src/pulse/volume.c:384 ../src/pulse/volume.c:424
+#: ../src/pulse/volume.c:443
 msgid "(invalid)"
 msgstr "(geçersiz)"
 
-#: ../src/pulse/channelmap.c:775
-msgid "Stereo"
-msgstr "Stereo"
-
 #: ../src/pulse/channelmap.c:780
 msgid "Surround 4.0"
 msgstr "Çevresel Ses 4.0"
@@ -1462,17 +1540,17 @@ msgstr "xcb_connection_has_error() doğru değer döndü"
 msgid "Failed to parse cookie data"
 msgstr "Çerez veri ayrıştırılamadı"
 
-#: ../src/pulse/context.c:660
+#: ../src/pulse/context.c:702
 #, c-format
 msgid "fork(): %s"
 msgstr "fork(): %s"
 
-#: ../src/pulse/context.c:715
+#: ../src/pulse/context.c:757
 #, c-format
 msgid "waitpid(): %s"
 msgstr "waitpid(): %s"
 
-#: ../src/pulse/context.c:1421
+#: ../src/pulse/context.c:1463
 #, c-format
 msgid "Received message for unknown extension '%s'"
 msgstr "Bilinmeyen eklenti '%s' için ileti alındı"
@@ -1493,7 +1571,7 @@ msgstr "çift yönlü"
 msgid "invalid"
 msgstr "geçersiz"
 
-#: ../src/pulsecore/core-util.c:1836
+#: ../src/pulsecore/core-util.c:1856
 #, c-format
 msgid ""
 "XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
@@ -1516,12 +1594,12 @@ msgstr "hayır"
 msgid "Cannot access autospawn lock."
 msgstr "Otomatik oluşturma kilidine erişim yok."
 
-#: ../src/pulsecore/log.c:154
+#: ../src/pulsecore/log.c:165
 #, c-format
 msgid "Failed to open target file '%s'."
 msgstr "Hedef dosya '%s' açılamadı."
 
-#: ../src/pulsecore/log.c:177
+#: ../src/pulsecore/log.c:188
 #, c-format
 msgid ""
 "Tried to open target file '%s', '%s.1', '%s.2' ... '%s.%d', but all failed."
@@ -1529,15 +1607,15 @@ msgstr ""
 "Hedef dosyaları '%s', '%s.1', '%s.2' ... '%s.%d' açmayı denedi fakat hiçbiri "
 "açılamadı."
 
-#: ../src/pulsecore/log.c:640
+#: ../src/pulsecore/log.c:651
 msgid "Invalid log target."
 msgstr "Geçersiz log hedefi."
 
-#: ../src/pulsecore/sink.c:3460
+#: ../src/pulsecore/sink.c:3464
 msgid "Built-in Audio"
 msgstr "Dahili Ses"
 
-#: ../src/pulsecore/sink.c:3465
+#: ../src/pulsecore/sink.c:3469
 msgid "Modem"
 msgstr "Modem"
 
@@ -1649,209 +1727,208 @@ msgstr "Giriş/Çıkış hatası"
 msgid "Device or resource busy"
 msgstr "Aygıt ya da kaynak meşgul"
 
-#: ../src/pulse/sample.c:177
+#: ../src/pulse/sample.c:179
 #, c-format
 msgid "%s %uch %uHz"
 msgstr "%s %uch %uHz"
 
-#: ../src/pulse/sample.c:189
+#: ../src/pulse/sample.c:191
 #, c-format
 msgid "%0.1f GiB"
 msgstr "%0.1f GiB"
 
-#: ../src/pulse/sample.c:191
+#: ../src/pulse/sample.c:193
 #, c-format
 msgid "%0.1f MiB"
 msgstr "%0.1f MiB"
 
-#: ../src/pulse/sample.c:193
+#: ../src/pulse/sample.c:195
 #, c-format
 msgid "%0.1f KiB"
 msgstr "%0.1f KiB"
 
-#: ../src/pulse/sample.c:195
+#: ../src/pulse/sample.c:197
 #, c-format
 msgid "%u B"
 msgstr "%u B"
 
-#: ../src/utils/pacat.c:117
+#: ../src/utils/pacat.c:134
 #, c-format
 msgid "Failed to drain stream: %s"
 msgstr "Akış boşaltma başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:122
+#: ../src/utils/pacat.c:139
 msgid "Playback stream drained."
 msgstr "Playback akışı boşaltıldı."
 
-#: ../src/utils/pacat.c:133
+#: ../src/utils/pacat.c:150
 msgid "Draining connection to server."
 msgstr "Sunucuya akış bağlantısı."
 
-#: ../src/utils/pacat.c:146
+#: ../src/utils/pacat.c:163
 #, c-format
 msgid "pa_stream_drain(): %s"
 msgstr "pa_stream_drain(): %s"
 
-#: ../src/utils/pacat.c:169
-#, c-format
-msgid "pa_stream_write() failed: %s"
-msgstr "pa_stream_write() başarısız oldu: %s"
-
-#: ../src/utils/pacat.c:210
+#: ../src/utils/pacat.c:194 ../src/utils/pacat.c:543
 #, c-format
 msgid "pa_stream_begin_write() failed: %s"
 msgstr "pa_stream_begin_write() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:260 ../src/utils/pacat.c:290
+#: ../src/utils/pacat.c:244 ../src/utils/pacat.c:274
 #, c-format
 msgid "pa_stream_peek() failed: %s"
 msgstr "pa_stream_peek() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:340
+#: ../src/utils/pacat.c:324
 msgid "Stream successfully created."
 msgstr "Akış başarılı bir şekilde oluşturuldu."
 
-#: ../src/utils/pacat.c:343
+#: ../src/utils/pacat.c:327
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s"
 msgstr "pa_stream_get_buffer_attr() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:331
 #, c-format
 msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 msgstr "Tampon ölçüleri: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 
-#: ../src/utils/pacat.c:350
+#: ../src/utils/pacat.c:334
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u"
 msgstr "Tampon ölçüleri: maxlength=%u, fragsize=%u"
 
-#: ../src/utils/pacat.c:354
+#: ../src/utils/pacat.c:338
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'."
 msgstr "Örnekleme tanımı '%s', kanal listesi '%s' kullanma."
 
-#: ../src/utils/pacat.c:358
+#: ../src/utils/pacat.c:342
 #, c-format
 msgid "Connected to device %s (index: %u, suspended: %s)."
 msgstr "Aygıta %s bağlanıldı (dizin: %u, askıda kalan: %s)."
 
-#: ../src/utils/pacat.c:368
+#: ../src/utils/pacat.c:352
 #, c-format
 msgid "Stream error: %s"
 msgstr "Akış hatası: %s"
 
-#: ../src/utils/pacat.c:378
+#: ../src/utils/pacat.c:362
 #, c-format
 msgid "Stream device suspended.%s"
 msgstr "Akış aygıtı askıda. %s"
 
-#: ../src/utils/pacat.c:380
+#: ../src/utils/pacat.c:364
 #, c-format
 msgid "Stream device resumed.%s"
 msgstr "Akış aygıtı devam ettirildi.%s"
 
-#: ../src/utils/pacat.c:388
+#: ../src/utils/pacat.c:372
 #, c-format
 msgid "Stream underrun.%s"
 msgstr "Akış yetersiz.%s"
 
-#: ../src/utils/pacat.c:395
+#: ../src/utils/pacat.c:379
 #, c-format
 msgid "Stream overrun.%s"
 msgstr "Akış taşması.%s"
 
-#: ../src/utils/pacat.c:402
+#: ../src/utils/pacat.c:386
 #, c-format
 msgid "Stream started.%s"
 msgstr "Akış başladı. %s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 #, c-format
 msgid "Stream moved to device %s (%u, %ssuspended).%s"
 msgstr "Akış %s aygıtına taşındı (%u, %sertelenmiş).%s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 msgid "not "
 msgstr "değil "
 
-#: ../src/utils/pacat.c:416
+#: ../src/utils/pacat.c:400
 #, c-format
 msgid "Stream buffer attributes changed.%s"
 msgstr "Akış tampon bellek özellikleri değişti. %s"
 
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:415
 msgid "Cork request stack is empty: corking stream"
 msgstr "Durdurma isteği yığını boş: akış durduruluyor"
 
-#: ../src/utils/pacat.c:437
+#: ../src/utils/pacat.c:421
 msgid "Cork request stack is empty: uncorking stream"
 msgstr "Durdurma isteği yığını boş: akış durdurma sonlandırılıyor"
 
-#: ../src/utils/pacat.c:441
-#| msgid "Warning: Received more uncork requests than cork requests!"
+#: ../src/utils/pacat.c:425
 msgid "Warning: Received more uncork requests than cork requests."
 msgstr "Uyarı: Durdurma isteğinden daha fazla devam ettirme isteği alındı."
 
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:450
 #, c-format
 msgid "Connection established.%s"
 msgstr "Bağlantı kuruldu.%s"
 
-#: ../src/utils/pacat.c:469
+#: ../src/utils/pacat.c:453
 #, c-format
 msgid "pa_stream_new() failed: %s"
 msgstr "pa_stream_new() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:507
+#: ../src/utils/pacat.c:491
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s"
 msgstr "pa_stream_connect_playback() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:513
+#: ../src/utils/pacat.c:497
 #, c-format
 msgid "Failed to set monitor stream: %s"
 msgstr "Akış izleme ayarlanamadı: %s"
 
-#: ../src/utils/pacat.c:517
+#: ../src/utils/pacat.c:501
 #, c-format
 msgid "pa_stream_connect_record() failed: %s"
 msgstr "pa_stream_connect_record() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:530 ../src/utils/pactl.c:1446
+#: ../src/utils/pacat.c:514 ../src/utils/pactl.c:1446
 #, c-format
 msgid "Connection failure: %s"
 msgstr "Bağlantı hatası: %s"
 
-#: ../src/utils/pacat.c:563
+#: ../src/utils/pacat.c:557
 msgid "Got EOF."
 msgstr "EOF Al."
 
-#: ../src/utils/pacat.c:600
+#: ../src/utils/pacat.c:581
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "pa_stream_write() başarısız oldu: %s"
+
+#: ../src/utils/pacat.c:605
 #, c-format
 msgid "write() failed: %s"
 msgstr "write() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:621
+#: ../src/utils/pacat.c:626
 msgid "Got signal, exiting."
 msgstr "Sinyal alındı, çıkılıyor."
 
-#: ../src/utils/pacat.c:635
+#: ../src/utils/pacat.c:640
 #, c-format
 msgid "Failed to get latency: %s"
 msgstr "Gecikme alınamadı: %s"
 
-#: ../src/utils/pacat.c:640
+#: ../src/utils/pacat.c:645
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec."
 msgstr "Zaman: %0.3f saniye; Gecikme: %0.0f usec."
 
-#: ../src/utils/pacat.c:661
+#: ../src/utils/pacat.c:666
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s"
 msgstr "pa_stream_update_timing_info() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:671
+#: ../src/utils/pacat.c:676
 #, c-format
 msgid ""
 "%s [options]\n"
@@ -1981,19 +2058,19 @@ msgstr ""
 "      --monitor-stream=INDEKS         INDEKS indeksine sahip alıcı "
 "girişinden kayıt yapar.\n"
 
-#: ../src/utils/pacat.c:788
+#: ../src/utils/pacat.c:793
 msgid "Play back encoded audio files on a PulseAudio sound server."
 msgstr ""
 "Bir PulseAudio ses sunucusu üzerinde kodlanmış ses dosyalarını oynatın."
 
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:797
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to a file."
 msgstr ""
 "Bir PulseAudio ses sunucusundan ses verilerini yakalayın ve bir dosyaya "
 "yazın."
 
-#: ../src/utils/pacat.c:796
+#: ../src/utils/pacat.c:801
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to STDOUT or "
 "the specified file."
@@ -2001,7 +2078,7 @@ msgstr ""
 "Bir PulseAudio ses sunucusundan ses verilerini yakalayın ve STDOUT'a ya da "
 "belirtilen dosyaya yazın."
 
-#: ../src/utils/pacat.c:800
+#: ../src/utils/pacat.c:805
 msgid ""
 "Play back audio data from STDIN or the specified file on a PulseAudio sound "
 "server."
@@ -2009,7 +2086,7 @@ msgstr ""
 "Bir PulseAudio ses sunucusu üzerinde STDIN'den ya da belirtilen dosyadan ses "
 "verilerini oynatın."
 
-#: ../src/utils/pacat.c:814
+#: ../src/utils/pacat.c:819
 #, c-format
 msgid ""
 "pacat %s\n"
@@ -2020,72 +2097,72 @@ msgstr ""
 "Libpulse %s ile derlendi\n"
 "Libpulse %s ile bağlantılı\n"
 
-#: ../src/utils/pacat.c:847 ../src/utils/pactl.c:1648
+#: ../src/utils/pacat.c:852 ../src/utils/pactl.c:1648
 #, c-format
 msgid "Invalid client name '%s'"
 msgstr "Geçersiz istemci adı '%s'"
 
-#: ../src/utils/pacat.c:862
+#: ../src/utils/pacat.c:867
 #, c-format
 msgid "Invalid stream name '%s'"
 msgstr "Geçersiz akış adı '%s'"
 
-#: ../src/utils/pacat.c:899
+#: ../src/utils/pacat.c:904
 #, c-format
 msgid "Invalid channel map '%s'"
 msgstr "Geçersiz kanal adresleme '%s'"
 
-#: ../src/utils/pacat.c:928 ../src/utils/pacat.c:942
+#: ../src/utils/pacat.c:933 ../src/utils/pacat.c:947
 #, c-format
 msgid "Invalid latency specification '%s'"
 msgstr "Geçersiz gecikme tanımı '%s'"
 
-#: ../src/utils/pacat.c:935 ../src/utils/pacat.c:949
+#: ../src/utils/pacat.c:940 ../src/utils/pacat.c:954
 #, c-format
 msgid "Invalid process time specification '%s'"
 msgstr "Geçersiz işlem zaman tanımı '%s'"
 
-#: ../src/utils/pacat.c:961
+#: ../src/utils/pacat.c:966
 #, c-format
 msgid "Invalid property '%s'"
 msgstr "Geçersiz özellik '%s'"
 
-#: ../src/utils/pacat.c:980
+#: ../src/utils/pacat.c:985
 #, c-format
 msgid "Unknown file format %s."
 msgstr "Bilinmeyen dosya biçimi %s."
 
-#: ../src/utils/pacat.c:995
+#: ../src/utils/pacat.c:1000
 msgid "Failed to parse the argument for --monitor-stream"
 msgstr "--monitor-stream için değişken ayrıştırılamadı"
 
-#: ../src/utils/pacat.c:1006
+#: ../src/utils/pacat.c:1011
 msgid "Invalid sample specification"
 msgstr "Geçersiz örnekleme tanımı"
 
-#: ../src/utils/pacat.c:1016
+#: ../src/utils/pacat.c:1021
 #, c-format
 msgid "open(): %s"
 msgstr "open(): %s"
 
-#: ../src/utils/pacat.c:1021
+#: ../src/utils/pacat.c:1026
 #, c-format
 msgid "dup2(): %s"
 msgstr "dup2(): %s"
 
-#: ../src/utils/pacat.c:1028
+#: ../src/utils/pacat.c:1033
 msgid "Too many arguments."
 msgstr "Çok fazla değişken."
 
-#: ../src/utils/pacat.c:1039
+#: ../src/utils/pacat.c:1044
 msgid "Failed to generate sample specification for file."
 msgstr "Dosya için örnekleme tanımı oluşturulamadı."
 
-#: ../src/utils/pacat.c:1065
+#: ../src/utils/pacat.c:1070
 msgid "Failed to open audio file."
 msgstr "Ses dosyası açılamadı."
 
-#: ../src/utils/pacat.c:1071
+#: ../src/utils/pacat.c:1076
 msgid ""
 "Warning: specified sample specification will be overwritten with "
 "specification from file."
@@ -2093,63 +2170,63 @@ msgstr ""
 "Uyarı: belirtilmiş örnek tanımlama, dosyadan alınacak başka bir tanımlama "
 "ile üzerine yazılacak."
 
-#: ../src/utils/pacat.c:1074 ../src/utils/pactl.c:1712
+#: ../src/utils/pacat.c:1079 ../src/utils/pactl.c:1712
 msgid "Failed to determine sample specification from file."
 msgstr "Dosyadan örnekleme tanımı belirlenemedi."
 
-#: ../src/utils/pacat.c:1083
+#: ../src/utils/pacat.c:1088
 msgid "Warning: Failed to determine channel map from file."
 msgstr "Uyarı: Dosyadan kanal adresleme belirlenemedi."
 
-#: ../src/utils/pacat.c:1094
+#: ../src/utils/pacat.c:1099
 msgid "Channel map doesn't match sample specification"
 msgstr "Kanal adresleme örnekleme tanımı ile eşleşmiyor"
 
-#: ../src/utils/pacat.c:1105
+#: ../src/utils/pacat.c:1110
 msgid "Warning: failed to write channel map to file."
 msgstr "Uyarı: kanal adresleme dosyaya yazılamadı."
 
-#: ../src/utils/pacat.c:1120
+#: ../src/utils/pacat.c:1125
 #, c-format
 msgid ""
 "Opening a %s stream with sample specification '%s' and channel map '%s'."
 msgstr ""
 "Örnekleme tanımı '%s' ve kanal adresleme '%s' ile bir %s akışı açılıyor."
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "recording"
 msgstr "kaydediliyor"
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "playback"
 msgstr "çal"
 
-#: ../src/utils/pacat.c:1145
+#: ../src/utils/pacat.c:1150
 msgid "Failed to set media name."
 msgstr "Ortam adı ayarlanamadı."
 
-#: ../src/utils/pacat.c:1152 ../src/utils/pactl.c:2062
+#: ../src/utils/pacat.c:1160 ../src/utils/pactl.c:2062
 msgid "pa_mainloop_new() failed."
 msgstr "pa_mainloop_new() başarısız oldu."
 
-#: ../src/utils/pacat.c:1175
+#: ../src/utils/pacat.c:1183
 msgid "io_new() failed."
 msgstr "io_new() başarısız oldu."
 
-#: ../src/utils/pacat.c:1182 ../src/utils/pactl.c:2074
+#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2074
 msgid "pa_context_new() failed."
 msgstr "pa_context_new() başarısız oldu."
 
-#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2080
+#: ../src/utils/pacat.c:1198 ../src/utils/pactl.c:2080
 #, c-format
 msgid "pa_context_connect() failed: %s"
 msgstr "pa_context_connect() başarısız oldu: %s"
 
-#: ../src/utils/pacat.c:1196
+#: ../src/utils/pacat.c:1204
 msgid "pa_context_rttime_new() failed."
 msgstr "pa_context_rttime_new() başarısız oldu."
 
-#: ../src/utils/pacat.c:1203 ../src/utils/pactl.c:2085
+#: ../src/utils/pacat.c:1211 ../src/utils/pactl.c:2085
 msgid "pa_mainloop_run() failed."
 msgstr "pa_mainloop_run() başarısız oldu."
 
@@ -2235,7 +2312,6 @@ msgid "TARGET"
 msgstr "HEDEF"
 
 #: ../src/utils/pacmd.c:76
-#| msgid "NUMERIC LEVEL"
 msgid "NUMERIC-LEVEL"
 msgstr "SAYISAL-SEVİYE"
 
@@ -3000,7 +3076,6 @@ msgid "Invalid source output index"
 msgstr "Geçersiz kaynak çıktı dizini"
 
 #: ../src/utils/pactl.c:1956
-#| msgid "You have to specify a sink name/index and a mute boolean"
 msgid ""
 "You have to specify a sink name/index and a mute action (0, 1, or 'toggle')"
 msgstr ""
@@ -3013,7 +3088,6 @@ msgid "Invalid mute specification"
 msgstr "Geçersiz sessiz tanımı"
 
 #: ../src/utils/pactl.c:1971
-#| msgid "You have to specify a source name/index and a mute boolean"
 msgid ""
 "You have to specify a source name/index and a mute action (0, 1, or 'toggle')"
 msgstr ""
@@ -3021,7 +3095,6 @@ msgstr ""
 "belirtmelisiniz"
 
 #: ../src/utils/pactl.c:1986
-#| msgid "You have to specify a sink input index and a mute boolean"
 msgid ""
 "You have to specify a sink input index and a mute action (0, 1, or 'toggle')"
 msgstr ""
@@ -3033,7 +3106,6 @@ msgid "Invalid sink input index specification"
 msgstr "Geçersiz alıcı girişi indeks tanımı"
 
 #: ../src/utils/pactl.c:2004
-#| msgid "You have to specify a source output index and a mute boolean"
 msgid ""
 "You have to specify a source output index and a mute action (0, 1, or "
 "'toggle')"
diff --git a/po/uk.po b/po/uk.po
index fed7685..f2187fa 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -1,14 +1,14 @@
 # Copyright (C) 2009 Free Software Foundation, Inc.
 # This file is distributed under the same license as the pulseaudio.master-tx package.
 #
-# Yuri Chornoivan <yurchor at ukr.net>, 2009, 2012, 2013, 2014, 2015.
+# Yuri Chornoivan <yurchor at ukr.net>, 2009, 2012, 2013, 2014, 2015, 2017.
 msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio.master-tx\n"
 "Report-Msgid-Bugs-To: https://bugs.freedesktop.org/enter_bug.cgi?"
 "product=PulseAudio&keywords=I18N+L10N&component=misc\n"
-"POT-Creation-Date: 2015-09-12 15:47+0000\n"
-"PO-Revision-Date: 2015-12-20 13:34+0200\n"
+"POT-Creation-Date: 2017-05-22 15:43+0000\n"
+"PO-Revision-Date: 2017-06-25 22:26+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor at ukr.net>\n"
 "Language-Team: Ukrainian <translation at linux.org.ua>\n"
 "Language: uk\n"
@@ -19,8 +19,81 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: ../src/daemon/cmdline.c:111
+#: ../src/daemon/cmdline.c:113
 #, c-format
+#| msgid ""
+#| "%s [options]\n"
+#| "\n"
+#| "COMMANDS:\n"
+#| "  -h, --help                            Show this help\n"
+#| "      --version                         Show version\n"
+#| "      --dump-conf                       Dump default configuration\n"
+#| "      --dump-modules                    Dump list of available modules\n"
+#| "      --dump-resample-methods           Dump available resample methods\n"
+#| "      --cleanup-shm                     Cleanup stale shared memory "
+#| "segments\n"
+#| "      --start                           Start the daemon if it is not "
+#| "running\n"
+#| "  -k  --kill                            Kill a running daemon\n"
+#| "      --check                           Check for a running daemon (only "
+#| "returns exit code)\n"
+#| "\n"
+#| "OPTIONS:\n"
+#| "      --system[=BOOL]                   Run as system-wide instance\n"
+#| "  -D, --daemonize[=BOOL]                Daemonize after startup\n"
+#| "      --fail[=BOOL]                     Quit when startup fails\n"
+#| "      --high-priority[=BOOL]            Try to set high nice level\n"
+#| "                                        (only available as root, when "
+#| "SUID or\n"
+#| "                                        with elevated RLIMIT_NICE)\n"
+#| "      --realtime[=BOOL]                 Try to enable realtime "
+#| "scheduling\n"
+#| "                                        (only available as root, when "
+#| "SUID or\n"
+#| "                                        with elevated RLIMIT_RTPRIO)\n"
+#| "      --disallow-module-loading[=BOOL]  Disallow module user requested "
+#| "module\n"
+#| "                                        loading/unloading after startup\n"
+#| "      --disallow-exit[=BOOL]            Disallow user requested exit\n"
+#| "      --exit-idle-time=SECS             Terminate the daemon when idle "
+#| "and this\n"
+#| "                                        time passed\n"
+#| "      --scache-idle-time=SECS           Unload autoloaded samples when "
+#| "idle and\n"
+#| "                                        this time passed\n"
+#| "      --log-level[=LEVEL]               Increase or set verbosity level\n"
+#| "  -v  --verbose                         Increase the verbosity level\n"
+#| "      --log-target={auto,syslog,stderr,file:PATH,newfile:PATH}\n"
+#| "                                        Specify the log target\n"
+#| "      --log-meta[=BOOL]                 Include code location in log "
+#| "messages\n"
+#| "      --log-time[=BOOL]                 Include timestamps in log "
+#| "messages\n"
+#| "      --log-backtrace=FRAMES            Include a backtrace in log "
+#| "messages\n"
+#| "  -p, --dl-search-path=PATH             Set the search path for dynamic "
+#| "shared\n"
+#| "                                        objects (plugins)\n"
+#| "      --resample-method=METHOD          Use the specified resampling "
+#| "method\n"
+#| "                                        (See --dump-resample-methods for\n"
+#| "                                        possible values)\n"
+#| "      --use-pid-file[=BOOL]             Create a PID file\n"
+#| "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter "
+#| "on\n"
+#| "                                        platforms that support it.\n"
+#| "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+#| "\n"
+#| "STARTUP SCRIPT:\n"
+#| "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin "
+#| "module with\n"
+#| "                                        the specified argument\n"
+#| "  -F, --file=FILENAME                   Run the specified script\n"
+#| "  -C                                    Open a command line on the "
+#| "running TTY\n"
+#| "                                        after startup\n"
+#| "\n"
+#| "  -n                                    Don't load default script file\n"
 msgid ""
 "%s [options]\n"
 "\n"
@@ -78,6 +151,7 @@ msgid ""
 "      --no-cpu-limit[=BOOL]             Do not install CPU load limiter on\n"
 "                                        platforms that support it.\n"
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
+"      --enable-memfd[=BOOL]             Enable memfd shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
 "  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
@@ -160,6 +234,8 @@ msgstr ""
 "підтримують.\n"
 "      --disable-shm[=BOOL]              Вимкнути підтримку спільного "
 "використання пам’яті.\n"
+"      --enable-memfd[=BOOL]             Увімкнути підтримку спільного "
+"використання пам’яті memfd.\n"
 "\n"
 "СКРИПТ ЗАПУСКУ:\n"
 "  -L, --load=\"ПАРАМЕТРИ МОДУЛЯ\"         Завантажити вказаний модуль "
@@ -173,15 +249,15 @@ msgstr ""
 "  -n                                    Не завантажувати типовий файл "
 "скрипту\n"
 
-#: ../src/daemon/cmdline.c:243
+#: ../src/daemon/cmdline.c:246
 msgid "--daemonize expects boolean argument"
-msgstr "Для параметра --daemonize слід вказувати булівський аргумент"
+msgstr "Для параметра --daemonize слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:251
+#: ../src/daemon/cmdline.c:254
 msgid "--fail expects boolean argument"
-msgstr "Для параметра --fail слід вказувати булівський аргумент"
+msgstr "Для параметра --fail слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:262
+#: ../src/daemon/cmdline.c:265
 msgid ""
 "--log-level expects log level argument (either numeric in range 0..4 or one "
 "of debug, info, notice, warn, error)."
@@ -190,28 +266,28 @@ msgstr ""
 "(числове у діапазоні 0..4 або одне зі значень debug, info, notice, warn, "
 "error)."
 
-#: ../src/daemon/cmdline.c:274
+#: ../src/daemon/cmdline.c:277
 msgid "--high-priority expects boolean argument"
-msgstr "Для параметра --high-priority слід вказувати булівський аргумент"
+msgstr "Для параметра --high-priority слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:282
+#: ../src/daemon/cmdline.c:285
 msgid "--realtime expects boolean argument"
-msgstr "Для параметра --realtime слід вказувати булівський аргумент"
+msgstr "Для параметра --realtime слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:290
+#: ../src/daemon/cmdline.c:293
 msgid "--disallow-module-loading expects boolean argument"
 msgstr ""
-"Для параметра --disallow-module-loading слід вказувати булівський аргумент"
+"Для параметра --disallow-module-loading слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:298
+#: ../src/daemon/cmdline.c:301
 msgid "--disallow-exit expects boolean argument"
-msgstr "Для параметра --disallow-exit слід вказувати булівський аргумент"
+msgstr "Для параметра --disallow-exit слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:306
+#: ../src/daemon/cmdline.c:309
 msgid "--use-pid-file expects boolean argument"
-msgstr "Для параметра --use-pid-file слід вказувати булівський аргумент"
+msgstr "Для параметра --use-pid-file слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:325
+#: ../src/daemon/cmdline.c:328
 msgid ""
 "Invalid log target: use either 'syslog', 'journal','stderr' or 'auto' or a "
 "valid file name 'file:<path>', 'newfile:<path>'."
@@ -219,7 +295,7 @@ msgstr ""
 "Журнал вказано неправильно: можливі варіанти «syslog», «journal», «stderr», "
 "«auto» і чинна назва файла «file:<шлях>» або «newfile:<шлях>»."
 
-#: ../src/daemon/cmdline.c:327
+#: ../src/daemon/cmdline.c:330
 msgid ""
 "Invalid log target: use either 'syslog', 'stderr' or 'auto' or a valid file "
 "name 'file:<path>', 'newfile:<path>'."
@@ -227,97 +303,102 @@ msgstr ""
 "Журнал вказано неправильно: можливі варіанти «syslog», «stderr», «auto» і "
 "чинна назва файла «file:<шлях>» або «newfile:<шлях>»."
 
-#: ../src/daemon/cmdline.c:335
+#: ../src/daemon/cmdline.c:338
 msgid "--log-time expects boolean argument"
-msgstr "Для параметра --log-time слід вказувати булівський аргумент"
+msgstr "Для параметра --log-time слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:343
+#: ../src/daemon/cmdline.c:346
 msgid "--log-meta expects boolean argument"
-msgstr "Для параметра --log-meta слід вказувати булівський аргумент"
+msgstr "Для параметра --log-meta слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:363
+#: ../src/daemon/cmdline.c:366
 #, c-format
 msgid "Invalid resample method '%s'."
 msgstr "Некоректний метод зміни частотних характеристик «%s»."
 
-#: ../src/daemon/cmdline.c:370
+#: ../src/daemon/cmdline.c:373
 msgid "--system expects boolean argument"
-msgstr "Для параметра --system слід вказувати булівський аргумент"
+msgstr "Для параметра --system слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:378
+#: ../src/daemon/cmdline.c:381
 msgid "--no-cpu-limit expects boolean argument"
-msgstr "Для параметра --no-cpu-limit слід вказувати булівський аргумент"
+msgstr "Для параметра --no-cpu-limit слід вказувати булевий аргумент"
 
-#: ../src/daemon/cmdline.c:386
+#: ../src/daemon/cmdline.c:389
 msgid "--disable-shm expects boolean argument"
-msgstr "Для параметра --disable-shm слід вказувати булівський аргумент"
+msgstr "Для параметра --disable-shm слід вказувати булевий аргумент"
+
+#: ../src/daemon/cmdline.c:397
+#| msgid "--realtime expects boolean argument"
+msgid "--enable-memfd expects boolean argument"
+msgstr "Для параметра --enable-memfd слід вказувати булевий аргумент"
 
-#: ../src/daemon/daemon-conf.c:259
+#: ../src/daemon/daemon-conf.c:262
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Некоректний журнал «%s»."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:277
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Некоректний рівень журналювання «%s»."
 
-#: ../src/daemon/daemon-conf.c:289
+#: ../src/daemon/daemon-conf.c:292
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Некоректний метод зміни частотних характеристик «%s»."
 
-#: ../src/daemon/daemon-conf.c:311
+#: ../src/daemon/daemon-conf.c:314
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] Некоректне значення rlimit «%s»."
 
-#: ../src/daemon/daemon-conf.c:331
+#: ../src/daemon/daemon-conf.c:334
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Некоректний формат фрагмента «%s»."
 
-#: ../src/daemon/daemon-conf.c:348 ../src/daemon/daemon-conf.c:365
+#: ../src/daemon/daemon-conf.c:351 ../src/daemon/daemon-conf.c:368
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Некоректна частота вибірки «%s»."
 
-#: ../src/daemon/daemon-conf.c:388
+#: ../src/daemon/daemon-conf.c:391
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Некоректні канали фрагмента «%s»."
 
-#: ../src/daemon/daemon-conf.c:405
+#: ../src/daemon/daemon-conf.c:408
 #, c-format
 msgid "[%s:%u] Invalid channel map '%s'."
 msgstr "[%s:%u] Некоректна карта каналів «%s»'."
 
-#: ../src/daemon/daemon-conf.c:422
+#: ../src/daemon/daemon-conf.c:425
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Некоректна кількість фрагментів «%s»."
 
-#: ../src/daemon/daemon-conf.c:439
+#: ../src/daemon/daemon-conf.c:442
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Некоректний розмір фрагмента «%s»."
 
-#: ../src/daemon/daemon-conf.c:456
+#: ../src/daemon/daemon-conf.c:459
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Некоректний рівень nice «%s»."
 
-#: ../src/daemon/daemon-conf.c:499
+#: ../src/daemon/daemon-conf.c:502
 #, c-format
 msgid "[%s:%u] Invalid server type '%s'."
 msgstr "[%s:%u] Некоректний тип сервера «%s»."
 
-#: ../src/daemon/daemon-conf.c:613
+#: ../src/daemon/daemon-conf.c:620
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Не вдалося відкрити файл налаштувань: %s"
 
-#: ../src/daemon/daemon-conf.c:629
+#: ../src/daemon/daemon-conf.c:636
 msgid ""
 "The specified default channel map has a different number of channels than "
 "the specified default number of channels."
@@ -325,7 +406,7 @@ msgstr ""
 "У вказаній типовій карті каналів визначається інша кількість каналів, ніж "
 "типова кількість каналів."
 
-#: ../src/daemon/daemon-conf.c:716
+#: ../src/daemon/daemon-conf.c:723
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Прочитано з файла налаштувань: %s ###\n"
@@ -489,25 +570,21 @@ msgstr ""
 "Виконуємо докладнішу діагностику."
 
 #: ../src/daemon/main.c:712
-#| msgid "Running in system mode, but --disallow-exit not set!"
 msgid "Running in system mode, but --disallow-exit not set."
 msgstr ""
 "Запуск у загальносистемному режимі, але не встановлено --disallow-exit."
 
 #: ../src/daemon/main.c:715
-#| msgid "Running in system mode, but --disallow-module-loading not set!"
 msgid "Running in system mode, but --disallow-module-loading not set."
 msgstr ""
 "Запуск у загальносистемному режимі, але не встановлено --disallow-module-"
 "loading."
 
 #: ../src/daemon/main.c:718
-#| msgid "Running in system mode, forcibly disabling SHM mode!"
 msgid "Running in system mode, forcibly disabling SHM mode."
 msgstr "Запуск у загальносистемному режимі, примусове вимикання режиму SHM."
 
 #: ../src/daemon/main.c:723
-#| msgid "Running in system mode, forcibly disabling exit idle time!"
 msgid "Running in system mode, forcibly disabling exit idle time."
 msgstr ""
 "Запуск у загальносистемному режимі, примусове вимикання режиму параметрів "
@@ -527,7 +604,7 @@ msgstr "Спроба виконання pipe() завершилася невда
 msgid "fork() failed: %s"
 msgstr "Спроба виконання fork() завершилася невдало: %s"
 
-#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:568
+#: ../src/daemon/main.c:782 ../src/daemon/main.c:853 ../src/utils/pacat.c:562
 #, c-format
 msgid "read() failed: %s"
 msgstr "Спроба виконання read() завершилася невдало: %s"
@@ -546,36 +623,40 @@ msgid "Failed to get machine ID"
 msgstr "Спроба отримати ідентифікатор системи завершилася невдало"
 
 #: ../src/daemon/main.c:974
+#| msgid ""
+#| "OK, so you are running PA in system mode. Please note that you most "
+#| "likely shouldn't be doing that.\n"
+#| "If you do it nonetheless then it's your own fault if things don't work as "
+#| "expected.\n"
+#| "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
+#| "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why "
+#| "system mode is usually a bad idea."
 msgid ""
-"OK, so you are running PA in system mode. Please note that you most likely "
-"shouldn't be doing that.\n"
-"If you do it nonetheless then it's your own fault if things don't work as "
-"expected.\n"
+"OK, so you are running PA in system mode. Please make sure that you actually "
+"do want to do that.\n"
 "Please read http://www.freedesktop.org/wiki/Software/PulseAudio/"
 "Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
 "mode is usually a bad idea."
 msgstr ""
-"Гаразд, ви запустили PA у системному режимі. Будь ласка, зауважте, що "
-"здебільшого у цьому немає потреби.\n"
-"Якщо ви все ж це зробили, відповідальність за всі негаразди лягає саме на "
-"вас.\n"
+"Гаразд, ви запустили PA у системному режимі. Будь ласка, переконайтеся, що це "
+"саме те, що вам потрібно.\n"
 "Будь ласка, ознайомтеся зі статтею http://www.freedesktop.org/wiki/Software/"
 "PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/ , щоб дізнатися про "
 "те, чому не варто використовувати системний режим."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:990
 msgid "pa_pid_file_create() failed."
 msgstr "Спроба виконання pa_pid_file_create() зазнала невдачі."
 
-#: ../src/daemon/main.c:1021
+#: ../src/daemon/main.c:1022
 msgid "pa_core_new() failed."
 msgstr "Спроба виконання pa_core_new() зазнала невдачі."
 
-#: ../src/daemon/main.c:1089
+#: ../src/daemon/main.c:1092
 msgid "Failed to initialize daemon."
 msgstr "Не вдалося ініціалізувати фонову службу."
 
-#: ../src/daemon/main.c:1094
+#: ../src/daemon/main.c:1097
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr ""
 "Запуск фонової служби без жодного завантаженого модуля, служба не буде "
@@ -589,155 +670,155 @@ msgstr "Звукова система PulseAudio"
 msgid "Start the PulseAudio Sound System"
 msgstr "Запустити звукову систему PulseAudio"
 
-#: ../src/modules/alsa/alsa-mixer.c:2394
+#: ../src/modules/alsa/alsa-mixer.c:2378
 msgid "Input"
 msgstr "Вхід"
 
-#: ../src/modules/alsa/alsa-mixer.c:2395
+#: ../src/modules/alsa/alsa-mixer.c:2379
 msgid "Docking Station Input"
 msgstr "Вхідний канал док-станції"
 
-#: ../src/modules/alsa/alsa-mixer.c:2396
+#: ../src/modules/alsa/alsa-mixer.c:2380
 msgid "Docking Station Microphone"
 msgstr "Мікрофон док-станції"
 
-#: ../src/modules/alsa/alsa-mixer.c:2397
+#: ../src/modules/alsa/alsa-mixer.c:2381
 msgid "Docking Station Line In"
 msgstr "Лінійний вхід док-станції"
 
-#: ../src/modules/alsa/alsa-mixer.c:2398 ../src/modules/alsa/alsa-mixer.c:2483
+#: ../src/modules/alsa/alsa-mixer.c:2382 ../src/modules/alsa/alsa-mixer.c:2467
 msgid "Line In"
 msgstr "Лінійний вхід"
 
-#: ../src/modules/alsa/alsa-mixer.c:2399 ../src/modules/alsa/alsa-mixer.c:2477
-#: ../src/modules/bluetooth/module-bluez4-device.c:2102
-#: ../src/modules/bluetooth/module-bluez5-device.c:1710
+#: ../src/modules/alsa/alsa-mixer.c:2383 ../src/modules/alsa/alsa-mixer.c:2461
+#: ../src/modules/bluetooth/module-bluez4-device.c:2104
+#: ../src/modules/bluetooth/module-bluez5-device.c:1750
 msgid "Microphone"
 msgstr "Мікрофон"
 
-#: ../src/modules/alsa/alsa-mixer.c:2400 ../src/modules/alsa/alsa-mixer.c:2478
+#: ../src/modules/alsa/alsa-mixer.c:2384 ../src/modules/alsa/alsa-mixer.c:2462
 msgid "Front Microphone"
 msgstr "Передній мікрофон"
 
-#: ../src/modules/alsa/alsa-mixer.c:2401 ../src/modules/alsa/alsa-mixer.c:2479
+#: ../src/modules/alsa/alsa-mixer.c:2385 ../src/modules/alsa/alsa-mixer.c:2463
 msgid "Rear Microphone"
 msgstr "Задній мікрофон"
 
-#: ../src/modules/alsa/alsa-mixer.c:2402
+#: ../src/modules/alsa/alsa-mixer.c:2386
 msgid "External Microphone"
 msgstr "Зовнішній мікрофон"
 
-#: ../src/modules/alsa/alsa-mixer.c:2403 ../src/modules/alsa/alsa-mixer.c:2481
+#: ../src/modules/alsa/alsa-mixer.c:2387 ../src/modules/alsa/alsa-mixer.c:2465
 msgid "Internal Microphone"
 msgstr "Вбудований мікрофон"
 
-#: ../src/modules/alsa/alsa-mixer.c:2404 ../src/modules/alsa/alsa-mixer.c:2484
+#: ../src/modules/alsa/alsa-mixer.c:2388 ../src/modules/alsa/alsa-mixer.c:2468
 msgid "Radio"
 msgstr "Радіо"
 
-#: ../src/modules/alsa/alsa-mixer.c:2405 ../src/modules/alsa/alsa-mixer.c:2485
+#: ../src/modules/alsa/alsa-mixer.c:2389 ../src/modules/alsa/alsa-mixer.c:2469
 msgid "Video"
 msgstr "Відео"
 
-#: ../src/modules/alsa/alsa-mixer.c:2406
+#: ../src/modules/alsa/alsa-mixer.c:2390
 msgid "Automatic Gain Control"
 msgstr "Автоматичне керування підсиленням"
 
-#: ../src/modules/alsa/alsa-mixer.c:2407
+#: ../src/modules/alsa/alsa-mixer.c:2391
 msgid "No Automatic Gain Control"
 msgstr "Без автоматичного керування підсиленням"
 
-#: ../src/modules/alsa/alsa-mixer.c:2408
+#: ../src/modules/alsa/alsa-mixer.c:2392
 msgid "Boost"
 msgstr "Підсилення"
 
-#: ../src/modules/alsa/alsa-mixer.c:2409
+#: ../src/modules/alsa/alsa-mixer.c:2393
 msgid "No Boost"
 msgstr "Без пісилення"
 
-#: ../src/modules/alsa/alsa-mixer.c:2410
+#: ../src/modules/alsa/alsa-mixer.c:2394
 msgid "Amplifier"
 msgstr "Підсилювач"
 
-#: ../src/modules/alsa/alsa-mixer.c:2411
+#: ../src/modules/alsa/alsa-mixer.c:2395
 msgid "No Amplifier"
 msgstr "Без підсилювача"
 
-#: ../src/modules/alsa/alsa-mixer.c:2412
+#: ../src/modules/alsa/alsa-mixer.c:2396
 msgid "Bass Boost"
 msgstr "Підсилення басів"
 
-#: ../src/modules/alsa/alsa-mixer.c:2413
+#: ../src/modules/alsa/alsa-mixer.c:2397
 msgid "No Bass Boost"
 msgstr "Без підсилення"
 
-#: ../src/modules/alsa/alsa-mixer.c:2414
-#: ../src/modules/bluetooth/module-bluez4-device.c:2107
-#: ../src/modules/bluetooth/module-bluez5-device.c:1717
+#: ../src/modules/alsa/alsa-mixer.c:2398
+#: ../src/modules/bluetooth/module-bluez4-device.c:2109
+#: ../src/modules/bluetooth/module-bluez5-device.c:1757
 msgid "Speaker"
 msgstr "Гучномовець"
 
-#: ../src/modules/alsa/alsa-mixer.c:2415 ../src/modules/alsa/alsa-mixer.c:2487
+#: ../src/modules/alsa/alsa-mixer.c:2399 ../src/modules/alsa/alsa-mixer.c:2471
 msgid "Headphones"
 msgstr "Аналогові навушники"
 
-#: ../src/modules/alsa/alsa-mixer.c:2476
+#: ../src/modules/alsa/alsa-mixer.c:2460
 msgid "Analog Input"
 msgstr "Аналогових вхід"
 
-#: ../src/modules/alsa/alsa-mixer.c:2480
+#: ../src/modules/alsa/alsa-mixer.c:2464
 msgid "Dock Microphone"
 msgstr "Мікрофон стикувальної станції"
 
-#: ../src/modules/alsa/alsa-mixer.c:2482
+#: ../src/modules/alsa/alsa-mixer.c:2466
 msgid "Headset Microphone"
 msgstr "Мікрофон гарнітури"
 
-#: ../src/modules/alsa/alsa-mixer.c:2486
+#: ../src/modules/alsa/alsa-mixer.c:2470
 msgid "Analog Output"
 msgstr "Аналогове відтворення"
 
-#: ../src/modules/alsa/alsa-mixer.c:2488
+#: ../src/modules/alsa/alsa-mixer.c:2472
 msgid "LFE on Separate Mono Output"
 msgstr "Аналоговий вихід (сабвуфер)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2489
+#: ../src/modules/alsa/alsa-mixer.c:2473
 msgid "Line Out"
 msgstr "Лінійний вихід"
 
-#: ../src/modules/alsa/alsa-mixer.c:2490
+#: ../src/modules/alsa/alsa-mixer.c:2474
 msgid "Analog Mono Output"
 msgstr "Аналоговий моно-вихід"
 
-#: ../src/modules/alsa/alsa-mixer.c:2491
+#: ../src/modules/alsa/alsa-mixer.c:2475
 msgid "Speakers"
 msgstr "Гучномовці"
 
-#: ../src/modules/alsa/alsa-mixer.c:2492
+#: ../src/modules/alsa/alsa-mixer.c:2476
 msgid "HDMI / DisplayPort"
 msgstr "HDMI / DisplayPort"
 
-#: ../src/modules/alsa/alsa-mixer.c:2493
+#: ../src/modules/alsa/alsa-mixer.c:2477
 msgid "Digital Output (S/PDIF)"
 msgstr "Цифровий вихід (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2494
+#: ../src/modules/alsa/alsa-mixer.c:2478
 msgid "Digital Input (S/PDIF)"
 msgstr "Цифровий вхід (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2495
+#: ../src/modules/alsa/alsa-mixer.c:2479
 msgid "Digital Passthrough (S/PDIF)"
 msgstr "Цифрове передавання (S/PDIF)"
 
-#: ../src/modules/alsa/alsa-mixer.c:2496
+#: ../src/modules/alsa/alsa-mixer.c:2480
 msgid "Multichannel Input"
 msgstr "Багатоканальний вхід"
 
-#: ../src/modules/alsa/alsa-mixer.c:2497
+#: ../src/modules/alsa/alsa-mixer.c:2481
 msgid "Multichannel Output"
 msgstr "Багатоканальний вихід"
 
-#: ../src/modules/alsa/alsa-mixer.c:4003
+#: ../src/modules/alsa/alsa-mixer.c:3990
 msgid "Analog Mono"
 msgstr "Аналогове моно"
 
@@ -746,129 +827,131 @@ msgstr "Аналогове моно"
 #. * here would lead to the source name to become "Analog Stereo Input
 #. * Input". The same logic applies to analog-stereo-output,
 #. * multichannel-input and multichannel-output.
-#: ../src/modules/alsa/alsa-mixer.c:4004 ../src/modules/alsa/alsa-mixer.c:4010
-#: ../src/modules/alsa/alsa-mixer.c:4011
+#: ../src/modules/alsa/alsa-mixer.c:3991 ../src/modules/alsa/alsa-mixer.c:3997
+#: ../src/modules/alsa/alsa-mixer.c:3998
 msgid "Analog Stereo"
 msgstr "Аналогове стерео"
 
-#: ../src/modules/alsa/alsa-mixer.c:4012 ../src/modules/alsa/alsa-mixer.c:4013
+#: ../src/modules/alsa/alsa-mixer.c:3999 ../src/modules/alsa/alsa-mixer.c:4000
 msgid "Multichannel"
 msgstr "Багатоканальний"
 
-#: ../src/modules/alsa/alsa-mixer.c:4014
+#: ../src/modules/alsa/alsa-mixer.c:4001
 msgid "Analog Surround 2.1"
 msgstr "Аналоговий об'ємний 2.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:4015
+#: ../src/modules/alsa/alsa-mixer.c:4002
 msgid "Analog Surround 3.0"
 msgstr "Аналоговий об'ємний 3.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:4016
+#: ../src/modules/alsa/alsa-mixer.c:4003
 msgid "Analog Surround 3.1"
 msgstr "Аналоговий об'ємний 3.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:4017
+#: ../src/modules/alsa/alsa-mixer.c:4004
 msgid "Analog Surround 4.0"
 msgstr "Аналоговий об'ємний 4.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:4018
+#: ../src/modules/alsa/alsa-mixer.c:4005
 msgid "Analog Surround 4.1"
 msgstr "Аналоговий об'ємний 4.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:4019
+#: ../src/modules/alsa/alsa-mixer.c:4006
 msgid "Analog Surround 5.0"
 msgstr "Аналоговий об'ємний 5.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:4020
+#: ../src/modules/alsa/alsa-mixer.c:4007
 msgid "Analog Surround 5.1"
 msgstr "Аналоговий об'ємний 5.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:4021
+#: ../src/modules/alsa/alsa-mixer.c:4008
 msgid "Analog Surround 6.0"
 msgstr "Аналоговий об'ємний 6.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:4022
+#: ../src/modules/alsa/alsa-mixer.c:4009
 msgid "Analog Surround 6.1"
 msgstr "Аналоговий об'ємний 6.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:4023
+#: ../src/modules/alsa/alsa-mixer.c:4010
 msgid "Analog Surround 7.0"
 msgstr "Аналоговий об'ємний 7.0"
 
-#: ../src/modules/alsa/alsa-mixer.c:4024
+#: ../src/modules/alsa/alsa-mixer.c:4011
 msgid "Analog Surround 7.1"
 msgstr "Аналоговий об'ємний 7.1"
 
-#: ../src/modules/alsa/alsa-mixer.c:4025
+#: ../src/modules/alsa/alsa-mixer.c:4012
 msgid "Digital Stereo (IEC958)"
 msgstr "Цифрове стерео (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4026
+#: ../src/modules/alsa/alsa-mixer.c:4013
 msgid "Digital Passthrough  (IEC958)"
 msgstr "Цифрове передавання (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4027
+#: ../src/modules/alsa/alsa-mixer.c:4014
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr "Цифровий об’ємний 4.0 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4028
+#: ../src/modules/alsa/alsa-mixer.c:4015
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr "Цифровий об’ємний 5.1 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4029
+#: ../src/modules/alsa/alsa-mixer.c:4016
 msgid "Digital Surround 5.1 (IEC958/DTS)"
 msgstr "Цифровий об’ємний 5.1 (IEC958/DTS)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4030
+#: ../src/modules/alsa/alsa-mixer.c:4017
 msgid "Digital Stereo (HDMI)"
 msgstr "Цифровий стерео (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4031
+#: ../src/modules/alsa/alsa-mixer.c:4018
 msgid "Digital Surround 5.1 (HDMI)"
 msgstr "Цифровий об’ємний 5.1 (HDMI)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4162
+#: ../src/modules/alsa/alsa-mixer.c:4019 ../src/pulse/channelmap.c:775
+msgid "Stereo"
+msgstr "Стерео"
+
+#: ../src/modules/alsa/alsa-mixer.c:4152
 msgid "Analog Mono Duplex"
 msgstr "Аналогове двобічне моно"
 
-#: ../src/modules/alsa/alsa-mixer.c:4163
+#: ../src/modules/alsa/alsa-mixer.c:4153
 msgid "Analog Stereo Duplex"
 msgstr "Аналогове двобічне стерео"
 
-#: ../src/modules/alsa/alsa-mixer.c:4164
+#: ../src/modules/alsa/alsa-mixer.c:4154
 msgid "Digital Stereo Duplex (IEC958)"
 msgstr "Цифрове двобічне стерео (IEC958)"
 
-#: ../src/modules/alsa/alsa-mixer.c:4165
+#: ../src/modules/alsa/alsa-mixer.c:4155
 msgid "Multichannel Duplex"
 msgstr "Багатоканальний двобічний"
 
-#: ../src/modules/alsa/alsa-mixer.c:4166
-#: ../src/modules/alsa/module-alsa-card.c:184
-#: ../src/modules/bluetooth/module-bluez4-device.c:2298
-#: ../src/modules/bluetooth/module-bluez5-device.c:1941
+#: ../src/modules/alsa/alsa-mixer.c:4156
+#| msgid "Analog Stereo Duplex"
+msgid "Stereo Duplex"
+msgstr "Двобічне стерео"
+
+#: ../src/modules/alsa/alsa-mixer.c:4157
+#: ../src/modules/alsa/module-alsa-card.c:186
+#: ../src/modules/bluetooth/module-bluez4-device.c:2324
+#: ../src/modules/bluetooth/module-bluez5-device.c:2005
 msgid "Off"
 msgstr "Вимкнено"
 
-#: ../src/modules/alsa/alsa-mixer.c:4265
+#: ../src/modules/alsa/alsa-mixer.c:4256
 #, c-format
 msgid "%s Output"
 msgstr "вихід %s"
 
-#: ../src/modules/alsa/alsa-mixer.c:4273
+#: ../src/modules/alsa/alsa-mixer.c:4264
 #, c-format
 msgid "%s Input"
 msgstr "вхід %s"
 
-#: ../src/modules/alsa/alsa-sink.c:570
+#: ../src/modules/alsa/alsa-sink.c:572
 #, c-format
-#| msgid ""
-#| "ALSA woke us up to write new data to the device, but there was actually "
-#| "nothing to write!\n"
-#| "Most likely this is a bug in the ALSA driver '%s'. Please report this "
-#| "issue to the ALSA developers.\n"
-#| "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() "
-#| "returned 0 or another value < min_avail."
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
 "nothing to write.\n"
@@ -884,7 +967,7 @@ msgstr ""
 "Службу було викликано зі встановленим POLLOUT, але наступний виклик "
 "snd_pcm_avail() повернув 0 або інше значення < min_avail."
 
-#: ../src/modules/alsa/alsa-sink.c:747
+#: ../src/modules/alsa/alsa-sink.c:756
 #, c-format
 msgid ""
 "ALSA woke us up to write new data to the device, but there was actually "
@@ -903,13 +986,6 @@ msgstr ""
 
 #: ../src/modules/alsa/alsa-source.c:529
 #, c-format
-#| msgid ""
-#| "ALSA woke us up to read new data from the device, but there was actually "
-#| "nothing to read!\n"
-#| "Most likely this is a bug in the ALSA driver '%s'. Please report this "
-#| "issue to the ALSA developers.\n"
-#| "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() "
-#| "returned 0 or another value < min_avail."
 msgid ""
 "ALSA woke us up to read new data from the device, but there was actually "
 "nothing to read.\n"
@@ -942,7 +1018,7 @@ msgstr ""
 "Службу було викликано зі встановленим POLLIN, але наступний виклик "
 "snd_pcm_avail() повернув 0 або інше значення < min_avail."
 
-#: ../src/modules/alsa/alsa-util.c:1149 ../src/modules/alsa/alsa-util.c:1224
+#: ../src/modules/alsa/alsa-util.c:1168 ../src/modules/alsa/alsa-util.c:1243
 #, c-format
 msgid ""
 "snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
@@ -955,7 +1031,7 @@ msgstr ""
 "Ймовірно, ви натрапили на ваду у драйвері ALSA «%s». Будь ласка, повідомте "
 "про цю ваду розробникам ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1199
+#: ../src/modules/alsa/alsa-util.c:1218
 #, c-format
 msgid ""
 "snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s"
@@ -968,7 +1044,7 @@ msgstr ""
 "Ймовірно, ви натрапили на ваду у драйвері ALSA «%s». Будь ласка, повідомте "
 "про цю ваду розробникам ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1240
+#: ../src/modules/alsa/alsa-util.c:1259
 #, c-format
 msgid ""
 "snd_pcm_avail_delay() returned strange values: delay %lu is less than avail "
@@ -981,7 +1057,7 @@ msgstr ""
 "Ймовірно, це пов’язано з вадою у драйвері ALSA «%s». Будь ласка, повідомте "
 "про цю ваду розробникам ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1283
+#: ../src/modules/alsa/alsa-util.c:1302
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -994,89 +1070,100 @@ msgstr ""
 "Ймовірно, ви натрапили на ваду у драйвері ALSA «%s». Будь ласка, повідомте "
 "про цю ваду розробникам ALSA."
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2092
-#: ../src/modules/bluetooth/module-bluez5-device.c:1700
+#: ../src/modules/bluetooth/module-bluez4-device.c:2094
+#: ../src/modules/bluetooth/module-bluez5-device.c:1740
 msgid "Headset"
 msgstr "Гарнітура"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2097
-#: ../src/modules/bluetooth/module-bluez5-device.c:1705
+#: ../src/modules/bluetooth/module-bluez4-device.c:2099
+#: ../src/modules/bluetooth/module-bluez5-device.c:1745
 msgid "Handsfree"
 msgstr "Пристрій гучного зв’язку"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2112
-#: ../src/modules/bluetooth/module-bluez5-device.c:1723
+#: ../src/modules/bluetooth/module-bluez4-device.c:2114
+#: ../src/modules/bluetooth/module-bluez5-device.c:1763
 msgid "Headphone"
 msgstr "Навушники"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2117
-#: ../src/modules/bluetooth/module-bluez5-device.c:1728
+#: ../src/modules/bluetooth/module-bluez4-device.c:2119
+#: ../src/modules/bluetooth/module-bluez5-device.c:1768
 msgid "Portable"
 msgstr "Портативна система"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2122
-#: ../src/modules/bluetooth/module-bluez5-device.c:1733
+#: ../src/modules/bluetooth/module-bluez4-device.c:2124
+#: ../src/modules/bluetooth/module-bluez5-device.c:1773
 msgid "Car"
 msgstr "Автомобільна система"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2127
-#: ../src/modules/bluetooth/module-bluez5-device.c:1738
+#: ../src/modules/bluetooth/module-bluez4-device.c:2129
+#: ../src/modules/bluetooth/module-bluez5-device.c:1778
 msgid "HiFi"
 msgstr "HiFi"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2132
-#: ../src/modules/bluetooth/module-bluez5-device.c:1743
+#: ../src/modules/bluetooth/module-bluez4-device.c:2134
+#: ../src/modules/bluetooth/module-bluez5-device.c:1783
 msgid "Phone"
 msgstr "Телефон"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2140
-#: ../src/modules/bluetooth/module-bluez5-device.c:1695
-#: ../src/modules/bluetooth/module-bluez5-device.c:1711
-#: ../src/modules/bluetooth/module-bluez5-device.c:1749
+#: ../src/modules/bluetooth/module-bluez4-device.c:2142
+#: ../src/modules/bluetooth/module-bluez5-device.c:1735
+#: ../src/modules/bluetooth/module-bluez5-device.c:1751
+#: ../src/modules/bluetooth/module-bluez5-device.c:1789
 msgid "Bluetooth Output"
 msgstr "Bluetooth (відтворення)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2143
-#: ../src/modules/bluetooth/module-bluez5-device.c:1694
-#: ../src/modules/bluetooth/module-bluez5-device.c:1716
-#: ../src/modules/bluetooth/module-bluez5-device.c:1722
-#: ../src/modules/bluetooth/module-bluez5-device.c:1748
+#: ../src/modules/bluetooth/module-bluez4-device.c:2145
+#: ../src/modules/bluetooth/module-bluez5-device.c:1734
+#: ../src/modules/bluetooth/module-bluez5-device.c:1756
+#: ../src/modules/bluetooth/module-bluez5-device.c:1762
+#: ../src/modules/bluetooth/module-bluez5-device.c:1788
 msgid "Bluetooth Input"
 msgstr "Bluetooth (вхід)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2179
+#: ../src/modules/bluetooth/module-bluez4-device.c:2186
 msgid "High Fidelity Playback (A2DP)"
 msgstr "Високоточне відтворення (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2190
+#: ../src/modules/bluetooth/module-bluez4-device.c:2198
 msgid "High Fidelity Capture (A2DP)"
 msgstr "Високоточне захоплення (A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2201
+#: ../src/modules/bluetooth/module-bluez4-device.c:2210
 msgid "Telephony Duplex (HSP/HFP)"
 msgstr "Телефонний дуплекс (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez4-device.c:2213
+#: ../src/modules/bluetooth/module-bluez4-device.c:2223
 msgid "Handsfree Gateway"
 msgstr "Пристрій гучного зв’язку"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1786
+#: ../src/modules/bluetooth/module-bluez5-device.c:1830
 msgid "High Fidelity Playback (A2DP Sink)"
 msgstr "Високоточне відтворення (приймач A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1797
+#: ../src/modules/bluetooth/module-bluez5-device.c:1842
 msgid "High Fidelity Capture (A2DP Source)"
 msgstr "Високоточне захоплення (джерело A2DP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1808
+#: ../src/modules/bluetooth/module-bluez5-device.c:1854
 msgid "Headset Head Unit (HSP/HFP)"
 msgstr "Головний модуль гарнітури (HSP/HFP)"
 
-#: ../src/modules/bluetooth/module-bluez5-device.c:1820
+#: ../src/modules/bluetooth/module-bluez5-device.c:1867
 msgid "Headset Audio Gateway (HSP/HFP)"
 msgstr "Звуковий шлюз гарнітури (HSP/HFP)"
 
 #: ../src/modules/echo-cancel/module-echo-cancel.c:61
+#| msgid ""
+#| "source_name=<name for the source> source_properties=<properties for the "
+#| "source> source_master=<name of source to filter> sink_name=<name for the "
+#| "sink> sink_properties=<properties for the sink> sink_master=<name of sink "
+#| "to filter> adjust_time=<how often to readjust rates in s> "
+#| "adjust_threshold=<how much drift to readjust after in ms> format=<sample "
+#| "format> rate=<sample rate> channels=<number of channels> "
+#| "channel_map=<channel map> aec_method=<implementation to use> "
+#| "aec_args=<parameters for the AEC engine> save_aec=<save AEC data in /tmp> "
+#| "autoloaded=<set if this module is being loaded automatically> "
+#| "use_volume_sharing=<yes or no> "
 msgid ""
 "source_name=<name for the source> source_properties=<properties for the "
 "source> source_master=<name of source to filter> sink_name=<name for the "
@@ -1086,7 +1173,8 @@ msgid ""
 "rate> channels=<number of channels> channel_map=<channel map> "
 "aec_method=<implementation to use> aec_args=<parameters for the AEC engine> "
 "save_aec=<save AEC data in /tmp> autoloaded=<set if this module is being "
-"loaded automatically> use_volume_sharing=<yes or no> "
+"loaded automatically> use_volume_sharing=<yes or no> use_master_format=<yes "
+"or no> "
 msgstr ""
 "source_name=<назва джерела> source_properties=<властивості джерела> "
 "source_master=<назва джерелад для фільтрування> sink_name=<назва приймача> "
@@ -1097,23 +1185,26 @@ msgstr ""
 "channel_map=<карта каналів> aec_method=<реалізація обробки> "
 "aec_args=<параметри рушія придушення луни> save_aec=<чи слід зберігати дані "
 "придушення луни до /tmp> autoloaded=<визначити, чи слід завантажувати модуль "
-"у автоматичному режимі> use_volume_sharing=<yes або no> "
+"у автоматичному режимі> use_volume_sharing=<yes або no> use_master_format=<"
+"yes "
+"або no> "
 
 #. add on profile
-#: ../src/modules/macosx/module-coreaudio-device.c:755
+#: ../src/modules/macosx/module-coreaudio-device.c:811
 msgid "On"
 msgstr "Увімкнено"
 
+#: ../src/modules/module-allow-passthrough.c:73
+#: ../src/modules/module-always-sink.c:82
+msgid "Dummy Output"
+msgstr "Тестове відтворення"
+
 #: ../src/modules/module-always-sink.c:36
 msgid "Always keeps at least one sink loaded even if it's a null one"
 msgstr ""
 "Завжди підтримувати принаймні один завантажений приймач, навіть якщо він "
 "буде нульовим"
 
-#: ../src/modules/module-always-sink.c:83
-msgid "Dummy Output"
-msgstr "Тестове відтворення"
-
 #: ../src/modules/module-equalizer-sink.c:70
 msgid "General Purpose Equalizer"
 msgstr "Еквалайзер загального призначення"
@@ -1131,7 +1222,7 @@ msgstr ""
 "channel_map=<карта каналів> autoloaded=<визначити, чи слід завантажувати цей "
 "модуль у автоматичному режимі> use_volume_sharing=<yes або no> "
 
-#: ../src/modules/module-filter-apply.c:46
+#: ../src/modules/module-filter-apply.c:48
 msgid "autoclean=<automatically unload unused filters?>"
 msgstr "autoclean=<чи слід автоматично вивантажувати невикористані фільтри?>"
 
@@ -1140,29 +1231,40 @@ msgid "Virtual LADSPA sink"
 msgstr "Віртуальний приймач LADSPA"
 
 #: ../src/modules/module-ladspa-sink.c:55
+#| msgid ""
+#| "sink_name=<name for the sink> sink_properties=<properties for the sink> "
+#| "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+#| "channels=<number of channels> channel_map=<input channel map> "
+#| "plugin=<ladspa plugin name> label=<ladspa plugin label> control=<comma "
+#| "separated list of input control values> input_ladspaport_map=<comma "
+#| "separated list of input LADSPA port names> output_ladspaport_map=<comma "
+#| "separated list of output LADSPA port names> "
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<input channel map> plugin=<ladspa "
-"plugin name> label=<ladspa plugin label> control=<comma separated list of "
-"input control values> input_ladspaport_map=<comma separated list of input "
-"LADSPA port names> output_ladspaport_map=<comma separated list of output "
-"LADSPA port names> "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<input channel map> plugin=<ladspa plugin name> label=<ladspa "
+"plugin label> control=<comma separated list of input control values> "
+"input_ladspaport_map=<comma separated list of input LADSPA port names> "
+"output_ladspaport_map=<comma separated list of output LADSPA port names> "
+"autoloaded=<set if this module is being loaded automatically> "
 msgstr ""
 "sink_name=<назва приймача> sink_properties=<властивості приймача> "
-"master=<назва приймача для фільтрування> format=<формат фрагмента> "
+"master=<назва приймача для фільтрування> sink_master=<назва приймача для "
+"фільтрування> format=<формат фрагмента> "
 "rate=<частота вибірки> channels=<кількість каналів> channel_map=<карта "
 "каналів вхідних даних> plugin=<назва додатка ladspa> label=<мітка додатка "
 "ladspa> control=<розділений комами список значень вхідних параметрів> "
 "input_ladspaport_map=<список назв портів вхідних даних LADSPA, відокремлених "
 "комами> output_ladspaport_map=<список назв портів вихідних даних LADSPA, "
-"відокремлених комами> "
+"відокремлених комами> autoloaded=<встановіть, якщо цей модуль завантажується "
+"автоматично> "
 
 #: ../src/modules/module-null-sink.c:47
 msgid "Clocked NULL sink"
 msgstr "NULL-приймач з годинником"
 
-#: ../src/modules/module-null-sink.c:278
+#: ../src/modules/module-null-sink.c:284
 msgid "Null Output"
 msgstr "Нуль-відтворення"
 
@@ -1190,8 +1292,8 @@ msgstr "Звук на @НАЗВАВУЗЛА@"
 msgid "Tunnel for %s@%s"
 msgstr "Тунель для %s@%s"
 
-#: ../src/modules/module-tunnel-sink-new.c:517
-#: ../src/modules/module-tunnel-source-new.c:516
+#: ../src/modules/module-tunnel-sink-new.c:521
+#: ../src/modules/module-tunnel-source-new.c:520
 #, c-format
 msgid "Tunnel to %s/%s"
 msgstr "Тунель до %s/%s"
@@ -1201,24 +1303,33 @@ msgid "Virtual surround sink"
 msgstr "Віртуальний навколишній приймач"
 
 #: ../src/modules/module-virtual-surround-sink.c:51
+#| msgid ""
+#| "sink_name=<name for the sink> sink_properties=<properties for the sink> "
+#| "master=<name of sink to filter> format=<sample format> rate=<sample rate> "
+#| "channels=<number of channels> channel_map=<channel map> "
+#| "use_volume_sharing=<yes or no> force_flat_volume=<yes or no> hrir=/path/"
+#| "to/left_hrir.wav "
 msgid ""
 "sink_name=<name for the sink> sink_properties=<properties for the sink> "
-"master=<name of sink to filter> format=<sample format> rate=<sample rate> "
-"channels=<number of channels> channel_map=<channel map> "
-"use_volume_sharing=<yes or no> force_flat_volume=<yes or no> hrir=/path/to/"
-"left_hrir.wav "
+"master=<name of sink to filter> sink_master=<name of sink to filter> "
+"format=<sample format> rate=<sample rate> channels=<number of channels> "
+"channel_map=<channel map> use_volume_sharing=<yes or no> "
+"force_flat_volume=<yes or no> hrir=/path/to/left_hrir.wav autoloaded=<set if "
+"this module is being loaded automatically> "
 msgstr ""
 "sink_name=<назва приймача> sink_properties=<властивості приймача> "
-"master=<назва приймача для фільтрування> format=<формат фрагмента> "
+"master=<назва приймача для фільтрування> sink_master=<назва приймача для "
+"фільтрування> format=<формат фрагмента> "
 "rate=<частота вибірки> channels=<кількість каналів> channel_map=<карта "
 "каналів> use_volume_sharing=<yes або no> force_flat_volume=<yes або no> "
-"hrir=/шлях/до/лівого_hrir.wav "
+"hrir=/шлях/до/лівого_hrir.wav autoloaded=<встановіть, якщо цей модуль "
+"завантажується автоматично> "
 
 #: ../src/modules/reserve-wrap.c:149
 msgid "PulseAudio Sound Server"
 msgstr "Звуковий сервер PulseAudio"
 
-#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:758
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:771
 msgid "Mono"
 msgstr "Моно"
 
@@ -1423,34 +1534,30 @@ msgid "Top Rear Right"
 msgstr "Верхній задній правий"
 
 #: ../src/pulse/channelmap.c:479 ../src/pulse/format.c:121
-#: ../src/pulse/sample.c:175 ../src/pulse/volume.c:294
-#: ../src/pulse/volume.c:320 ../src/pulse/volume.c:340
-#: ../src/pulse/volume.c:372 ../src/pulse/volume.c:412
-#: ../src/pulse/volume.c:431
+#: ../src/pulse/sample.c:177 ../src/pulse/volume.c:306
+#: ../src/pulse/volume.c:332 ../src/pulse/volume.c:352
+#: ../src/pulse/volume.c:384 ../src/pulse/volume.c:424
+#: ../src/pulse/volume.c:443
 msgid "(invalid)"
 msgstr "(некоректний)"
 
-#: ../src/pulse/channelmap.c:762
-msgid "Stereo"
-msgstr "Стерео"
-
-#: ../src/pulse/channelmap.c:767
+#: ../src/pulse/channelmap.c:780
 msgid "Surround 4.0"
 msgstr "Об'ємний 4.0"
 
-#: ../src/pulse/channelmap.c:773
+#: ../src/pulse/channelmap.c:786
 msgid "Surround 4.1"
 msgstr "Об'ємний 4.1"
 
-#: ../src/pulse/channelmap.c:779
+#: ../src/pulse/channelmap.c:792
 msgid "Surround 5.0"
 msgstr "Об'ємний 5.0"
 
-#: ../src/pulse/channelmap.c:785
+#: ../src/pulse/channelmap.c:798
 msgid "Surround 5.1"
 msgstr "Об'ємний 5.1"
 
-#: ../src/pulse/channelmap.c:792
+#: ../src/pulse/channelmap.c:805
 msgid "Surround 7.1"
 msgstr "Об'ємний 7.1"
 
@@ -1466,17 +1573,17 @@ msgstr "xcb_connection_has_error() повернуто true"
 msgid "Failed to parse cookie data"
 msgstr "Не вдалося обробити дані куки"
 
-#: ../src/pulse/context.c:656
+#: ../src/pulse/context.c:702
 #, c-format
 msgid "fork(): %s"
 msgstr "fork(): %s"
 
-#: ../src/pulse/context.c:711
+#: ../src/pulse/context.c:757
 #, c-format
 msgid "waitpid(): %s"
 msgstr "waitpid(): %s"
 
-#: ../src/pulse/context.c:1417
+#: ../src/pulse/context.c:1463
 #, c-format
 msgid "Received message for unknown extension '%s'"
 msgstr "Отримано повідомлення про невідомий додаток «%s»"
@@ -1497,7 +1604,7 @@ msgstr "двобічний"
 msgid "invalid"
 msgstr "некоректний"
 
-#: ../src/pulsecore/core-util.c:1833
+#: ../src/pulsecore/core-util.c:1856
 #, c-format
 msgid ""
 "XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
@@ -1522,12 +1629,12 @@ msgstr "ні"
 msgid "Cannot access autospawn lock."
 msgstr "Не вдалося зняти блокування автоматичного розгалуження."
 
-#: ../src/pulsecore/log.c:153
+#: ../src/pulsecore/log.c:165
 #, c-format
 msgid "Failed to open target file '%s'."
 msgstr "Не вдалося відкрити файл призначення, «%s»."
 
-#: ../src/pulsecore/log.c:176
+#: ../src/pulsecore/log.c:188
 #, c-format
 msgid ""
 "Tried to open target file '%s', '%s.1', '%s.2' ... '%s.%d', but all failed."
@@ -1535,15 +1642,15 @@ msgstr ""
 "Було виконано спроби відкрити файли призначення «%s», «%s.1», «%s.2» ... «%s."
 "%d», але усі вони завершилися невдачею."
 
-#: ../src/pulsecore/log.c:631
+#: ../src/pulsecore/log.c:651
 msgid "Invalid log target."
 msgstr "Некоректна адреса файла журналу."
 
-#: ../src/pulsecore/sink.c:3436
+#: ../src/pulsecore/sink.c:3469
 msgid "Built-in Audio"
 msgstr "Вбудоване аудіо"
 
-#: ../src/pulsecore/sink.c:3441
+#: ../src/pulsecore/sink.c:3474
 msgid "Modem"
 msgstr "Модем"
 
@@ -1655,275 +1762,210 @@ msgstr "Помилка вводу/виводу"
 msgid "Device or resource busy"
 msgstr "Пристрій або ресурс зайнято"
 
-#: ../src/pulse/sample.c:177
+#: ../src/pulse/sample.c:179
 #, c-format
 msgid "%s %uch %uHz"
 msgstr "%s %uкан. %uГц"
 
-#: ../src/pulse/sample.c:189
+#: ../src/pulse/sample.c:191
 #, c-format
 msgid "%0.1f GiB"
 msgstr "%0.1f ГБ"
 
-#: ../src/pulse/sample.c:191
+#: ../src/pulse/sample.c:193
 #, c-format
 msgid "%0.1f MiB"
 msgstr "%0.1f МіБ"
 
-#: ../src/pulse/sample.c:193
+#: ../src/pulse/sample.c:195
 #, c-format
 msgid "%0.1f KiB"
 msgstr "%0.1f КіБ"
 
-#: ../src/pulse/sample.c:195
+#: ../src/pulse/sample.c:197
 #, c-format
 msgid "%u B"
 msgstr "%u Б"
 
-#: ../src/tests/resampler-test.c:255
-#, c-format
-msgid ""
-"%s [options]\n"
-"\n"
-"-h, --help                            Show this help\n"
-"-v, --verbose                         Print debug messages\n"
-"      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
-"44100)\n"
-"      --from-format=SAMPLEFORMAT      From sample type (defaults to s16le)\n"
-"      --from-channels=CHANNELS        From number of channels (defaults to "
-"1)\n"
-"      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
-"44100)\n"
-"      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
-"      --to-channels=CHANNELS          To number of channels (defaults to 1)\n"
-"      --resample-method=METHOD        Resample method (defaults to auto)\n"
-"      --seconds=SECONDS               From stream duration (defaults to 60)\n"
-"\n"
-"If the formats are not specified, the test performs all formats "
-"combinations,\n"
-"back and forth.\n"
-"\n"
-"Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
-"alaw,\n"
-"s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
-"\n"
-"See --dump-resample-methods for possible values of resample methods.\n"
-msgstr ""
-"%s [параметри]\n"
-"\n"
-"-h, --help                            Показати цю довідку\n"
-"-v, --verbose                         Показувати діагностичні повідомлення\n"
-"      --from-rate=ЧАСТОТА ДИСКР.      Початкова частота дискретизації у Гц "
-"(типовою є 44100)\n"
-"      --from-format=ФОРМАТ ДАНИХ      Початковий формат даних (типовим є "
-"s16le)\n"
-"      --from-channels=КТЬ КАНАЛІВ     Початкова кількість каналів (типовою є "
-"1)\n"
-"      --to-rate=ЧАСТОТА ДИСКР.        Частота дискретизації після обробки у "
-"Гц (типовою є 44100)\n"
-"      --to-format=ФОРМАТ ДАНИХ        Формат даних після обробки (типовим є "
-"s16le)\n"
-"      --to-channels=КТЬ КАНАЛІВ       Кількість каналів після обробки "
-"(типовою є 1)\n"
-"      --resample-method=СПОСІБ        Спосіб зміни частоти (типовим є auto)\n"
-"      --seconds=КТЬ СЕКУНД            Початкова тривалість потоку (типовою є "
-"60)\n"
-"\n"
-"Якщо формати не буде вказано, перевірка виконуватиметься для всіх комбінацій "
-"форматів,\n"
-"у обох напрямках.\n"
-"\n"
-"Можливі формати даних: s16le, s16be, u8, float32le, float32be, ulaw, alaw,\n"
-"s24le, s24be, s24-32le, s24-32be, s32le, s32be (типовим є s16ne)\n"
-"\n"
-"Перелік можливих значень способів зміни частоти можна отримати за допомогою "
-"параметра --dump-resample-methods.\n"
-
-#: ../src/tests/resampler-test.c:353
-#, c-format
-msgid "%s %s\n"
-msgstr "%s %s\n"
-
-#: ../src/utils/pacat.c:117
+#: ../src/utils/pacat.c:134
 #, c-format
 msgid "Failed to drain stream: %s"
 msgstr "Не вдалося створити стік для потоку: %s"
 
-#: ../src/utils/pacat.c:122
+#: ../src/utils/pacat.c:139
 msgid "Playback stream drained."
 msgstr "Потік відтворення спрямовано до стоку."
 
-#: ../src/utils/pacat.c:133
+#: ../src/utils/pacat.c:150
 msgid "Draining connection to server."
 msgstr "Спрямовуємо з’єднання з сервером до стоку."
 
-#: ../src/utils/pacat.c:146
+#: ../src/utils/pacat.c:163
 #, c-format
 msgid "pa_stream_drain(): %s"
 msgstr "pa_stream_drain(): %s"
 
-#: ../src/utils/pacat.c:169
-#, c-format
-msgid "pa_stream_write() failed: %s"
-msgstr "Спроба виконання pa_stream_write() завершилася невдало: %s"
-
-#: ../src/utils/pacat.c:210
+#: ../src/utils/pacat.c:194 ../src/utils/pacat.c:543
 #, c-format
 msgid "pa_stream_begin_write() failed: %s"
 msgstr "Спроба виконання pa_stream_write() завершилася невдало: %s"
 
-#: ../src/utils/pacat.c:260 ../src/utils/pacat.c:290
+#: ../src/utils/pacat.c:244 ../src/utils/pacat.c:274
 #, c-format
 msgid "pa_stream_peek() failed: %s"
 msgstr "Спроба виконання pa_stream_peek() завершилася невдало: %s"
 
-#: ../src/utils/pacat.c:340
+#: ../src/utils/pacat.c:324
 msgid "Stream successfully created."
 msgstr "Потік було успішно створено."
 
-#: ../src/utils/pacat.c:343
+#: ../src/utils/pacat.c:327
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s"
 msgstr "Спроба виконання pa_stream_get_buffer_attr() завершилася невдало: %s"
 
-#: ../src/utils/pacat.c:347
+#: ../src/utils/pacat.c:331
 #, c-format
 msgid "Buffer metrics: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 msgstr "Метрика буфера: maxlength=%u, tlength=%u, prebuf=%u, minreq=%u"
 
-#: ../src/utils/pacat.c:350
+#: ../src/utils/pacat.c:334
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u"
 msgstr "Метрика буфера: maxlength=%u, fragsize=%u"
 
-#: ../src/utils/pacat.c:354
+#: ../src/utils/pacat.c:338
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'."
 msgstr "Використання частотної специфікації «%s», карта каналів «%s»."
 
-#: ../src/utils/pacat.c:358
+#: ../src/utils/pacat.c:342
 #, c-format
 msgid "Connected to device %s (index: %u, suspended: %s)."
 msgstr "З’єднано з пристроєм %s (індекс: %u, призупинено: %s)."
 
-#: ../src/utils/pacat.c:368
+#: ../src/utils/pacat.c:352
 #, c-format
 msgid "Stream error: %s"
 msgstr "Помилка потоку: %s"
 
-#: ../src/utils/pacat.c:378
+#: ../src/utils/pacat.c:362
 #, c-format
 msgid "Stream device suspended.%s"
 msgstr "Призупинено пристрій потоку. %s"
 
-#: ../src/utils/pacat.c:380
+#: ../src/utils/pacat.c:364
 #, c-format
 msgid "Stream device resumed.%s"
 msgstr "Відновлено пристрій потоку. %s"
 
-#: ../src/utils/pacat.c:388
+#: ../src/utils/pacat.c:372
 #, c-format
 msgid "Stream underrun.%s"
 msgstr "Недовантаження потоку. %s"
 
-#: ../src/utils/pacat.c:395
+#: ../src/utils/pacat.c:379
 #, c-format
 msgid "Stream overrun.%s"
 msgstr "Перевантаження потоку. %s"
 
-#: ../src/utils/pacat.c:402
+#: ../src/utils/pacat.c:386
 #, c-format
 msgid "Stream started.%s"
 msgstr "Потік запущено. %s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 #, c-format
 msgid "Stream moved to device %s (%u, %ssuspended).%s"
 msgstr "Потік пересунуто на пристрій %s (%u, %s призупинено). %s"
 
-#: ../src/utils/pacat.c:409
+#: ../src/utils/pacat.c:393
 msgid "not "
 msgstr "не "
 
-#: ../src/utils/pacat.c:416
+#: ../src/utils/pacat.c:400
 #, c-format
 msgid "Stream buffer attributes changed.%s"
 msgstr "Недовантаження потоку. %s"
 
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:415
 msgid "Cork request stack is empty: corking stream"
 msgstr "Стос запитів щодо блокування порожній: блокуємо потік"
 
-#: ../src/utils/pacat.c:437
+#: ../src/utils/pacat.c:421
 msgid "Cork request stack is empty: uncorking stream"
 msgstr "Стос запитів щодо блокування порожній: розблоковуємо потік"
 
-#: ../src/utils/pacat.c:441
-#| msgid "Warning: Received more uncork requests than cork requests!"
+#: ../src/utils/pacat.c:425
 msgid "Warning: Received more uncork requests than cork requests."
 msgstr ""
 "Попередження: отримано більше запитів щодо розблокування, ніж запитів щодо "
 "блокування."
 
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:450
 #, c-format
 msgid "Connection established.%s"
 msgstr "Встановлено з’єднання. %s"
 
-#: ../src/utils/pacat.c:469
+#: ../src/utils/pacat.c:453
 #, c-format
 msgid "pa_stream_new() failed: %s"
 msgstr "Спроба виконання pa_stream_new() зазнала невдачі: %s"
 
-#: ../src/utils/pacat.c:507
+#: ../src/utils/pacat.c:491
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s"
 msgstr "Спроба виконання pa_stream_connect_playback() зазнала невдачі: %s"
 
-#: ../src/utils/pacat.c:513
+#: ../src/utils/pacat.c:497
 #, c-format
 msgid "Failed to set monitor stream: %s"
 msgstr "Не вдалося встановити потік спостереження: %s"
 
-#: ../src/utils/pacat.c:517
+#: ../src/utils/pacat.c:501
 #, c-format
 msgid "pa_stream_connect_record() failed: %s"
 msgstr "Спроба виконання pa_stream_connect_record() зазнала невдачі: %s"
 
-#: ../src/utils/pacat.c:530 ../src/utils/pactl.c:1446
+#: ../src/utils/pacat.c:514 ../src/utils/pactl.c:1446
 #, c-format
 msgid "Connection failure: %s"
 msgstr "Спроба встановлення з’єднання зазнала невдачі: %s"
 
-#: ../src/utils/pacat.c:563
+#: ../src/utils/pacat.c:557
 msgid "Got EOF."
 msgstr "Отримано EOF."
 
-#: ../src/utils/pacat.c:600
+#: ../src/utils/pacat.c:581
+#, c-format
+msgid "pa_stream_write() failed: %s"
+msgstr "Спроба виконання pa_stream_write() завершилася невдало: %s"
+
+#: ../src/utils/pacat.c:605
 #, c-format
 msgid "write() failed: %s"
 msgstr "Спроба виконання write() завершилася невдало: %s"
 
-#: ../src/utils/pacat.c:621
+#: ../src/utils/pacat.c:626
 msgid "Got signal, exiting."
 msgstr "Отримано сигнал, завершення роботи."
 
-#: ../src/utils/pacat.c:635
+#: ../src/utils/pacat.c:640
 #, c-format
 msgid "Failed to get latency: %s"
 msgstr "Не вдалося отримати латентність: %s"
 
-#: ../src/utils/pacat.c:640
+#: ../src/utils/pacat.c:645
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec."
 msgstr "Час: %0.3f сек.; Латентність: %0.0f мкс."
 
-#: ../src/utils/pacat.c:661
+#: ../src/utils/pacat.c:666
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s"
 msgstr "Помилка pa_stream_update_timing_info(): %s"
 
-#: ../src/utils/pacat.c:671
+#: ../src/utils/pacat.c:676
 #, c-format
 msgid ""
 "%s [options]\n"
@@ -2056,17 +2098,17 @@ msgstr ""
 "     --monitor-stream=НОМЕР             Записувати дані з входу приймача з "
 "номером НОМЕР.\n"
 
-#: ../src/utils/pacat.c:788
+#: ../src/utils/pacat.c:793
 msgid "Play back encoded audio files on a PulseAudio sound server."
 msgstr "Відтворити закодовані звукові файли на звуковому сервері PulseAudio."
 
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:797
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to a file."
 msgstr ""
 "Захопити звукові дані зі звукового сервера PulseAudio і записати їх до файла."
 
-#: ../src/utils/pacat.c:796
+#: ../src/utils/pacat.c:801
 msgid ""
 "Capture audio data from a PulseAudio sound server and write it to STDOUT or "
 "the specified file."
@@ -2074,7 +2116,7 @@ msgstr ""
 "Захопити звукові дані зі звукового сервера PulseAudio і записати їх до "
 "STDOUT або вказаного файла."
 
-#: ../src/utils/pacat.c:800
+#: ../src/utils/pacat.c:805
 msgid ""
 "Play back audio data from STDIN or the specified file on a PulseAudio sound "
 "server."
@@ -2082,7 +2124,7 @@ msgstr ""
 "Відтворити звукові дані з STDIN або вказаного файла на звуковому сервері "
 "PulseAudio."
 
-#: ../src/utils/pacat.c:814
+#: ../src/utils/pacat.c:819
 #, c-format
 msgid ""
 "pacat %s\n"
@@ -2093,72 +2135,72 @@ msgstr ""
 "Зібрано з libpulse %s\n"
 "З’єднано з libpulse %s\n"
 
-#: ../src/utils/pacat.c:847 ../src/utils/pactl.c:1648
+#: ../src/utils/pacat.c:852 ../src/utils/pactl.c:1648
 #, c-format
 msgid "Invalid client name '%s'"
 msgstr "Некоректна назва клієнта «%s»"
 
-#: ../src/utils/pacat.c:862
+#: ../src/utils/pacat.c:867
 #, c-format
 msgid "Invalid stream name '%s'"
 msgstr "Некоректна назва потоку «%s»"
 
-#: ../src/utils/pacat.c:899
+#: ../src/utils/pacat.c:904
 #, c-format
 msgid "Invalid channel map '%s'"
 msgstr "Некоректна карта каналів «%s»"
 
-#: ../src/utils/pacat.c:928 ../src/utils/pacat.c:942
+#: ../src/utils/pacat.c:933 ../src/utils/pacat.c:947
 #, c-format
 msgid "Invalid latency specification '%s'"
 msgstr "Некоректна специфікація латентності «%s»"
 
-#: ../src/utils/pacat.c:935 ../src/utils/pacat.c:949
+#: ../src/utils/pacat.c:940 ../src/utils/pacat.c:954
 #, c-format
 msgid "Invalid process time specification '%s'"
 msgstr "Некоректна часова специфікація «%s»"
 
-#: ../src/utils/pacat.c:961
+#: ../src/utils/pacat.c:966
 #, c-format
 msgid "Invalid property '%s'"
 msgstr "Некоректна властивість «%s»"
 
-#: ../src/utils/pacat.c:980
+#: ../src/utils/pacat.c:985
 #, c-format
 msgid "Unknown file format %s."
 msgstr "Невідомий формат файлів %s."
 
-#: ../src/utils/pacat.c:995
+#: ../src/utils/pacat.c:1000
 msgid "Failed to parse the argument for --monitor-stream"
 msgstr "Не вдалося обробити аргумент --monitor-stream"
 
-#: ../src/utils/pacat.c:1006
+#: ../src/utils/pacat.c:1011
 msgid "Invalid sample specification"
 msgstr "Некоректна частотна специфікація"
 
-#: ../src/utils/pacat.c:1016
+#: ../src/utils/pacat.c:1021
 #, c-format
 msgid "open(): %s"
 msgstr "open(): %s"
 
-#: ../src/utils/pacat.c:1021
+#: ../src/utils/pacat.c:1026
 #, c-format
 msgid "dup2(): %s"
 msgstr "dup2(): %s"
 
-#: ../src/utils/pacat.c:1028
+#: ../src/utils/pacat.c:1033
 msgid "Too many arguments."
 msgstr "Забагато аргументів."
 
-#: ../src/utils/pacat.c:1039
+#: ../src/utils/pacat.c:1044
 msgid "Failed to generate sample specification for file."
 msgstr "Не вдалося створити частотну специфікацію для файла."
 
-#: ../src/utils/pacat.c:1065
+#: ../src/utils/pacat.c:1070
 msgid "Failed to open audio file."
 msgstr "Не вдалося відкрити звуковий файл."
 
-#: ../src/utils/pacat.c:1071
+#: ../src/utils/pacat.c:1076
 msgid ""
 "Warning: specified sample specification will be overwritten with "
 "specification from file."
@@ -2166,63 +2208,63 @@ msgstr ""
 "Попередження: вказану частотну специфікацію буде перезаписано специфікацією "
 "з файла."
 
-#: ../src/utils/pacat.c:1074 ../src/utils/pactl.c:1712
+#: ../src/utils/pacat.c:1079 ../src/utils/pactl.c:1712
 msgid "Failed to determine sample specification from file."
 msgstr "Не вдалося отримати дані щодо частотної специфікації з файла."
 
-#: ../src/utils/pacat.c:1083
+#: ../src/utils/pacat.c:1088
 msgid "Warning: Failed to determine channel map from file."
 msgstr "Попередження: не вдалося отримати дані щодо карти каналів з файла."
 
-#: ../src/utils/pacat.c:1094
+#: ../src/utils/pacat.c:1099
 msgid "Channel map doesn't match sample specification"
 msgstr "Карта каналів не відповідає частотній специфікації"
 
-#: ../src/utils/pacat.c:1105
+#: ../src/utils/pacat.c:1110
 msgid "Warning: failed to write channel map to file."
 msgstr "Попередження: не вдалося записати карту каналів до файла."
 
-#: ../src/utils/pacat.c:1120
+#: ../src/utils/pacat.c:1125
 #, c-format
 msgid ""
 "Opening a %s stream with sample specification '%s' and channel map '%s'."
 msgstr ""
 "Відкриття потоку %s з частотною специфікацією «%s» і картою каналів «%s»."
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "recording"
 msgstr "запис"
 
-#: ../src/utils/pacat.c:1121
+#: ../src/utils/pacat.c:1126
 msgid "playback"
 msgstr "відтворення"
 
-#: ../src/utils/pacat.c:1145
+#: ../src/utils/pacat.c:1150
 msgid "Failed to set media name."
 msgstr "Не вдалося встановити назву носія даних."
 
-#: ../src/utils/pacat.c:1152 ../src/utils/pactl.c:2062
+#: ../src/utils/pacat.c:1160 ../src/utils/pactl.c:2062
 msgid "pa_mainloop_new() failed."
 msgstr "Спроба виконання pa_mainloop_new() завершилася невдало."
 
-#: ../src/utils/pacat.c:1175
+#: ../src/utils/pacat.c:1183
 msgid "io_new() failed."
 msgstr "Спроба виконання io_new() завершилася невдало."
 
-#: ../src/utils/pacat.c:1182 ../src/utils/pactl.c:2074
+#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2074
 msgid "pa_context_new() failed."
 msgstr "Спроба виконання pa_context_new() завершилася невдало."
 
-#: ../src/utils/pacat.c:1190 ../src/utils/pactl.c:2080
+#: ../src/utils/pacat.c:1198 ../src/utils/pactl.c:2080
 #, c-format
 msgid "pa_context_connect() failed: %s"
 msgstr "Спроба виконання pa_context_connect() завершилася невдало: %s"
 
-#: ../src/utils/pacat.c:1196
+#: ../src/utils/pacat.c:1204
 msgid "pa_context_rttime_new() failed."
 msgstr "Спроба виконання pa_context_new() завершилася невдало."
 
-#: ../src/utils/pacat.c:1203 ../src/utils/pactl.c:2085
+#: ../src/utils/pacat.c:1211 ../src/utils/pactl.c:2085
 msgid "pa_mainloop_run() failed."
 msgstr "Спроба виконання pa_mainloop_run() завершилася невдало."
 
@@ -2308,7 +2350,6 @@ msgid "TARGET"
 msgstr "ПРИЗНАЧЕННЯ"
 
 #: ../src/utils/pacmd.c:76
-#| msgid "NUMERIC LEVEL"
 msgid "NUMERIC-LEVEL"
 msgstr "ЧИСЛОВИЙ РІВЕНЬ"
 
@@ -3076,7 +3117,6 @@ msgid "Invalid source output index"
 msgstr "Некоректний номер джерела відтворення"
 
 #: ../src/utils/pactl.c:1956
-#| msgid "You have to specify a sink name/index and a mute boolean"
 msgid ""
 "You have to specify a sink name/index and a mute action (0, 1, or 'toggle')"
 msgstr ""
@@ -3089,7 +3129,6 @@ msgid "Invalid mute specification"
 msgstr "Некоректна специфікація вимикання звуку"
 
 #: ../src/utils/pactl.c:1971
-#| msgid "You have to specify a source name/index and a mute boolean"
 msgid ""
 "You have to specify a source name/index and a mute action (0, 1, or 'toggle')"
 msgstr ""
@@ -3097,7 +3136,6 @@ msgstr ""
 "«toggle»)"
 
 #: ../src/utils/pactl.c:1986
-#| msgid "You have to specify a sink input index and a mute boolean"
 msgid ""
 "You have to specify a sink input index and a mute action (0, 1, or 'toggle')"
 msgstr ""
@@ -3109,7 +3147,6 @@ msgid "Invalid sink input index specification"
 msgstr "Некоректна специфікація номера вхідного каналу приймача даних"
 
 #: ../src/utils/pactl.c:2004
-#| msgid "You have to specify a source output index and a mute boolean"
 msgid ""
 "You have to specify a source output index and a mute action (0, 1, or "
 "'toggle')"
@@ -3299,6 +3336,72 @@ msgstr "Не вдалося завантажити дані куки\n"
 msgid "Not yet implemented.\n"
 msgstr "Ще не реалізовано.\n"
 
+#~ msgid ""
+#~ "%s [options]\n"
+#~ "\n"
+#~ "-h, --help                            Show this help\n"
+#~ "-v, --verbose                         Print debug messages\n"
+#~ "      --from-rate=SAMPLERATE          From sample rate in Hz (defaults to "
+#~ "44100)\n"
+#~ "      --from-format=SAMPLEFORMAT      From sample type (defaults to "
+#~ "s16le)\n"
+#~ "      --from-channels=CHANNELS        From number of channels (defaults "
+#~ "to 1)\n"
+#~ "      --to-rate=SAMPLERATE            To sample rate in Hz (defaults to "
+#~ "44100)\n"
+#~ "      --to-format=SAMPLEFORMAT        To sample type (defaults to s16le)\n"
+#~ "      --to-channels=CHANNELS          To number of channels (defaults to "
+#~ "1)\n"
+#~ "      --resample-method=METHOD        Resample method (defaults to auto)\n"
+#~ "      --seconds=SECONDS               From stream duration (defaults to "
+#~ "60)\n"
+#~ "\n"
+#~ "If the formats are not specified, the test performs all formats "
+#~ "combinations,\n"
+#~ "back and forth.\n"
+#~ "\n"
+#~ "Sample type must be one of s16le, s16be, u8, float32le, float32be, ulaw, "
+#~ "alaw,\n"
+#~ "s24le, s24be, s24-32le, s24-32be, s32le, s32be (defaults to s16ne)\n"
+#~ "\n"
+#~ "See --dump-resample-methods for possible values of resample methods.\n"
+#~ msgstr ""
+#~ "%s [параметри]\n"
+#~ "\n"
+#~ "-h, --help                            Показати цю довідку\n"
+#~ "-v, --verbose                         Показувати діагностичні "
+#~ "повідомлення\n"
+#~ "      --from-rate=ЧАСТОТА ДИСКР.      Початкова частота дискретизації у "
+#~ "Гц (типовою є 44100)\n"
+#~ "      --from-format=ФОРМАТ ДАНИХ      Початковий формат даних (типовим є "
+#~ "s16le)\n"
+#~ "      --from-channels=КТЬ КАНАЛІВ     Початкова кількість каналів "
+#~ "(типовою є 1)\n"
+#~ "      --to-rate=ЧАСТОТА ДИСКР.        Частота дискретизації після обробки "
+#~ "у Гц (типовою є 44100)\n"
+#~ "      --to-format=ФОРМАТ ДАНИХ        Формат даних після обробки (типовим "
+#~ "є s16le)\n"
+#~ "      --to-channels=КТЬ КАНАЛІВ       Кількість каналів після обробки "
+#~ "(типовою є 1)\n"
+#~ "      --resample-method=СПОСІБ        Спосіб зміни частоти (типовим є "
+#~ "auto)\n"
+#~ "      --seconds=КТЬ СЕКУНД            Початкова тривалість потоку "
+#~ "(типовою є 60)\n"
+#~ "\n"
+#~ "Якщо формати не буде вказано, перевірка виконуватиметься для всіх "
+#~ "комбінацій форматів,\n"
+#~ "у обох напрямках.\n"
+#~ "\n"
+#~ "Можливі формати даних: s16le, s16be, u8, float32le, float32be, ulaw, "
+#~ "alaw,\n"
+#~ "s24le, s24be, s24-32le, s24-32be, s32le, s32be (типовим є s16ne)\n"
+#~ "\n"
+#~ "Перелік можливих значень способів зміни частоти можна отримати за "
+#~ "допомогою параметра --dump-resample-methods.\n"
+
+#~ msgid "%s %s\n"
+#~ msgstr "%s %s\n"
+
 #~ msgid "Cleaning up privileges."
 #~ msgstr "Позбуваємося прав доступу."
 
diff --git a/shell-completion/zsh/_pulseaudio b/shell-completion/zsh/_pulseaudio
index e065085..0e9e89b 100644
--- a/shell-completion/zsh/_pulseaudio
+++ b/shell-completion/zsh/_pulseaudio
@@ -600,10 +600,26 @@ _pacmd_completion() {
 }
 
 _pasuspender_completion() {
-    _arguments -S -A "-*" -C \
-        {-h,--help}'[display help and exit]' \
-        '--version[show version and exit]' \
-        {-s,--server=}'[name of server to connect to]:host:_hosts' \
+    # parenthesis expressions specify which options should not get suggested afterwards
+    # e.g. after -s, help and version will not get suggested, -- remains the only valid argument
+    # after "--" external commands get suggested
+    _arguments -C \
+        '(-)'{-h,--help}'[display help and exit]' \
+        '(-)--version[show version and exit]' \
+        '(-h --help --version -s --server)'{-s,--server=}'[name of server to connect to]:host:_hosts' \
+        '(-)--[program]:program: _command_names -e' && return 0
+    # check if "--" is one of the words in the command line
+    # if so, ${words[(i)--]} is the position of "--"
+    # shift the arguments and reduce CURRENT, such that further completions see only what follows "--"
+    if [[ ${words[(r)--]} == "--" ]]; then
+        for ((j = ${words[(i)--]}; j > 0; j--));
+        do
+            shift words
+            (( CURRENT-- ))
+        done
+        # proceed with normal completion
+        _normal
+    fi
 }
 
 _padsp_completion() {
diff --git a/src/Makefile.am b/src/Makefile.am
index 498a386..3ff1139 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -785,8 +785,6 @@ libpulsecommon_ at PA_MAJORMINOR@_la_SOURCES += \
 		pulsecore/mutex-posix.c pulsecore/mutex.h \
 		pulsecore/thread-posix.c pulsecore/thread.h \
 		pulsecore/semaphore-osx.c pulsecore/semaphore.h
-libpulsecommon_ at PA_MAJORMINOR@_la_CFLAGS += "-I/Developer/Headers/FlatCarbon/"
-#libpulsecommon_ at PA_MAJORMINOR@_la_LDFLAGS += "-framework CoreServices"
 else !OS_IS_DARWIN
 libpulsecommon_ at PA_MAJORMINOR@_la_SOURCES += \
 		pulsecore/mutex-posix.c pulsecore/mutex.h \
@@ -923,7 +921,7 @@ padsplib_LTLIBRARIES = libpulsedsp.la
 bin_SCRIPTS += padsp
 
 edit = @SED@ \
-       -e "s|@pkglibdir[@]|$(pkglibdir)|g"
+       -e 's|@PULSEDSP_LOCATION[@]|$(PULSEDSP_LOCATION)|g'
 
 padsp: utils/padsp.in
 	$(edit) $< > $@
@@ -1154,8 +1152,12 @@ librtp_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
 librtp_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINOR@.la libpulsecommon- at PA_MAJORMINOR@.la libpulse.la
 
 libraop_la_SOURCES = \
-        modules/raop/raop_client.c modules/raop/raop_client.h \
-        modules/raop/base64.c modules/raop/base64.h
+        modules/raop/raop-util.c modules/raop/raop-util.h \
+        modules/raop/raop-crypto.c modules/raop/raop-crypto.h \
+        modules/raop/raop-packet-buffer.h modules/raop/raop-packet-buffer.c \
+        modules/raop/raop-client.c modules/raop/raop-client.h \
+        modules/raop/raop-sink.c modules/raop/raop-sink.h
+
 libraop_la_CFLAGS = $(AM_CFLAGS) $(OPENSSL_CFLAGS) -I$(top_srcdir)/src/modules/rtp
 libraop_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
 libraop_la_LIBADD = $(AM_LIBADD) $(OPENSSL_LIBS) libpulsecore- at PA_MAJORMINOR@.la librtp.la libpulsecommon- at PA_MAJORMINOR@.la libpulse.la
diff --git a/src/Makefile.in b/src/Makefile.in
index 4a58866..028c725 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.in generated by automake 1.15.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2017 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -218,191 +218,189 @@ bin_PROGRAMS = pulseaudio$(EXEEXT) pacat$(EXEEXT) pactl$(EXEEXT) \
 @OS_IS_DARWIN_TRUE@@OS_IS_WIN32_FALSE@		pulsecore/thread-posix.c pulsecore/thread.h \
 @OS_IS_DARWIN_TRUE@@OS_IS_WIN32_FALSE@		pulsecore/semaphore-osx.c pulsecore/semaphore.h
 
- at OS_IS_DARWIN_TRUE@@OS_IS_WIN32_FALSE at am__append_37 = "-I/Developer/Headers/FlatCarbon/"
-#libpulsecommon_ at PA_MAJORMINOR@_la_LDFLAGS += "-framework CoreServices"
- at OS_IS_DARWIN_FALSE@@OS_IS_WIN32_FALSE at am__append_38 = \
+ at OS_IS_DARWIN_FALSE@@OS_IS_WIN32_FALSE at am__append_37 = \
 @OS_IS_DARWIN_FALSE@@OS_IS_WIN32_FALSE@		pulsecore/mutex-posix.c pulsecore/mutex.h \
 @OS_IS_DARWIN_FALSE@@OS_IS_WIN32_FALSE@		pulsecore/thread-posix.c pulsecore/thread.h \
 @OS_IS_DARWIN_FALSE@@OS_IS_WIN32_FALSE@		pulsecore/semaphore-posix.c pulsecore/semaphore.h
 
- at HAVE_LIBASYNCNS_TRUE@am__append_39 = $(LIBASYNCNS_CFLAGS)
- at HAVE_LIBASYNCNS_TRUE@am__append_40 = $(LIBASYNCNS_LIBS)
- at OS_IS_WIN32_TRUE@am__append_41 = pulsecore/dllmain.c
- at HAVE_DBUS_TRUE@am__append_42 = \
+ at HAVE_LIBASYNCNS_TRUE@am__append_38 = $(LIBASYNCNS_CFLAGS)
+ at HAVE_LIBASYNCNS_TRUE@am__append_39 = $(LIBASYNCNS_LIBS)
+ at OS_IS_WIN32_TRUE@am__append_40 = pulsecore/dllmain.c
+ at HAVE_DBUS_TRUE@am__append_41 = \
 @HAVE_DBUS_TRUE@		pulsecore/dbus-util.c pulsecore/dbus-util.h \
 @HAVE_DBUS_TRUE@		pulsecore/rtkit.c pulsecore/rtkit.h
 
- at HAVE_DBUS_TRUE@am__append_43 = $(DBUS_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_44 = $(DBUS_LIBS)
- at HAVE_GLIB20_TRUE@am__append_45 = \
+ at HAVE_DBUS_TRUE@am__append_42 = $(DBUS_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_43 = $(DBUS_LIBS)
+ at HAVE_GLIB20_TRUE@am__append_44 = \
 @HAVE_GLIB20_TRUE@		pulse/glib-mainloop.h
 
- at HAVE_GLIB20_TRUE@am__append_46 = \
+ at HAVE_GLIB20_TRUE@am__append_45 = \
 @HAVE_GLIB20_TRUE@		libpulse-mainloop-glib.la
 
- at HAVE_DBUS_TRUE@am__append_47 = $(DBUS_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_48 = $(DBUS_LIBS)
+ at HAVE_DBUS_TRUE@am__append_46 = $(DBUS_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_47 = $(DBUS_LIBS)
+ at HAVE_OSS_WRAPPER_TRUE@am__append_48 = padsp
 @HAVE_OSS_WRAPPER_TRUE at am__append_49 = padsp
- at HAVE_OSS_WRAPPER_TRUE@am__append_50 = padsp
+ at HAVE_NEON_TRUE@am__append_50 = libpulsecore_sconv_neon.la libpulsecore_mix_neon.la libpulsecore_remap_neon.la
 @HAVE_NEON_TRUE at am__append_51 = libpulsecore_sconv_neon.la libpulsecore_mix_neon.la libpulsecore_remap_neon.la
- at HAVE_NEON_TRUE@am__append_52 = libpulsecore_sconv_neon.la libpulsecore_mix_neon.la libpulsecore_remap_neon.la
- at HAVE_ORC_TRUE@am__append_53 = pulsecore/svolume_orc.c
- at HAVE_ORC_TRUE@am__append_54 = $(ORC_CFLAGS)
- at HAVE_ORC_TRUE@am__append_55 = $(ORC_LIBS)
- at HAVE_X11_TRUE@am__append_56 = pulsecore/x11wrap.c pulsecore/x11wrap.h
- at HAVE_X11_TRUE@am__append_57 = $(X11_CFLAGS)
- at HAVE_X11_TRUE@am__append_58 = $(X11_LIBS)
- at HAVE_DBUS_TRUE@am__append_59 = \
+ at HAVE_ORC_TRUE@am__append_52 = pulsecore/svolume_orc.c
+ at HAVE_ORC_TRUE@am__append_53 = $(ORC_CFLAGS)
+ at HAVE_ORC_TRUE@am__append_54 = $(ORC_LIBS)
+ at HAVE_X11_TRUE@am__append_55 = pulsecore/x11wrap.c pulsecore/x11wrap.h
+ at HAVE_X11_TRUE@am__append_56 = $(X11_CFLAGS)
+ at HAVE_X11_TRUE@am__append_57 = $(X11_LIBS)
+ at HAVE_DBUS_TRUE@am__append_58 = \
 @HAVE_DBUS_TRUE@		pulsecore/dbus-shared.c pulsecore/dbus-shared.h \
 @HAVE_DBUS_TRUE@		pulsecore/protocol-dbus.c pulsecore/protocol-dbus.h
 
- at HAVE_DBUS_TRUE@am__append_60 = $(DBUS_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_61 = $(DBUS_LIBS)
- at HAVE_GDBM_TRUE@am__append_62 = pulsecore/database-gdbm.c
- at HAVE_GDBM_TRUE@am__append_63 = $(GDBM_CFLAGS)
- at HAVE_GDBM_TRUE@am__append_64 = $(GDBM_LIBS)
- at HAVE_TDB_TRUE@am__append_65 = pulsecore/database-tdb.c
- at HAVE_TDB_TRUE@am__append_66 = $(TDB_CFLAGS)
- at HAVE_TDB_TRUE@am__append_67 = $(TDB_LIBS)
- at HAVE_SIMPLEDB_TRUE@am__append_68 = pulsecore/database-simple.c
- at HAVE_SPEEX_TRUE@am__append_69 = pulsecore/resampler/speex.c
- at HAVE_SPEEX_TRUE@am__append_70 = $(LIBSPEEX_CFLAGS)
- at HAVE_SPEEX_TRUE@am__append_71 = $(LIBSPEEX_LIBS)
- at HAVE_SOXR_TRUE@am__append_72 = pulsecore/resampler/soxr.c
- at HAVE_SOXR_TRUE@am__append_73 = $(LIBSOXR_CFLAGS)
- at HAVE_SOXR_TRUE@am__append_74 = $(LIBSOXR_LIBS)
- at HAVE_LIBSAMPLERATE_TRUE@am__append_75 = pulsecore/resampler/libsamplerate.c
- at HAVE_LIBSAMPLERATE_TRUE@am__append_76 = $(LIBSAMPLERATE_CFLAGS)
- at HAVE_LIBSAMPLERATE_TRUE@am__append_77 = $(LIBSAMPLERATE_LIBS)
- at HAVE_WEBRTC_TRUE@am__append_78 = libwebrtc-util.la
- at HAVE_ESOUND_TRUE@am__append_79 = \
+ at HAVE_DBUS_TRUE@am__append_59 = $(DBUS_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_60 = $(DBUS_LIBS)
+ at HAVE_GDBM_TRUE@am__append_61 = pulsecore/database-gdbm.c
+ at HAVE_GDBM_TRUE@am__append_62 = $(GDBM_CFLAGS)
+ at HAVE_GDBM_TRUE@am__append_63 = $(GDBM_LIBS)
+ at HAVE_TDB_TRUE@am__append_64 = pulsecore/database-tdb.c
+ at HAVE_TDB_TRUE@am__append_65 = $(TDB_CFLAGS)
+ at HAVE_TDB_TRUE@am__append_66 = $(TDB_LIBS)
+ at HAVE_SIMPLEDB_TRUE@am__append_67 = pulsecore/database-simple.c
+ at HAVE_SPEEX_TRUE@am__append_68 = pulsecore/resampler/speex.c
+ at HAVE_SPEEX_TRUE@am__append_69 = $(LIBSPEEX_CFLAGS)
+ at HAVE_SPEEX_TRUE@am__append_70 = $(LIBSPEEX_LIBS)
+ at HAVE_SOXR_TRUE@am__append_71 = pulsecore/resampler/soxr.c
+ at HAVE_SOXR_TRUE@am__append_72 = $(LIBSOXR_CFLAGS)
+ at HAVE_SOXR_TRUE@am__append_73 = $(LIBSOXR_LIBS)
+ at HAVE_LIBSAMPLERATE_TRUE@am__append_74 = pulsecore/resampler/libsamplerate.c
+ at HAVE_LIBSAMPLERATE_TRUE@am__append_75 = $(LIBSAMPLERATE_CFLAGS)
+ at HAVE_LIBSAMPLERATE_TRUE@am__append_76 = $(LIBSAMPLERATE_LIBS)
+ at HAVE_WEBRTC_TRUE@am__append_77 = libwebrtc-util.la
+ at HAVE_ESOUND_TRUE@am__append_78 = \
 @HAVE_ESOUND_TRUE@		libprotocol-esound.la
 
 
 # We need to emulate sendmsg/recvmsg to support this on Win32
- at OS_IS_WIN32_FALSE@am__append_80 = \
+ at OS_IS_WIN32_FALSE@am__append_79 = \
 @OS_IS_WIN32_FALSE@		librtp.la
 
- at HAVE_AVAHI_TRUE@am__append_81 = \
+ at HAVE_AVAHI_TRUE@am__append_80 = \
 @HAVE_AVAHI_TRUE@		libavahi-wrap.la
 
- at HAVE_DBUS_TRUE@am__append_82 = $(DBUS_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_83 = $(DBUS_LIBS)
+ at HAVE_DBUS_TRUE@am__append_81 = $(DBUS_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_82 = $(DBUS_LIBS)
 
 ###################################
 #        Plug-in libraries        #
 ###################################
 
 # Serveral module (e.g. libalsa-util.la)
- at HAVE_DBUS_TRUE@am__append_84 = \
+ at HAVE_DBUS_TRUE@am__append_83 = \
 @HAVE_DBUS_TRUE@		module-console-kit.la
 
- at HAVE_ESOUND_TRUE@am__append_85 = \
+ at HAVE_ESOUND_TRUE@am__append_84 = \
 @HAVE_ESOUND_TRUE@		module-esound-protocol-tcp.la \
 @HAVE_ESOUND_TRUE@		module-esound-sink.la
 
 
 # See comment at librtp.la above
- at OS_IS_WIN32_FALSE@am__append_86 = \
+ at OS_IS_WIN32_FALSE@am__append_85 = \
 @OS_IS_WIN32_FALSE@		module-rtp-send.la \
 @OS_IS_WIN32_FALSE@		module-rtp-recv.la
 
- at HAVE_AF_UNIX_TRUE@am__append_87 = \
+ at HAVE_AF_UNIX_TRUE@am__append_86 = \
 @HAVE_AF_UNIX_TRUE@		module-cli-protocol-unix.la \
 @HAVE_AF_UNIX_TRUE@		module-simple-protocol-unix.la \
 @HAVE_AF_UNIX_TRUE@		module-http-protocol-unix.la \
 @HAVE_AF_UNIX_TRUE@		module-native-protocol-unix.la
 
- at HAVE_AF_UNIX_TRUE@@HAVE_ESOUND_TRUE at am__append_88 = \
+ at HAVE_AF_UNIX_TRUE@@HAVE_ESOUND_TRUE at am__append_87 = \
 @HAVE_AF_UNIX_TRUE@@HAVE_ESOUND_TRUE@		module-esound-protocol-unix.la
 
- at HAVE_MKFIFO_TRUE@am__append_89 = \
+ at HAVE_MKFIFO_TRUE@am__append_88 = \
 @HAVE_MKFIFO_TRUE@		module-pipe-sink.la \
 @HAVE_MKFIFO_TRUE@		module-pipe-source.la
 
- at HAVE_ESOUND_TRUE@@OS_IS_WIN32_FALSE at am__append_90 = \
+ at HAVE_ESOUND_TRUE@@OS_IS_WIN32_FALSE at am__append_89 = \
 @HAVE_ESOUND_TRUE@@OS_IS_WIN32_FALSE@		module-esound-compat-spawnfd.la \
 @HAVE_ESOUND_TRUE@@OS_IS_WIN32_FALSE@		module-esound-compat-spawnpid.la
 
- at HAVE_REGEX_TRUE@am__append_91 = \
+ at HAVE_REGEX_TRUE@am__append_90 = \
 @HAVE_REGEX_TRUE@		module-match.la
 
- at HAVE_X11_TRUE@am__append_92 = \
+ at HAVE_X11_TRUE@am__append_91 = \
 @HAVE_X11_TRUE@		module-x11-bell.la \
 @HAVE_X11_TRUE@		module-x11-publish.la \
 @HAVE_X11_TRUE@		module-x11-xsmp.la \
 @HAVE_X11_TRUE@		module-x11-cork-request.la
 
- at HAVE_OSS_OUTPUT_TRUE@am__append_93 = \
+ at HAVE_OSS_OUTPUT_TRUE@am__append_92 = \
 @HAVE_OSS_OUTPUT_TRUE@		liboss-util.la \
 @HAVE_OSS_OUTPUT_TRUE@		module-oss.la
 
- at HAVE_COREAUDIO_TRUE@am__append_94 = \
+ at HAVE_COREAUDIO_TRUE@am__append_93 = \
 @HAVE_COREAUDIO_TRUE@		module-coreaudio-detect.la \
 @HAVE_COREAUDIO_TRUE@		module-coreaudio-device.la
 
 pulselibexec_PROGRAMS = $(am__EXEEXT_15)
- at HAVE_ALSA_TRUE@am__append_95 = \
+ at HAVE_ALSA_TRUE@am__append_94 = \
 @HAVE_ALSA_TRUE@		libalsa-util.la \
 @HAVE_ALSA_TRUE@		module-alsa-sink.la \
 @HAVE_ALSA_TRUE@		module-alsa-source.la \
 @HAVE_ALSA_TRUE@		module-alsa-card.la
 
- at HAVE_SOLARIS_TRUE@am__append_96 = \
+ at HAVE_SOLARIS_TRUE@am__append_95 = \
 @HAVE_SOLARIS_TRUE@		module-solaris.la
 
- at HAVE_AVAHI_TRUE@am__append_97 = \
+ at HAVE_AVAHI_TRUE@am__append_96 = \
 @HAVE_AVAHI_TRUE@		module-zeroconf-publish.la \
 @HAVE_AVAHI_TRUE@		module-zeroconf-discover.la
 
- at HAVE_BONJOUR_TRUE@am__append_98 = \
+ at HAVE_BONJOUR_TRUE@am__append_97 = \
 @HAVE_BONJOUR_TRUE@		module-bonjour-publish.la
 
- at HAVE_LIRC_TRUE@am__append_99 = \
+ at HAVE_LIRC_TRUE@am__append_98 = \
 @HAVE_LIRC_TRUE@		module-lirc.la
 
- at HAVE_EVDEV_TRUE@am__append_100 = \
+ at HAVE_EVDEV_TRUE@am__append_99 = \
 @HAVE_EVDEV_TRUE@		module-mmkbd-evdev.la
 
- at HAVE_JACK_TRUE@am__append_101 = \
+ at HAVE_JACK_TRUE@am__append_100 = \
 @HAVE_JACK_TRUE@		module-jack-sink.la \
 @HAVE_JACK_TRUE@		module-jack-source.la
 
- at HAVE_DBUS_TRUE@@HAVE_JACK_TRUE at am__append_102 = \
+ at HAVE_DBUS_TRUE@@HAVE_JACK_TRUE at am__append_101 = \
 @HAVE_DBUS_TRUE@@HAVE_JACK_TRUE@		module-jackdbus-detect.la
 
- at HAVE_GCONF_TRUE@am__append_103 = \
+ at HAVE_GCONF_TRUE@am__append_102 = \
 @HAVE_GCONF_TRUE@		module-gconf.la
 
- at HAVE_GCONF_TRUE@am__append_104 = \
+ at HAVE_GCONF_TRUE@am__append_103 = \
 @HAVE_GCONF_TRUE@		gconf-helper
 
- at HAVE_WAVEOUT_TRUE@am__append_105 = \
+ at HAVE_WAVEOUT_TRUE@am__append_104 = \
 @HAVE_WAVEOUT_TRUE@		module-waveout.la
 
- at HAVE_HAL_COMPAT_TRUE@am__append_106 = \
+ at HAVE_HAL_COMPAT_TRUE@am__append_105 = \
 @HAVE_HAL_COMPAT_TRUE@		module-hal-detect.la
 
- at HAVE_UDEV_TRUE@am__append_107 = \
+ at HAVE_UDEV_TRUE@am__append_106 = \
 @HAVE_UDEV_TRUE@		module-udev-detect.la
 
- at HAVE_SYSTEMD_LOGIN_TRUE@am__append_108 = \
+ at HAVE_SYSTEMD_LOGIN_TRUE@am__append_107 = \
 @HAVE_SYSTEMD_LOGIN_TRUE@		module-systemd-login.la
 
- at HAVE_DBUS_TRUE@am__append_109 = \
+ at HAVE_DBUS_TRUE@am__append_108 = \
 @HAVE_DBUS_TRUE@		module-rygel-media-server.la \
 @HAVE_DBUS_TRUE@		module-dbus-protocol.la
 
- at HAVE_BLUEZ_TRUE@am__append_110 = \
+ at HAVE_BLUEZ_TRUE@am__append_109 = \
 @HAVE_BLUEZ_TRUE@		module-bluetooth-discover.la \
 @HAVE_BLUEZ_TRUE@		module-bluetooth-policy.la
 
- at HAVE_BLUEZ_4_TRUE@am__append_111 = \
+ at HAVE_BLUEZ_4_TRUE@am__append_110 = \
 @HAVE_BLUEZ_4_TRUE@		libbluez4-util.la \
 @HAVE_BLUEZ_4_TRUE@		module-bluez4-discover.la \
 @HAVE_BLUEZ_4_TRUE@		module-bluez4-device.la
 
- at HAVE_BLUEZ_5_TRUE@am__append_112 = \
+ at HAVE_BLUEZ_5_TRUE@am__append_111 = \
 @HAVE_BLUEZ_5_TRUE@		libbluez5-util.la \
 @HAVE_BLUEZ_5_TRUE@		module-bluez5-discover.la \
 @HAVE_BLUEZ_5_TRUE@		module-bluez5-device.la
@@ -410,53 +408,53 @@ pulselibexec_PROGRAMS = $(am__EXEEXT_15)
 
 # RAOP depends on RTP, and we don't support RTP on Windows, see comment at
 # librtp.la above.
- at HAVE_OPENSSL_TRUE@@OS_IS_WIN32_FALSE at am__append_113 = \
+ at HAVE_OPENSSL_TRUE@@OS_IS_WIN32_FALSE at am__append_112 = \
 @HAVE_OPENSSL_TRUE@@OS_IS_WIN32_FALSE@		libraop.la \
 @HAVE_OPENSSL_TRUE@@OS_IS_WIN32_FALSE@		module-raop-sink.la
 
- at HAVE_AVAHI_TRUE@@HAVE_OPENSSL_TRUE@@OS_IS_WIN32_FALSE at am__append_114 = \
+ at HAVE_AVAHI_TRUE@@HAVE_OPENSSL_TRUE@@OS_IS_WIN32_FALSE at am__append_113 = \
 @HAVE_AVAHI_TRUE@@HAVE_OPENSSL_TRUE@@OS_IS_WIN32_FALSE@		module-raop-discover.la
 
- at HAVE_DBUS_TRUE@@HAVE_FFTW_TRUE at am__append_115 = \
+ at HAVE_DBUS_TRUE@@HAVE_FFTW_TRUE at am__append_114 = \
 @HAVE_DBUS_TRUE@@HAVE_FFTW_TRUE@		module-equalizer-sink.la
 
- at HAVE_DBUS_TRUE@@HAVE_FFTW_TRUE at am__append_116 = utils/qpaeq
- at HAVE_ESOUND_TRUE@am__append_117 = \
+ at HAVE_DBUS_TRUE@@HAVE_FFTW_TRUE at am__append_115 = utils/qpaeq
+ at HAVE_ESOUND_TRUE@am__append_116 = \
 @HAVE_ESOUND_TRUE@		module-esound-protocol-tcp-symdef.h \
 @HAVE_ESOUND_TRUE@		module-esound-protocol-unix-symdef.h \
 @HAVE_ESOUND_TRUE@		module-esound-compat-spawnfd-symdef.h \
 @HAVE_ESOUND_TRUE@		module-esound-compat-spawnpid-symdef.h \
 @HAVE_ESOUND_TRUE@		module-esound-sink-symdef.h
 
- at HAVE_DBUS_TRUE@am__append_118 = $(DBUS_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_119 = $(DBUS_LIBS)
- at HAVE_UDEV_TRUE@am__append_120 = modules/udev-util.h modules/udev-util.c
- at HAVE_UDEV_TRUE@am__append_121 = $(UDEV_LIBS)
- at HAVE_UDEV_TRUE@am__append_122 = $(UDEV_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_123 = modules/reserve.h modules/reserve.c modules/reserve-monitor.h modules/reserve-monitor.c
- at HAVE_DBUS_TRUE@am__append_124 = $(DBUS_LIBS)
- at HAVE_DBUS_TRUE@am__append_125 = $(DBUS_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_126 = $(DBUS_LIBS)
- at HAVE_DBUS_TRUE@am__append_127 = $(DBUS_CFLAGS)
- at HAVE_DBUS_TRUE@am__append_128 = $(DBUS_LIBS)
- at HAVE_DBUS_TRUE@am__append_129 = $(DBUS_CFLAGS)
- at HAVE_ADRIAN_EC_TRUE@am__append_130 = \
+ at HAVE_DBUS_TRUE@am__append_117 = $(DBUS_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_118 = $(DBUS_LIBS)
+ at HAVE_UDEV_TRUE@am__append_119 = modules/udev-util.h modules/udev-util.c
+ at HAVE_UDEV_TRUE@am__append_120 = $(UDEV_LIBS)
+ at HAVE_UDEV_TRUE@am__append_121 = $(UDEV_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_122 = modules/reserve.h modules/reserve.c modules/reserve-monitor.h modules/reserve-monitor.c
+ at HAVE_DBUS_TRUE@am__append_123 = $(DBUS_LIBS)
+ at HAVE_DBUS_TRUE@am__append_124 = $(DBUS_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_125 = $(DBUS_LIBS)
+ at HAVE_DBUS_TRUE@am__append_126 = $(DBUS_CFLAGS)
+ at HAVE_DBUS_TRUE@am__append_127 = $(DBUS_LIBS)
+ at HAVE_DBUS_TRUE@am__append_128 = $(DBUS_CFLAGS)
+ at HAVE_ADRIAN_EC_TRUE@am__append_129 = \
 @HAVE_ADRIAN_EC_TRUE@		modules/echo-cancel/adrian-aec.c modules/echo-cancel/adrian-aec.h \
 @HAVE_ADRIAN_EC_TRUE@		modules/echo-cancel/adrian.c modules/echo-cancel/adrian.h
 
- at HAVE_ADRIAN_EC_TRUE@am__append_131 = -DHAVE_ADRIAN_EC=1
- at HAVE_ADRIAN_EC_TRUE@am__append_132 = modules/echo-cancel/adrian-aec
- at HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE at am__append_133 = $(ORC_LIBS)
- at HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE at am__append_134 = $(ORC_CFLAGS) -I$(top_builddir)/src/modules/echo-cancel
- at HAVE_SPEEX_TRUE@am__append_135 = modules/echo-cancel/speex.c
- at HAVE_SPEEX_TRUE@am__append_136 = $(LIBSPEEX_CFLAGS)
- at HAVE_SPEEX_TRUE@am__append_137 = $(LIBSPEEX_LIBS)
- at HAVE_WEBRTC_TRUE@am__append_138 = -DHAVE_WEBRTC=1
- at HAVE_WEBRTC_TRUE@am__append_139 = libwebrtc-util.la
- at HAVE_BLUEZ_5_OFONO_HEADSET_TRUE@am__append_140 = \
+ at HAVE_ADRIAN_EC_TRUE@am__append_130 = -DHAVE_ADRIAN_EC=1
+ at HAVE_ADRIAN_EC_TRUE@am__append_131 = modules/echo-cancel/adrian-aec
+ at HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE at am__append_132 = $(ORC_LIBS)
+ at HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE at am__append_133 = $(ORC_CFLAGS) -I$(top_builddir)/src/modules/echo-cancel
+ at HAVE_SPEEX_TRUE@am__append_134 = modules/echo-cancel/speex.c
+ at HAVE_SPEEX_TRUE@am__append_135 = $(LIBSPEEX_CFLAGS)
+ at HAVE_SPEEX_TRUE@am__append_136 = $(LIBSPEEX_LIBS)
+ at HAVE_WEBRTC_TRUE@am__append_137 = -DHAVE_WEBRTC=1
+ at HAVE_WEBRTC_TRUE@am__append_138 = libwebrtc-util.la
+ at HAVE_BLUEZ_5_OFONO_HEADSET_TRUE@am__append_139 = \
 @HAVE_BLUEZ_5_OFONO_HEADSET_TRUE@		modules/bluetooth/backend-ofono.c
 
- at HAVE_BLUEZ_5_NATIVE_HEADSET_TRUE@am__append_141 = \
+ at HAVE_BLUEZ_5_NATIVE_HEADSET_TRUE@am__append_140 = \
 @HAVE_BLUEZ_5_NATIVE_HEADSET_TRUE@		modules/bluetooth/backend-native.c
 
 subdir = src
@@ -910,7 +908,7 @@ libpulsecore_ at PA_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	libpulsecommon- at PA_MAJORMINOR@.la libpulse.la \
-	libpulsecore-foreign.la $(am__append_52) $(am__DEPENDENCIES_7) \
+	libpulsecore-foreign.la $(am__append_51) $(am__DEPENDENCIES_7) \
 	$(am__DEPENDENCIES_5) $(am__DEPENDENCIES_8) \
 	$(am__DEPENDENCIES_9) $(am__DEPENDENCIES_10) \
 	$(am__DEPENDENCIES_11) $(am__DEPENDENCIES_12)
@@ -1088,8 +1086,11 @@ libpulsedsp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 libraop_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
 	libpulsecore- at PA_MAJORMINOR@.la librtp.la \
 	libpulsecommon- at PA_MAJORMINOR@.la libpulse.la
-am_libraop_la_OBJECTS = modules/raop/libraop_la-raop_client.lo \
-	modules/raop/libraop_la-base64.lo
+am_libraop_la_OBJECTS = modules/raop/libraop_la-raop-util.lo \
+	modules/raop/libraop_la-raop-crypto.lo \
+	modules/raop/libraop_la-raop-packet-buffer.lo \
+	modules/raop/libraop_la-raop-client.lo \
+	modules/raop/libraop_la-raop-sink.lo
 libraop_la_OBJECTS = $(am_libraop_la_OBJECTS)
 libraop_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libraop_la_CFLAGS) \
@@ -1394,7 +1395,7 @@ module_device_restore_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 @HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE@	$(am__DEPENDENCIES_1)
 module_echo_cancel_la_DEPENDENCIES = $(am__DEPENDENCIES_3) \
 	$(am__DEPENDENCIES_13) $(am__DEPENDENCIES_10) \
-	$(am__append_139)
+	$(am__append_138)
 am__module_echo_cancel_la_SOURCES_DIST =  \
 	modules/echo-cancel/module-echo-cancel.c \
 	modules/echo-cancel/null.c modules/echo-cancel/echo-cancel.h \
@@ -2243,7 +2244,7 @@ nodist_echo_cancel_test_OBJECTS = $(am__objects_28)
 echo_cancel_test_OBJECTS = $(am_echo_cancel_test_OBJECTS) \
 	$(nodist_echo_cancel_test_OBJECTS)
 am__DEPENDENCIES_14 = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_13) \
-	$(am__DEPENDENCIES_10) $(am__append_139)
+	$(am__DEPENDENCIES_10) $(am__append_138)
 echo_cancel_test_DEPENDENCIES = $(am__DEPENDENCIES_14)
 echo_cancel_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -3434,6 +3435,7 @@ PREOPEN_MODS = @PREOPEN_MODS@
 PTHREAD_CC = @PTHREAD_CC@
 PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
 PTHREAD_LIBS = @PTHREAD_LIBS@
+PULSEDSP_LOCATION = @PULSEDSP_LOCATION@
 RANLIB = @RANLIB@
 SBC_CFLAGS = @SBC_CFLAGS@
 SBC_LIBS = @SBC_LIBS@
@@ -3598,7 +3600,7 @@ BUILT_SOURCES = $(am__append_6) $(SYMDEF_FILES) builddirs
 ###################################
 #        Some minor stuff         #
 ###################################
-CLEANFILES = $(am__append_7) $(am__append_50) \
+CLEANFILES = $(am__append_7) $(am__append_49) \
 	daemon/pulseaudio.desktop
 @HAVE_ORC_TRUE at ORC_BUILT_SOURCE = $(addsuffix -orc-gen.c,$(ORC_SOURCE))
 @HAVE_ORC_TRUE at ORC_BUILT_HEADER = $(addsuffix -orc-gen.h,$(ORC_SOURCE))
@@ -3608,7 +3610,7 @@ CLEANFILES = $(am__append_7) $(am__append_50) \
 @HAVE_ORC_TRUE at cp_v_gen = $(cp_v_gen_$(V))
 @HAVE_ORC_TRUE at cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
 @HAVE_ORC_TRUE at cp_v_gen_0 = @echo "  CP     $@";
-ORC_SOURCE = pulsecore/svolume $(am__append_132)
+ORC_SOURCE = pulsecore/svolume $(am__append_131)
 pulseaudio_SOURCES = daemon/caps.c daemon/caps.h daemon/cmdline.c \
 	daemon/cmdline.h daemon/cpulimit.c daemon/cpulimit.h \
 	daemon/daemon-conf.c daemon/daemon-conf.h daemon/dumpmodules.c \
@@ -3635,8 +3637,8 @@ pulseaudio_DEPENDENCIES = libpulsecore- at PA_MAJORMINOR@.la libpulsecommon- at PA_MAJ
 ###################################
 #       Utility programs          #
 ###################################
-bin_SCRIPTS = esdcompat $(am__append_16) $(am__append_49) \
-	$(am__append_116)
+bin_SCRIPTS = esdcompat $(am__append_16) $(am__append_48) \
+	$(am__append_115)
 pacat_SOURCES = utils/pacat.c
 pacat_LDADD = $(AM_LDADD) libpulse.la libpulsecommon- at PA_MAJORMINOR@.la $(LIBSNDFILE_LIBS)
 pacat_CFLAGS = $(AM_CFLAGS) $(LIBSNDFILE_CFLAGS)
@@ -3667,7 +3669,7 @@ pax11publish_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
 ###################################
 
 # We split the foreign code off to not be annoyed by warnings we don't care about
-noinst_LTLIBRARIES = liblo-test-util.la $(am__append_51) \
+noinst_LTLIBRARIES = liblo-test-util.la $(am__append_50) \
 	libpulsecore-foreign.la
 TESTS_default = core-util-test mainloop-test strlist-test close-test \
 	memblockq-test channelmap-test thread-mainloop-test utf8-test \
@@ -3988,20 +3990,20 @@ libpulsecommon_ at PA_MAJORMINOR@_la_SOURCES = pulse/client-conf.c \
 	pulsecore/usergroup.h pulsecore/sndfile-util.c \
 	pulsecore/sndfile-util.h pulsecore/socket.h $(am__append_25) \
 	$(am__append_26) $(am__append_27) $(am__append_28) \
-	$(am__append_35) $(am__append_36) $(am__append_38) \
-	$(am__append_41) $(am__append_42)
+	$(am__append_35) $(am__append_36) $(am__append_37) \
+	$(am__append_40) $(am__append_41)
 
 # proplist-util.h uses these header files, but not the library itself!
 libpulsecommon_ at PA_MAJORMINOR@_la_CFLAGS = $(AM_CFLAGS) \
 	$(LIBSNDFILE_CFLAGS) $(am__append_29) $(am__append_31) \
 	$(am__append_33) $(GLIB20_CFLAGS) $(GTK30_CFLAGS) \
-	$(am__append_37) $(am__append_39) $(am__append_43)
+	$(am__append_38) $(am__append_42)
 libpulsecommon_ at PA_MAJORMINOR@_la_LDFLAGS = $(AM_LDFLAGS) \
 	$(AM_LIBLDFLAGS) -avoid-version $(am__append_30) \
 	$(am__append_32) $(am__append_34)
 libpulsecommon_ at PA_MAJORMINOR@_la_LIBADD = $(AM_LIBADD) \
 	$(LIBWRAP_LIBS) $(WINSOCK_LIBS) $(LTLIBICONV) \
-	$(LIBSNDFILE_LIBS) $(am__append_40) $(am__append_44)
+	$(LIBSNDFILE_LIBS) $(am__append_39) $(am__append_43)
 
 ###################################
 #         Client library          #
@@ -4016,8 +4018,8 @@ pulseinclude_HEADERS = pulse/cdecl.h pulse/channelmap.h \
 	pulse/sample.h pulse/scache.h pulse/simple.h pulse/stream.h \
 	pulse/subscribe.h pulse/thread-mainloop.h pulse/timeval.h \
 	pulse/utf8.h pulse/util.h pulse/version.h pulse/volume.h \
-	pulse/xmalloc.h $(am__append_45)
-lib_LTLIBRARIES = libpulse.la libpulse-simple.la $(am__append_46)
+	pulse/xmalloc.h $(am__append_44)
+lib_LTLIBRARIES = libpulse.la libpulse-simple.la $(am__append_45)
 
 # Public interface
 libpulse_la_SOURCES = \
@@ -4052,9 +4054,9 @@ libpulse_la_SOURCES = \
 		pulse/volume.c pulse/volume.h \
 		pulse/xmalloc.c pulse/xmalloc.h
 
-libpulse_la_CFLAGS = $(AM_CFLAGS) $(am__append_47)
+libpulse_la_CFLAGS = $(AM_CFLAGS) $(am__append_46)
 libpulse_la_LIBADD = $(AM_LIBADD) $(WINSOCK_LIBS) $(LTLIBICONV) \
-	libpulsecommon- at PA_MAJORMINOR@.la $(am__append_48)
+	libpulsecommon- at PA_MAJORMINOR@.la $(am__append_47)
 libpulse_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) $(VERSIONING_LDFLAGS) -version-info $(LIBPULSE_VERSION_INFO)
 libpulse_simple_la_SOURCES = pulse/simple.c pulse/simple.h
 libpulse_simple_la_CFLAGS = $(AM_CFLAGS)
@@ -4071,7 +4073,7 @@ libpulse_mainloop_glib_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) $(VERSIONING_
 @HAVE_OSS_WRAPPER_TRUE at padsplibdir = $(pkglibdir)
 @HAVE_OSS_WRAPPER_TRUE at padsplib_LTLIBRARIES = libpulsedsp.la
 @HAVE_OSS_WRAPPER_TRUE at edit = @SED@ \
- at HAVE_OSS_WRAPPER_TRUE@       -e "s|@pkglibdir[@]|$(pkglibdir)|g"
+ at HAVE_OSS_WRAPPER_TRUE@       -e 's|@PULSEDSP_LOCATION[@]|$(PULSEDSP_LOCATION)|g'
 
 libpulsedsp_la_SOURCES = utils/padsp.c
 libpulsedsp_la_CFLAGS = $(AM_CFLAGS)
@@ -4126,23 +4128,23 @@ libpulsecore_ at PA_MAJORMINOR@_la_SOURCES =  \
 	pulsecore/source-output.c pulsecore/source-output.h \
 	pulsecore/source.c pulsecore/source.h pulsecore/start-child.c \
 	pulsecore/start-child.h pulsecore/thread-mq.c \
-	pulsecore/thread-mq.h pulsecore/database.h $(am__append_53) \
-	$(am__append_56) $(am__append_59) $(am__append_62) \
-	$(am__append_65) $(am__append_68) $(am__append_69) \
-	$(am__append_72) $(am__append_75)
+	pulsecore/thread-mq.h pulsecore/database.h $(am__append_52) \
+	$(am__append_55) $(am__append_58) $(am__append_61) \
+	$(am__append_64) $(am__append_67) $(am__append_68) \
+	$(am__append_71) $(am__append_74)
 libpulsecore_ at PA_MAJORMINOR@_la_CFLAGS = $(AM_CFLAGS) $(SERVER_CFLAGS) \
-	$(LIBSNDFILE_CFLAGS) $(WINSOCK_CFLAGS) $(am__append_54) \
-	$(am__append_57) $(am__append_60) $(am__append_63) \
-	$(am__append_66) $(am__append_70) $(am__append_73) \
-	$(am__append_76)
+	$(LIBSNDFILE_CFLAGS) $(WINSOCK_CFLAGS) $(am__append_53) \
+	$(am__append_56) $(am__append_59) $(am__append_62) \
+	$(am__append_65) $(am__append_69) $(am__append_72) \
+	$(am__append_75)
 libpulsecore_ at PA_MAJORMINOR@_la_LDFLAGS = $(AM_LDFLAGS) \
-	$(AM_LIBLDFLAGS) -avoid-version $(am__append_58)
+	$(AM_LIBLDFLAGS) -avoid-version $(am__append_57)
 libpulsecore_ at PA_MAJORMINOR@_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) \
 	$(LIBSNDFILE_LIBS) $(WINSOCK_LIBS) $(LTLIBICONV) \
 	libpulsecommon- at PA_MAJORMINOR@.la libpulse.la \
-	libpulsecore-foreign.la $(am__append_52) $(am__append_55) \
-	$(am__append_61) $(am__append_64) $(am__append_67) \
-	$(am__append_71) $(am__append_74) $(am__append_77)
+	libpulsecore-foreign.la $(am__append_51) $(am__append_54) \
+	$(am__append_60) $(am__append_63) $(am__append_66) \
+	$(am__append_70) $(am__append_73) $(am__append_76)
 @HAVE_NEON_TRUE at libpulsecore_sconv_neon_la_SOURCES = pulsecore/sconv_neon.c
 @HAVE_NEON_TRUE at libpulsecore_sconv_neon_la_CFLAGS = $(AM_CFLAGS) $(NEON_CFLAGS)
 @HAVE_NEON_TRUE at libpulsecore_mix_neon_la_SOURCES = pulsecore/mix_neon.c
@@ -4165,8 +4167,8 @@ libpulsecore_foreign_la_CFLAGS = $(AM_CFLAGS) $(FOREIGN_CFLAGS)
 ### the head, and not the other way!
 modlibexec_LTLIBRARIES = libcli.la libprotocol-cli.la \
 	libprotocol-simple.la libprotocol-http.la \
-	libprotocol-native.la $(am__append_78) $(am__append_79) \
-	$(am__append_80) $(am__append_81) $(am__append_84) \
+	libprotocol-native.la $(am__append_77) $(am__append_78) \
+	$(am__append_79) $(am__append_80) $(am__append_83) \
 	module-cli.la module-cli-protocol-tcp.la \
 	module-simple-protocol-tcp.la module-null-sink.la \
 	module-null-source.la module-sine-source.la module-detect.la \
@@ -4188,16 +4190,16 @@ modlibexec_LTLIBRARIES = libcli.la libprotocol-cli.la \
 	module-switch-on-connect.la module-switch-on-port-available.la \
 	module-filter-apply.la module-filter-heuristics.la \
 	module-role-ducking.la module-allow-passthrough.la \
-	$(am__append_85) $(am__append_86) $(am__append_87) \
-	$(am__append_88) $(am__append_89) $(am__append_90) \
-	$(am__append_91) $(am__append_92) $(am__append_93) \
-	$(am__append_94) $(am__append_95) $(am__append_96) \
-	$(am__append_97) $(am__append_98) $(am__append_99) \
-	$(am__append_100) $(am__append_101) $(am__append_102) \
-	$(am__append_103) $(am__append_105) $(am__append_106) \
-	$(am__append_107) $(am__append_108) $(am__append_109) \
-	$(am__append_110) $(am__append_111) $(am__append_112) \
-	$(am__append_113) $(am__append_114) $(am__append_115)
+	$(am__append_84) $(am__append_85) $(am__append_86) \
+	$(am__append_87) $(am__append_88) $(am__append_89) \
+	$(am__append_90) $(am__append_91) $(am__append_92) \
+	$(am__append_93) $(am__append_94) $(am__append_95) \
+	$(am__append_96) $(am__append_97) $(am__append_98) \
+	$(am__append_99) $(am__append_100) $(am__append_101) \
+	$(am__append_102) $(am__append_104) $(am__append_105) \
+	$(am__append_106) $(am__append_107) $(am__append_108) \
+	$(am__append_109) $(am__append_110) $(am__append_111) \
+	$(am__append_112) $(am__append_113) $(am__append_114)
 libprotocol_simple_la_SOURCES = pulsecore/protocol-simple.c pulsecore/protocol-simple.h
 libprotocol_simple_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
 libprotocol_simple_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINOR@.la libpulsecommon- at PA_MAJORMINOR@.la libpulse.la
@@ -4212,11 +4214,11 @@ libprotocol_http_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
 libprotocol_http_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINOR@.la libpulsecommon- at PA_MAJORMINOR@.la libpulse.la
 libprotocol_native_la_SOURCES = pulsecore/protocol-native.c pulsecore/protocol-native.h pulsecore/native-common.h
 libprotocol_native_la_CFLAGS = $(AM_CFLAGS) $(SERVER_CFLAGS) \
-	$(am__append_82)
+	$(am__append_81)
 libprotocol_native_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
 libprotocol_native_la_LIBADD = $(AM_LIBADD) \
 	libpulsecore- at PA_MAJORMINOR@.la \
-	libpulsecommon- at PA_MAJORMINOR@.la libpulse.la $(am__append_83)
+	libpulsecommon- at PA_MAJORMINOR@.la libpulse.la $(am__append_82)
 @HAVE_ESOUND_TRUE at libprotocol_esound_la_SOURCES = pulsecore/protocol-esound.c pulsecore/protocol-esound.h pulsecore/esound.h
 @HAVE_ESOUND_TRUE at libprotocol_esound_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
 @HAVE_ESOUND_TRUE at libprotocol_esound_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINOR@.la libpulsecommon- at PA_MAJORMINOR@.la libpulse.la
@@ -4230,8 +4232,11 @@ librtp_la_SOURCES = \
 librtp_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
 librtp_la_LIBADD = $(AM_LIBADD) libpulsecore- at PA_MAJORMINOR@.la libpulsecommon- at PA_MAJORMINOR@.la libpulse.la
 libraop_la_SOURCES = \
-        modules/raop/raop_client.c modules/raop/raop_client.h \
-        modules/raop/base64.c modules/raop/base64.h
+        modules/raop/raop-util.c modules/raop/raop-util.h \
+        modules/raop/raop-crypto.c modules/raop/raop-crypto.h \
+        modules/raop/raop-packet-buffer.h modules/raop/raop-packet-buffer.c \
+        modules/raop/raop-client.c modules/raop/raop-client.h \
+        modules/raop/raop-sink.c modules/raop/raop-sink.h
 
 libraop_la_CFLAGS = $(AM_CFLAGS) $(OPENSSL_CFLAGS) -I$(top_srcdir)/src/modules/rtp
 libraop_la_LDFLAGS = $(AM_LDFLAGS) $(AM_LIBLDFLAGS) -avoid-version
@@ -4350,7 +4355,7 @@ SYMDEF_FILES = module-cli-symdef.h module-cli-protocol-tcp-symdef.h \
 	module-switch-on-connect-symdef.h \
 	module-switch-on-port-available-symdef.h \
 	module-filter-apply-symdef.h module-filter-heuristics-symdef.h \
-	module-allow-passthrough-symdef.h $(am__append_117)
+	module-allow-passthrough-symdef.h $(am__append_116)
 
 # Simple protocol
 module_simple_protocol_tcp_la_SOURCES = modules/module-protocol-stub.c
@@ -4485,10 +4490,10 @@ module_remap_source_la_LDFLAGS = $(MODULE_LDFLAGS)
 module_remap_source_la_LIBADD = $(MODULE_LIBADD)
 module_ladspa_sink_la_SOURCES = modules/module-ladspa-sink.c modules/ladspa.h
 module_ladspa_sink_la_CFLAGS = -DLADSPA_PATH=\"$(libdir)/ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa:/usr/local/lib64/ladspa:/usr/lib64/ladspa\" \
-	$(AM_CFLAGS) $(SERVER_CFLAGS) $(am__append_118)
+	$(AM_CFLAGS) $(SERVER_CFLAGS) $(am__append_117)
 module_ladspa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
 module_ladspa_sink_la_LIBADD = $(MODULE_LIBADD) $(LIBLTDL) \
-	$(am__append_119)
+	$(am__append_118)
 module_equalizer_sink_la_SOURCES = modules/module-equalizer-sink.c
 module_equalizer_sink_la_CFLAGS = $(AM_CFLAGS) $(SERVER_CFLAGS) $(DBUS_CFLAGS) $(FFTW_CFLAGS)
 module_equalizer_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
@@ -4572,12 +4577,12 @@ libalsa_util_la_SOURCES = modules/alsa/alsa-util.c \
 	modules/alsa/alsa-mixer.h modules/alsa/alsa-sink.c \
 	modules/alsa/alsa-sink.h modules/alsa/alsa-source.c \
 	modules/alsa/alsa-source.h modules/reserve-wrap.c \
-	modules/reserve-wrap.h $(am__append_120) $(am__append_123)
+	modules/reserve-wrap.h $(am__append_119) $(am__append_122)
 libalsa_util_la_LDFLAGS = -avoid-version
 libalsa_util_la_LIBADD = $(MODULE_LIBADD) $(ASOUNDLIB_LIBS) \
-	$(am__append_121) $(am__append_124)
+	$(am__append_120) $(am__append_123)
 libalsa_util_la_CFLAGS = $(AM_CFLAGS) $(SERVER_CFLAGS) \
-	$(ASOUNDLIB_CFLAGS) $(am__append_122) $(am__append_125)
+	$(ASOUNDLIB_CFLAGS) $(am__append_121) $(am__append_124)
 module_alsa_sink_la_SOURCES = modules/alsa/module-alsa-sink.c
 module_alsa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
 module_alsa_sink_la_LIBADD = $(MODULE_LIBADD) $(ASOUNDLIB_LIBS) libalsa-util.la
@@ -4682,15 +4687,15 @@ module_device_manager_la_CFLAGS = $(AM_CFLAGS)
 module_device_restore_la_SOURCES = modules/module-device-restore.c
 module_device_restore_la_LDFLAGS = $(MODULE_LDFLAGS)
 module_device_restore_la_LIBADD = $(MODULE_LIBADD) \
-	libprotocol-native.la $(am__append_126)
-module_device_restore_la_CFLAGS = $(AM_CFLAGS) $(am__append_127)
+	libprotocol-native.la $(am__append_125)
+module_device_restore_la_CFLAGS = $(AM_CFLAGS) $(am__append_126)
 
 # Stream volume/muted/device restore module
 module_stream_restore_la_SOURCES = modules/module-stream-restore.c
 module_stream_restore_la_LDFLAGS = $(MODULE_LDFLAGS)
 module_stream_restore_la_LIBADD = $(MODULE_LIBADD) \
-	libprotocol-native.la $(am__append_128)
-module_stream_restore_la_CFLAGS = $(AM_CFLAGS) $(am__append_129)
+	libprotocol-native.la $(am__append_127)
+module_stream_restore_la_CFLAGS = $(AM_CFLAGS) $(am__append_128)
 
 # Card profile restore module
 module_card_restore_la_SOURCES = modules/module-card-restore.c
@@ -4732,13 +4737,13 @@ module_suspend_on_idle_la_CFLAGS = $(AM_CFLAGS)
 module_echo_cancel_la_SOURCES =  \
 	modules/echo-cancel/module-echo-cancel.c \
 	modules/echo-cancel/null.c modules/echo-cancel/echo-cancel.h \
-	$(am__append_130) $(am__append_135)
+	$(am__append_129) $(am__append_134)
 module_echo_cancel_la_LDFLAGS = $(MODULE_LDFLAGS)
-module_echo_cancel_la_LIBADD = $(MODULE_LIBADD) $(am__append_133) \
-	$(am__append_137) $(am__append_139)
+module_echo_cancel_la_LIBADD = $(MODULE_LIBADD) $(am__append_132) \
+	$(am__append_136) $(am__append_138)
 module_echo_cancel_la_CFLAGS = $(AM_CFLAGS) $(SERVER_CFLAGS) \
-	$(am__append_131) $(am__append_134) $(am__append_136) \
-	$(am__append_138)
+	$(am__append_130) $(am__append_133) $(am__append_135) \
+	$(am__append_137)
 @HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE at nodist_module_echo_cancel_la_SOURCES = \
 @HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE@		modules/echo-cancel/adrian-aec-orc-gen.c \
 @HAVE_ADRIAN_EC_TRUE@@HAVE_ORC_TRUE@		modules/echo-cancel/adrian-aec-orc-gen.h
@@ -4834,8 +4839,8 @@ module_bluez4_device_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) $(SBC_CFLAGS)
 # Bluetooth BlueZ 5 sink / source
 libbluez5_util_la_SOURCES = modules/bluetooth/bluez5-util.c \
 	modules/bluetooth/bluez5-util.h \
-	modules/bluetooth/a2dp-codecs.h $(am__append_140) \
-	$(am__append_141)
+	modules/bluetooth/a2dp-codecs.h $(am__append_139) \
+	$(am__append_140)
 libbluez5_util_la_LDFLAGS = -avoid-version
 libbluez5_util_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS)
 libbluez5_util_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
@@ -5680,9 +5685,16 @@ modules/raop/$(am__dirstamp):
 modules/raop/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) modules/raop/$(DEPDIR)
 	@: > modules/raop/$(DEPDIR)/$(am__dirstamp)
-modules/raop/libraop_la-raop_client.lo: modules/raop/$(am__dirstamp) \
+modules/raop/libraop_la-raop-util.lo: modules/raop/$(am__dirstamp) \
+	modules/raop/$(DEPDIR)/$(am__dirstamp)
+modules/raop/libraop_la-raop-crypto.lo: modules/raop/$(am__dirstamp) \
 	modules/raop/$(DEPDIR)/$(am__dirstamp)
-modules/raop/libraop_la-base64.lo: modules/raop/$(am__dirstamp) \
+modules/raop/libraop_la-raop-packet-buffer.lo:  \
+	modules/raop/$(am__dirstamp) \
+	modules/raop/$(DEPDIR)/$(am__dirstamp)
+modules/raop/libraop_la-raop-client.lo: modules/raop/$(am__dirstamp) \
+	modules/raop/$(DEPDIR)/$(am__dirstamp)
+modules/raop/libraop_la-raop-sink.lo: modules/raop/$(am__dirstamp) \
 	modules/raop/$(DEPDIR)/$(am__dirstamp)
 
 libraop.la: $(libraop_la_OBJECTS) $(libraop_la_DEPENDENCIES) $(EXTRA_libraop_la_DEPENDENCIES) 
@@ -7038,8 +7050,11 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at modules/macosx/$(DEPDIR)/module-coreaudio-device.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at modules/oss/$(DEPDIR)/module-oss.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at modules/oss/$(DEPDIR)/oss-util.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/libraop_la-base64.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/libraop_la-raop_client.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/libraop_la-raop-client.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/libraop_la-raop-crypto.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/libraop_la-raop-packet-buffer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/libraop_la-raop-sink.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/libraop_la-raop-util.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/module_raop_discover_la-module-raop-discover.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at modules/raop/$(DEPDIR)/module_raop_sink_la-module-raop-sink.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at modules/rtp/$(DEPDIR)/headerlist.Plo at am__quote@
@@ -8675,19 +8690,40 @@ utils/libpulsedsp_la-padsp.lo: utils/padsp.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) $(libpulsedsp_la_CFLAGS) $(CFLAGS) -c -o utils/libpulsedsp_la-padsp.lo `test -f 'utils/padsp.c' || echo '$(srcdir)/'`utils/padsp.c
 
-modules/raop/libraop_la-raop_client.lo: modules/raop/raop_client.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) $(libraop_la_CFLAGS) $(CFLAGS) -MT modules/raop/libraop_la-raop_client.lo -MD -MP -MF modules/raop/$(DEPDIR)/libraop_la-raop_client.Tpo -c -o modules/raop/libraop_la-raop_client.lo `test -f 'modules/raop/raop_client.c' || echo '$(srcdir)/'`modules/raop/raop_client.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) modules/raop/$(DEPDIR)/libraop_la-raop_client.Tpo modules/raop/$(DEPDIR)/libraop_la-raop_client.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='modules/raop/raop_client.c' object='modules/raop/libraop_la-raop_client.lo' libtool=yes @AMDEPBACKSLASH@
+modules/raop/libraop_la-raop-util.lo: modules/raop/raop-util.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) $(libraop_la_CFLAGS) $(CFLAGS) -MT modules/raop/libraop_la-raop-util.lo -MD -MP -MF modules/raop/$(DEPDIR)/libraop_la-raop-util.Tpo -c -o modules/raop/libraop_la-raop-util.lo `test -f 'modules/raop/raop-util.c' || echo '$(srcdir)/'`modules/raop/raop-util.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) modules/raop/$(DEPDIR)/libraop_la-raop-util.Tpo modules/raop/$(DEPDIR)/libraop_la-raop-util.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='modules/raop/raop-util.c' object='modules/raop/libraop_la-raop-util.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) $(libraop_la_CFLAGS) $(CFLAGS) -c -o modules/raop/libraop_la-raop-util.lo `test -f 'modules/raop/raop-util.c' || echo '$(srcdir)/'`modules/raop/raop-util.c
+
+modules/raop/libraop_la-raop-crypto.lo: modules/raop/raop-crypto.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) $(libraop_la_CFLAGS) $(CFLAGS) -MT modules/raop/libraop_la-raop-crypto.lo -MD -MP -MF modules/raop/$(DEPDIR)/libraop_la-raop-crypto.Tpo -c -o modules/raop/libraop_la-raop-crypto.lo `test -f 'modules/raop/raop-crypto.c' || echo '$(srcdir)/'`modules/raop/raop-crypto.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) modules/raop/$(DEPDIR)/libraop_la-raop-crypto.Tpo modules/raop/$(DEPDIR)/libraop_la-raop-crypto.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='modules/raop/raop-crypto.c' object='modules/raop/libraop_la-raop-crypto.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) $(libraop_la_CFLAGS) $(CFLAGS) -c -o modules/raop/libraop_la-raop-crypto.lo `test -f 'modules/raop/raop-crypto.c' || echo '$(srcdir)/'`modules/raop/raop-crypto.c
+
+modules/raop/libraop_la-raop-packet-buffer.lo: modules/raop/raop-packet-buffer.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) $(libraop_la_CFLAGS) $(CFLAGS) -MT modules/raop/libraop_la-raop-packet-buffer.lo -MD -MP -MF modules/raop/$(DEPDIR)/libraop_la-raop-packet-buffer.Tpo -c -o modules/raop/libraop_la-raop-packet-buffer.lo `test -f 'modules/raop/raop-packet-buffer.c' || echo '$(srcdir)/'`modules/raop/raop-packet-buffer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) modules/raop/$(DEPDIR)/libraop_la-raop-packet-buffer.Tpo modules/raop/$(DEPDIR)/libraop_la-raop-packet-buffer.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='modules/raop/raop-packet-buffer.c' object='modules/raop/libraop_la-raop-packet-buffer.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) $(libraop_la_CFLAGS) $(CFLAGS) -c -o modules/raop/libraop_la-raop-packet-buffer.lo `test -f 'modules/raop/raop-packet-buffer.c' || echo '$(srcdir)/'`modules/raop/raop-packet-buffer.c
+
+modules/raop/libraop_la-raop-client.lo: modules/raop/raop-client.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) $(libraop_la_CFLAGS) $(CFLAGS) -MT modules/raop/libraop_la-raop-client.lo -MD -MP -MF modules/raop/$(DEPDIR)/libraop_la-raop-client.Tpo -c -o modules/raop/libraop_la-raop-client.lo `test -f 'modules/raop/raop-client.c' || echo '$(srcdir)/'`modules/raop/raop-client.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) modules/raop/$(DEPDIR)/libraop_la-raop-client.Tpo modules/raop/$(DEPDIR)/libraop_la-raop-client.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='modules/raop/raop-client.c' object='modules/raop/libraop_la-raop-client.lo' libtool=yes @AMDEPBACKSLASH@
 @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) $(libraop_la_CFLAGS) $(CFLAGS) -c -o modules/raop/libraop_la-raop_client.lo `test -f 'modules/raop/raop_client.c' || echo '$(srcdir)/'`modules/raop/raop_client.c
+ 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) $(libraop_la_CFLAGS) $(CFLAGS) -c -o modules/raop/libraop_la-raop-client.lo `test -f 'modules/raop/raop-client.c' || echo '$(srcdir)/'`modules/raop/raop-client.c
 
-modules/raop/libraop_la-base64.lo: modules/raop/base64.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) $(libraop_la_CFLAGS) $(CFLAGS) -MT modules/raop/libraop_la-base64.lo -MD -MP -MF modules/raop/$(DEPDIR)/libraop_la-base64.Tpo -c -o modules/raop/libraop_la-base64.lo `test -f 'modules/raop/base64.c' || echo '$(srcdir)/'`modules/raop/base64.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) modules/raop/$(DEPDIR)/libraop_la-base64.Tpo modules/raop/$(DEPDIR)/libraop_la-base64.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='modules/raop/base64.c' object='modules/raop/libraop_la-base64.lo' libtool=yes @AMDEPBACKSLASH@
+modules/raop/libraop_la-raop-sink.lo: modules/raop/raop-sink.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) $(libraop_la_CFLAGS) $(CFLAGS) -MT modules/raop/libraop_la-raop-sink.lo -MD -MP -MF modules/raop/$(DEPDIR)/libraop_la-raop-sink.Tpo -c -o modules/raop/libraop_la-raop-sink.lo `test -f 'modules/raop/raop-sink.c' || echo '$(srcdir)/'`modules/raop/raop-sink.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) modules/raop/$(DEPDIR)/libraop_la-raop-sink.Tpo modules/raop/$(DEPDIR)/libraop_la-raop-sink.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='modules/raop/raop-sink.c' object='modules/raop/libraop_la-raop-sink.lo' libtool=yes @AMDEPBACKSLASH@
 @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) $(libraop_la_CFLAGS) $(CFLAGS) -c -o modules/raop/libraop_la-base64.lo `test -f 'modules/raop/base64.c' || echo '$(srcdir)/'`modules/raop/base64.c
+ 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) $(libraop_la_CFLAGS) $(CFLAGS) -c -o modules/raop/libraop_la-raop-sink.lo `test -f 'modules/raop/raop-sink.c' || echo '$(srcdir)/'`modules/raop/raop-sink.c
 
 modules/module_allow_passthrough_la-module-allow-passthrough.lo: modules/module-allow-passthrough.c
 @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) $(module_allow_passthrough_la_CFLAGS) $(CFLAGS) -MT modules/module_allow_passthrough_la-module-allow-passthrough.lo -MD -MP -MF modules/$(DEPDIR)/module_allow_passthrough_la-module-allow-passthrough.Tpo -c -o modules/module_allow_passthrough_la-module-allow-passthrough.lo `test -f 'modules/module-allow-pas [...]
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index f0ed0b4..9883126 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -81,7 +81,9 @@ static const pa_daemon_conf default_conf = {
     .log_meta = false,
     .log_time = false,
     .resample_method = PA_RESAMPLER_AUTO,
+    .avoid_resampling = false,
     .disable_remixing = false,
+    .remixing_use_all_sink_channels = true,
     .disable_lfe_remixing = true,
     .lfe_crossover_freq = 0,
     .config_file = NULL,
@@ -552,8 +554,11 @@ int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
         { "deferred-volume-extra-delay-usec",
                                         pa_config_parse_int,      &c->deferred_volume_extra_delay_usec, NULL },
         { "nice-level",                 parse_nice_level,         c, NULL },
+        { "avoid-resampling",           pa_config_parse_bool,     &c->avoid_resampling, NULL },
         { "disable-remixing",           pa_config_parse_bool,     &c->disable_remixing, NULL },
         { "enable-remixing",            pa_config_parse_not_bool, &c->disable_remixing, NULL },
+        { "remixing-use-all-sink-channels",
+                                        pa_config_parse_bool,     &c->remixing_use_all_sink_channels, NULL },
         { "disable-lfe-remixing",       pa_config_parse_bool,     &c->disable_lfe_remixing, NULL },
         { "enable-lfe-remixing",        pa_config_parse_not_bool, &c->disable_lfe_remixing, NULL },
         { "lfe-crossover-freq",         pa_config_parse_unsigned, &c->lfe_crossover_freq, NULL },
@@ -747,7 +752,9 @@ char *pa_daemon_conf_dump(pa_daemon_conf *c) {
     pa_strbuf_printf(s, "log-target = %s\n", pa_strempty(log_target));
     pa_strbuf_printf(s, "log-level = %s\n", log_level_to_string[c->log_level]);
     pa_strbuf_printf(s, "resample-method = %s\n", pa_resample_method_to_string(c->resample_method));
+    pa_strbuf_printf(s, "avoid-resampling = %s\n", pa_yes_no(!c->avoid_resampling));
     pa_strbuf_printf(s, "enable-remixing = %s\n", pa_yes_no(!c->disable_remixing));
+    pa_strbuf_printf(s, "remixing-use-all-sink-channels = %s\n", pa_yes_no(c->remixing_use_all_sink_channels));
     pa_strbuf_printf(s, "enable-lfe-remixing = %s\n", pa_yes_no(!c->disable_lfe_remixing));
     pa_strbuf_printf(s, "lfe-crossover-freq = %u\n", c->lfe_crossover_freq);
     pa_strbuf_printf(s, "default-sample-format = %s\n", pa_sample_format_to_string(c->default_sample_spec.format));
diff --git a/src/daemon/daemon-conf.h b/src/daemon/daemon-conf.h
index 82b619f..953ea33 100644
--- a/src/daemon/daemon-conf.h
+++ b/src/daemon/daemon-conf.h
@@ -67,7 +67,9 @@ typedef struct pa_daemon_conf {
         no_cpu_limit,
         disable_shm,
         disable_memfd,
+        avoid_resampling,
         disable_remixing,
+        remixing_use_all_sink_channels,
         disable_lfe_remixing,
         load_default_script_file,
         disallow_exit,
diff --git a/src/daemon/daemon.conf.in b/src/daemon/daemon.conf.in
index f3a1cc3..a955523 100644
--- a/src/daemon/daemon.conf.in
+++ b/src/daemon/daemon.conf.in
@@ -54,7 +54,9 @@ ifelse(@HAVE_DBUS@, 1, [dnl
 ; log-backtrace = 0
 
 ; resample-method = speex-float-1
+; avoid-resampling = false
 ; enable-remixing = yes
+; remixing-use-all-sink-channels = yes
 ; enable-lfe-remixing = no
 ; lfe-crossover-freq = 0
 
diff --git a/src/daemon/main.c b/src/daemon/main.c
index dc5e5bc..f35252d 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -1036,7 +1036,9 @@ int main(int argc, char *argv[]) {
     c->resample_method = conf->resample_method;
     c->realtime_priority = conf->realtime_priority;
     c->realtime_scheduling = conf->realtime_scheduling;
+    c->avoid_resampling = conf->avoid_resampling;
     c->disable_remixing = conf->disable_remixing;
+    c->remixing_use_all_sink_channels = conf->remixing_use_all_sink_channels;
     c->disable_lfe_remixing = conf->disable_lfe_remixing;
     c->deferred_volume = conf->deferred_volume;
     c->running_as_daemon = conf->daemonize;
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index 3dbf6b1..f59cad3 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -4015,7 +4015,8 @@ static int mapping_verify(pa_alsa_mapping *m, const pa_channel_map *bonus) {
         { "iec958-ac3-surround-51", N_("Digital Surround 5.1 (IEC958/AC3)") },
         { "iec958-dts-surround-51", N_("Digital Surround 5.1 (IEC958/DTS)") },
         { "hdmi-stereo",            N_("Digital Stereo (HDMI)") },
-        { "hdmi-surround-51",       N_("Digital Surround 5.1 (HDMI)") }
+        { "hdmi-surround-51",       N_("Digital Surround 5.1 (HDMI)") },
+        { "unknown-stereo",         N_("Stereo") },
     };
 
     pa_assert(m);
@@ -4152,6 +4153,7 @@ static int profile_verify(pa_alsa_profile *p) {
         { "output:analog-stereo+input:analog-stereo", N_("Analog Stereo Duplex") },
         { "output:iec958-stereo+input:iec958-stereo", N_("Digital Stereo Duplex (IEC958)") },
         { "output:multichannel-output+input:multichannel-input", N_("Multichannel Duplex") },
+        { "output:unknown-stereo+input:unknown-stereo", N_("Stereo Duplex") },
         { "off",                                      N_("Off") }
     };
 
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 886c735..827a650 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -88,6 +88,8 @@
 #define DEFAULT_REWIND_SAFEGUARD_BYTES (256U) /* 1.33ms @48kHz, we'll never rewind less than this */
 #define DEFAULT_REWIND_SAFEGUARD_USEC (1330) /* 1.33ms, depending on channels/rate/sample we may rewind more than 256 above */
 
+#define DEFAULT_WRITE_ITERATION_THRESHOLD 0.03 /* don't iterate write if < 3% of the buffer is available */
+
 struct userdata {
     pa_core *core;
     pa_module *module;
@@ -580,12 +582,19 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, bool polled, bo
             break;
         }
 
-        if (++j > 10) {
+        j++;
+
+        if (j > 10) {
 #ifdef DEBUG_TIMING
             pa_log_debug("Not filling up, because already too many iterations.");
 #endif
 
             break;
+        } else if (j >= 2 && (n_bytes < (DEFAULT_WRITE_ITERATION_THRESHOLD * (u->hwbuf_size - u->hwbuf_unused)))) {
+#ifdef DEBUG_TIMING
+            pa_log_debug("Not filling up, because <%g%% available.", DEFAULT_WRITE_ITERATION_THRESHOLD * 100);
+#endif
+            break;
         }
 
         n_bytes -= u->hwbuf_unused;
@@ -754,12 +763,19 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, bool polled, bo
             break;
         }
 
-        if (++j > 10) {
+        j++;
+
+        if (j > 10) {
 #ifdef DEBUG_TIMING
             pa_log_debug("Not filling up, because already too many iterations.");
 #endif
 
             break;
+        } else if (j >= 2 && (n_bytes < (DEFAULT_WRITE_ITERATION_THRESHOLD * (u->hwbuf_size - u->hwbuf_unused)))) {
+#ifdef DEBUG_TIMING
+            pa_log_debug("Not filling up, because <%g%% available.", DEFAULT_WRITE_ITERATION_THRESHOLD * 100);
+#endif
+            break;
         }
 
         n_bytes -= u->hwbuf_unused;
@@ -892,8 +908,7 @@ static void update_smoother(struct userdata *u) {
     u->smoother_interval = PA_MIN (u->smoother_interval * 2, SMOOTHER_MAX_INTERVAL);
 }
 
-static pa_usec_t sink_get_latency(struct userdata *u) {
-    pa_usec_t r;
+static int64_t sink_get_latency(struct userdata *u) {
     int64_t delay;
     pa_usec_t now1, now2;
 
@@ -904,12 +919,10 @@ static pa_usec_t sink_get_latency(struct userdata *u) {
 
     delay = (int64_t) pa_bytes_to_usec(u->write_count, &u->sink->sample_spec) - (int64_t) now2;
 
-    r = delay >= 0 ? (pa_usec_t) delay : 0;
-
     if (u->memchunk.memblock)
-        r += pa_bytes_to_usec(u->memchunk.length, &u->sink->sample_spec);
+        delay += pa_bytes_to_usec(u->memchunk.length, &u->sink->sample_spec);
 
-    return r;
+    return delay;
 }
 
 static int build_pollfd(struct userdata *u) {
@@ -1150,12 +1163,12 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
     switch (code) {
 
         case PA_SINK_MESSAGE_GET_LATENCY: {
-            pa_usec_t r = 0;
+            int64_t r = 0;
 
             if (u->pcm_handle)
                 r = sink_get_latency(u);
 
-            *((pa_usec_t*) data) = r;
+            *((int64_t*) data) = r;
 
             return 0;
         }
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index b788df2..6bec188 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -809,7 +809,7 @@ static void update_smoother(struct userdata *u) {
     u->smoother_interval = PA_MIN (u->smoother_interval * 2, SMOOTHER_MAX_INTERVAL);
 }
 
-static pa_usec_t source_get_latency(struct userdata *u) {
+static int64_t source_get_latency(struct userdata *u) {
     int64_t delay;
     pa_usec_t now1, now2;
 
@@ -820,7 +820,7 @@ static pa_usec_t source_get_latency(struct userdata *u) {
 
     delay = (int64_t) now2 - (int64_t) pa_bytes_to_usec(u->read_count, &u->source->sample_spec);
 
-    return delay >= 0 ? (pa_usec_t) delay : 0;
+    return delay;
 }
 
 static int build_pollfd(struct userdata *u) {
@@ -1032,12 +1032,12 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
     switch (code) {
 
         case PA_SOURCE_MESSAGE_GET_LATENCY: {
-            pa_usec_t r = 0;
+            int64_t r = 0;
 
             if (u->pcm_handle)
                 r = source_get_latency(u);
 
-            *((pa_usec_t*) data) = r;
+            *((int64_t*) data) = r;
 
             return 0;
         }
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index dfb2aa7..61fb490 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -410,11 +410,6 @@ success:
     if (ss->format != _ss.format)
         pa_log_info("Device %s doesn't support sample format %s, changed to %s.", snd_pcm_name(pcm_handle), pa_sample_format_to_string(ss->format), pa_sample_format_to_string(_ss.format));
 
-    if ((ret = snd_pcm_prepare(pcm_handle)) < 0) {
-        pa_log_info("snd_pcm_prepare() failed: %s", pa_alsa_strerror(ret));
-        goto finish;
-    }
-
     if ((ret = snd_pcm_hw_params_current(pcm_handle, hwparams)) < 0) {
         pa_log_info("snd_pcm_hw_params_current() failed: %s", pa_alsa_strerror(ret));
         goto finish;
@@ -752,6 +747,13 @@ snd_pcm_t *pa_alsa_open_by_device_string(
             goto fail;
         }
 
+        if (ss->channels > PA_CHANNELS_MAX) {
+            pa_log("Device %s has %u channels, but PulseAudio supports only %u channels. Unable to use the device.",
+                   d, ss->channels, PA_CHANNELS_MAX);
+            snd_pcm_close(pcm_handle);
+            goto fail;
+        }
+
         if (dev)
             *dev = d;
         else
diff --git a/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf b/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf
index b669bc4..579db6b 100644
--- a/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf
+++ b/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf
@@ -18,7 +18,7 @@
 ; See analog-output.conf.common for an explanation on the directives
 
 [General]
-priority = 87
+priority = 88
 description-key = analog-input-microphone-headset
 
 [Jack Headset Mic]
diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf
index 470eb99..f412058 100644
--- a/src/modules/alsa/mixer/profile-sets/default.conf
+++ b/src/modules/alsa/mixer/profile-sets/default.conf
@@ -109,7 +109,7 @@ paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal
 priority = 2
 
 [Mapping analog-stereo]
-device-strings = front:%f hw:%f
+device-strings = front:%f
 channel-map = left,right
 paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2
 paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic
@@ -460,6 +460,12 @@ priority = 1
 direction = input
 paths-input = multichannel-input
 
+[Mapping unknown-stereo]
+device-strings = hw:%f
+channel-map = front-left,front-right
+fallback = yes
+priority = 1
+
 ; An example for defining multiple-sink profiles
 #[Profile output:analog-stereo+output:iec958-stereo+input:analog-stereo]
 #description = Foobar
diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c
index cf88126..6eb4e16 100644
--- a/src/modules/bluetooth/backend-native.c
+++ b/src/modules/bluetooth/backend-native.c
@@ -40,13 +40,16 @@ struct pa_bluetooth_backend {
   pa_core *core;
   pa_dbus_connection *connection;
   pa_bluetooth_discovery *discovery;
+  bool enable_hs_role;
 
   PA_LLIST_HEAD(pa_dbus_pending, pending);
 };
 
-struct transport_rfcomm {
+struct transport_data {
     int rfcomm_fd;
     pa_io_event *rfcomm_io;
+    int sco_fd;
+    pa_io_event *sco_io;
     pa_mainloop_api *mainloop;
 };
 
@@ -59,6 +62,11 @@ struct transport_rfcomm {
 #define BLUEZ_PROFILE_INTERFACE BLUEZ_SERVICE ".Profile1"
 
 #define HSP_AG_PROFILE "/Profile/HSPAGProfile"
+#define HSP_HS_PROFILE "/Profile/HSPHSProfile"
+
+/* RFCOMM channel for HSP headset role
+ * The choice seems to be a bit arbitrary -- it looks like at least channels 2, 4 and 5 also work*/
+#define HSP_HS_DEFAULT_CHANNEL  3
 
 #define PROFILE_INTROSPECT_XML                                          \
     DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE                           \
@@ -100,9 +108,10 @@ static pa_dbus_pending* send_and_add_to_pending(pa_bluetooth_backend *backend, D
     return p;
 }
 
-static int bluez5_sco_acquire_cb(pa_bluetooth_transport *t, bool optional, size_t *imtu, size_t *omtu) {
+static int sco_do_connect(pa_bluetooth_transport *t) {
     pa_bluetooth_device *d = t->device;
     struct sockaddr_sco addr;
+    socklen_t len;
     int err, i;
     int sock;
     bdaddr_t src;
@@ -124,47 +133,161 @@ static int bluez5_sco_acquire_cb(pa_bluetooth_transport *t, bool optional, size_
         return -1;
     }
 
-    memset(&addr, 0, sizeof(addr));
+    len = sizeof(addr);
+    memset(&addr, 0, len);
     addr.sco_family = AF_BLUETOOTH;
     bacpy(&addr.sco_bdaddr, &src);
 
-    if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+    if (bind(sock, (struct sockaddr *) &addr, len) < 0) {
         pa_log_error("bind(): %s", pa_cstrerror(errno));
         goto fail_close;
     }
 
-    memset(&addr, 0, sizeof(addr));
+    memset(&addr, 0, len);
     addr.sco_family = AF_BLUETOOTH;
     bacpy(&addr.sco_bdaddr, &dst);
 
     pa_log_info("doing connect");
-    err = connect(sock, (struct sockaddr *) &addr, sizeof(addr));
+    err = connect(sock, (struct sockaddr *) &addr, len);
     if (err < 0 && !(errno == EAGAIN || errno == EINPROGRESS)) {
         pa_log_error("connect(): %s", pa_cstrerror(errno));
         goto fail_close;
     }
+    return sock;
 
-    /* The "48" below is hardcoded until we get meaningful MTU values exposed
-     * by the kernel */
+fail_close:
+    close(sock);
+    return -1;
+}
 
-    if (imtu)
-        *imtu = 48;
+static int sco_do_accept(pa_bluetooth_transport *t) {
+    struct transport_data *trd = t->userdata;
+    struct sockaddr_sco addr;
+    socklen_t optlen;
+    int sock;
 
-    if (omtu)
-        *omtu = 48;
+    memset(&addr, 0, sizeof(addr));
+    optlen = sizeof(addr);
 
+    pa_log_info ("doing accept");
+    sock = accept(trd->sco_fd, (struct sockaddr *) &addr, &optlen);
+    if (sock < 0) {
+        if (errno != EAGAIN)
+            pa_log_error("accept(): %s", pa_cstrerror(errno));
+        goto fail;
+    }
     return sock;
 
-fail_close:
-    close(sock);
+fail:
+    return -1;
+}
+
+static int sco_acquire_cb(pa_bluetooth_transport *t, bool optional, size_t *imtu, size_t *omtu) {
+    int sock;
+    socklen_t len;
+
+    if (optional)
+        sock = sco_do_accept(t);
+    else
+        sock = sco_do_connect(t);
+
+    if (sock < 0)
+        goto fail;
+
+    if (imtu) *imtu = 48;
+    if (omtu) *omtu = 48;
+
+    if (t->device->autodetect_mtu) {
+        struct sco_options sco_opt;
+
+        len = sizeof(sco_opt);
+        memset(&sco_opt, 0, len);
+
+        if (getsockopt(sock, SOL_SCO, SCO_OPTIONS, &sco_opt, &len) < 0)
+            pa_log_warn("getsockopt(SCO_OPTIONS) failed, loading defaults");
+        else {
+            if (imtu) *imtu = sco_opt.mtu;
+            if (omtu) *omtu = sco_opt.mtu;
+        }
+    }
+
+    return sock;
+
+fail:
     return -1;
 }
 
-static void bluez5_sco_release_cb(pa_bluetooth_transport *t) {
+static void sco_release_cb(pa_bluetooth_transport *t) {
     pa_log_info("Transport %s released", t->path);
     /* device will close the SCO socket for us */
 }
 
+static void sco_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
+    pa_bluetooth_transport *t = userdata;
+
+    pa_assert(io);
+    pa_assert(t);
+
+    if (events & (PA_IO_EVENT_HANGUP|PA_IO_EVENT_ERROR)) {
+        pa_log_error("error listening SCO connection: %s", pa_cstrerror(errno));
+        goto fail;
+    }
+
+    if (t->state != PA_BLUETOOTH_TRANSPORT_STATE_PLAYING) {
+        pa_log_info("SCO incoming connection: changing state to PLAYING");
+        pa_bluetooth_transport_set_state (t, PA_BLUETOOTH_TRANSPORT_STATE_PLAYING);
+    }
+
+fail:
+    return;
+}
+
+static int sco_listen(pa_bluetooth_transport *t) {
+    struct transport_data *trd = t->userdata;
+    struct sockaddr_sco addr;
+    int sock, i;
+    bdaddr_t src;
+    const char *src_addr;
+
+    sock = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK | SOCK_CLOEXEC, BTPROTO_SCO);
+    if (sock < 0) {
+        pa_log_error("socket(SEQPACKET, SCO) %s", pa_cstrerror(errno));
+        return -1;
+    }
+
+    src_addr = t->device->adapter->address;
+
+    /* don't use ba2str to avoid -lbluetooth */
+    for (i = 5; i >= 0; i--, src_addr += 3)
+        src.b[i] = strtol(src_addr, NULL, 16);
+
+    /* Bind to local address */
+    memset(&addr, 0, sizeof(addr));
+    addr.sco_family = AF_BLUETOOTH;
+    bacpy(&addr.sco_bdaddr, &src);
+
+    if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+        pa_log_error("bind(): %s", pa_cstrerror(errno));
+        goto fail_close;
+    }
+
+    pa_log_info ("doing listen");
+    if (listen(sock, 1) < 0) {
+        pa_log_error("listen(): %s", pa_cstrerror(errno));
+        goto fail_close;
+    }
+
+    trd->sco_fd = sock;
+    trd->sco_io = trd->mainloop->io_new(trd->mainloop, sock, PA_IO_EVENT_INPUT,
+        sco_io_callback, t);
+
+    return sock;
+
+fail_close:
+    close(sock);
+    return -1;
+}
+
 static void register_profile_reply(DBusPendingCall *pending, void *userdata) {
     DBusMessage *r;
     pa_dbus_pending *p;
@@ -200,16 +323,28 @@ finish:
 static void register_profile(pa_bluetooth_backend *b, const char *profile, const char *uuid) {
     DBusMessage *m;
     DBusMessageIter i, d;
+    dbus_bool_t autoconnect;
+    dbus_uint16_t version, chan;
 
-    pa_log_debug("Registering Profile %s", profile);
+    pa_log_debug("Registering Profile %s %s", profile, uuid);
 
     pa_assert_se(m = dbus_message_new_method_call(BLUEZ_SERVICE, "/org/bluez", BLUEZ_PROFILE_MANAGER_INTERFACE, "RegisterProfile"));
 
     dbus_message_iter_init_append(m, &i);
-    dbus_message_iter_append_basic(&i, DBUS_TYPE_OBJECT_PATH, &profile);
-    dbus_message_iter_append_basic(&i, DBUS_TYPE_STRING, &uuid);
+    pa_assert_se(dbus_message_iter_append_basic(&i, DBUS_TYPE_OBJECT_PATH, &profile));
+    pa_assert_se(dbus_message_iter_append_basic(&i, DBUS_TYPE_STRING, &uuid));
     dbus_message_iter_open_container(&i, DBUS_TYPE_ARRAY, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING
             DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &d);
+    if (pa_streq (uuid, PA_BLUETOOTH_UUID_HSP_HS)) {
+        /* In the headset role, the connection will only be initiated from the remote side */
+        autoconnect = 0;
+        pa_dbus_append_basic_variant_dict_entry(&d, "AutoConnect", DBUS_TYPE_BOOLEAN, &autoconnect);
+        chan = HSP_HS_DEFAULT_CHANNEL;
+        pa_dbus_append_basic_variant_dict_entry(&d, "Channel", DBUS_TYPE_UINT16, &chan);
+        /* HSP version 1.2 */
+        version = 0x0102;
+        pa_dbus_append_basic_variant_dict_entry(&d, "Version", DBUS_TYPE_UINT16, &version);
+    }
     dbus_message_iter_close_container(&i, &d);
 
     send_and_add_to_pending(b, m, register_profile_reply, pa_xstrdup(profile));
@@ -229,7 +364,8 @@ static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_i
     if (events & PA_IO_EVENT_INPUT) {
         char buf[512];
         ssize_t len;
-        int gain;
+        int gain, dummy;
+        bool  do_reply = false;
 
         len = pa_read(fd, buf, 511, NULL);
         if (len < 0) {
@@ -239,22 +375,41 @@ static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_i
         buf[len] = 0;
         pa_log_debug("RFCOMM << %s", buf);
 
-        if (sscanf(buf, "AT+VGS=%d", &gain) == 1) {
-          t->speaker_gain = gain;
-          pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_SPEAKER_GAIN_CHANGED), t);
-        } else if (sscanf(buf, "AT+VGM=%d", &gain) == 1) {
-          t->microphone_gain = gain;
-          pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_MICROPHONE_GAIN_CHANGED), t);
+        /* There are only four HSP AT commands:
+         * AT+VGS=value: value between 0 and 15, sent by the HS to AG to set the speaker gain.
+         * +VGS=value is sent by AG to HS as a response to an AT+VGS command or when the gain
+         * is changed on the AG side.
+         * AT+VGM=value: value between 0 and 15, sent by the HS to AG to set the microphone gain.
+         * +VGM=value is sent by AG to HS as a response to an AT+VGM command or when the gain
+         * is changed on the AG side.
+         * AT+CKPD=200: Sent by HS when headset button is pressed.
+         * RING: Sent by AG to HS to notify of an incoming call. It can safely be ignored because
+         * it does not expect a reply. */
+        if (sscanf(buf, "AT+VGS=%d", &gain) == 1 || sscanf(buf, "\r\n+VGM=%d\r\n", &gain) == 1) {
+            t->speaker_gain = gain;
+            pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_SPEAKER_GAIN_CHANGED), t);
+            do_reply = true;
+
+        } else if (sscanf(buf, "AT+VGM=%d", &gain) == 1 || sscanf(buf, "\r\n+VGS=%d\r\n", &gain) == 1) {
+            t->microphone_gain = gain;
+            pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_MICROPHONE_GAIN_CHANGED), t);
+            do_reply = true;
+        } else if (sscanf(buf, "AT+CKPD=%d", &dummy) == 1) {
+            do_reply = true;
+        } else {
+            do_reply = false;
         }
 
-        pa_log_debug("RFCOMM >> OK");
+        if (do_reply) {
+            pa_log_debug("RFCOMM >> OK");
 
-        len = write(fd, "\r\nOK\r\n", 6);
+            len = write(fd, "\r\nOK\r\n", 6);
 
-        /* we ignore any errors, it's not critical and real errors should
-         * be caught with the HANGUP and ERROR events handled above */
-        if (len < 0)
-            pa_log_error("RFCOMM write error: %s", pa_cstrerror(errno));
+            /* we ignore any errors, it's not critical and real errors should
+             * be caught with the HANGUP and ERROR events handled above */
+            if (len < 0)
+                pa_log_error("RFCOMM write error: %s", pa_cstrerror(errno));
+        }
     }
 
     return;
@@ -265,18 +420,23 @@ fail:
 }
 
 static void transport_destroy(pa_bluetooth_transport *t) {
-    struct transport_rfcomm *trfc = t->userdata;
+    struct transport_data *trd = t->userdata;
 
-    trfc->mainloop->io_free(trfc->rfcomm_io);
+    if (trd->sco_io) {
+        trd->mainloop->io_free(trd->sco_io);
+        shutdown(trd->sco_fd, SHUT_RDWR);
+        close (trd->sco_fd);
+    }
 
-    shutdown(trfc->rfcomm_fd, SHUT_RDWR);
-    close (trfc->rfcomm_fd);
+    trd->mainloop->io_free(trd->rfcomm_io);
+    shutdown(trd->rfcomm_fd, SHUT_RDWR);
+    close (trd->rfcomm_fd);
 
-    pa_xfree(trfc);
+    pa_xfree(trd);
 }
 
 static void set_speaker_gain(pa_bluetooth_transport *t, uint16_t gain) {
-    struct transport_rfcomm *trfc = t->userdata;
+    struct transport_data *trd = t->userdata;
     char buf[512];
     ssize_t len, written;
 
@@ -285,17 +445,25 @@ static void set_speaker_gain(pa_bluetooth_transport *t, uint16_t gain) {
 
     t->speaker_gain = gain;
 
-    len = sprintf(buf, "\r\n+VGS=%d\r\n", gain);
-    pa_log_debug("RFCOMM >> +VGS=%d", gain);
+    /* If we are in the AG role, we send a command to the head set to change
+     * the speaker gain. In the HS role, source and sink are swapped, so
+     * in this case we notify the AG that the microphone gain has changed */
+    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) {
+        len = sprintf(buf, "\r\n+VGS=%d\r\n", gain);
+        pa_log_debug("RFCOMM >> +VGS=%d", gain);
+    } else {
+        len = sprintf(buf, "\r\nAT+VGM=%d\r\n", gain);
+        pa_log_debug("RFCOMM >> AT+VGM=%d", gain);
+    }
 
-    written = write(trfc->rfcomm_fd, buf, len);
+    written = write(trd->rfcomm_fd, buf, len);
 
     if (written != len)
         pa_log_error("RFCOMM write error: %s", pa_cstrerror(errno));
 }
 
 static void set_microphone_gain(pa_bluetooth_transport *t, uint16_t gain) {
-    struct transport_rfcomm *trfc = t->userdata;
+    struct transport_data *trd = t->userdata;
     char buf[512];
     ssize_t len, written;
 
@@ -304,10 +472,18 @@ static void set_microphone_gain(pa_bluetooth_transport *t, uint16_t gain) {
 
     t->microphone_gain = gain;
 
-    len = sprintf(buf, "\r\n+VGM=%d\r\n", gain);
-    pa_log_debug("RFCOMM >> +VGM=%d", gain);
+    /* If we are in the AG role, we send a command to the head set to change
+     * the microphone gain. In the HS role, source and sink are swapped, so
+     * in this case we notify the AG that the speaker gain has changed */
+    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) {
+        len = sprintf(buf, "\r\n+VGM=%d\r\n", gain);
+        pa_log_debug("RFCOMM >> +VGM=%d", gain);
+    } else {
+        len = sprintf(buf, "\r\nAT+VGS=%d\r\n", gain);
+        pa_log_debug("RFCOMM >> AT+VGS=%d", gain);
+    }
 
-    written = write (trfc->rfcomm_fd, buf, len);
+    written = write (trd->rfcomm_fd, buf, len);
 
     if (written != len)
         pa_log_error("RFCOMM write error: %s", pa_cstrerror(errno));
@@ -323,7 +499,7 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
     const char *sender, *path, PA_UNUSED *handler;
     DBusMessageIter arg_i;
     char *pathfd;
-    struct transport_rfcomm *trfc;
+    struct transport_data *trd;
 
     if (!dbus_message_iter_init(m, &arg_i) || !pa_streq(dbus_message_get_signature(m), "oha{sv}")) {
         pa_log_error("Invalid signature found in NewConnection");
@@ -331,7 +507,14 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
     }
 
     handler = dbus_message_get_path(m);
-    pa_assert(pa_streq(handler, HSP_AG_PROFILE));
+    if (pa_streq(handler, HSP_AG_PROFILE)) {
+        p = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT;
+    } else if (pa_streq(handler, HSP_HS_PROFILE)) {
+        p = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY;
+    } else {
+        pa_log_error("Invalid handler");
+        goto fail;
+    }
 
     pa_assert(dbus_message_iter_get_arg_type(&arg_i) == DBUS_TYPE_OBJECT_PATH);
     dbus_message_iter_get_basic(&arg_i, &path);
@@ -347,27 +530,29 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
     pa_assert(dbus_message_iter_get_arg_type(&arg_i) == DBUS_TYPE_UNIX_FD);
     dbus_message_iter_get_basic(&arg_i, &fd);
 
-    pa_log_debug("dbus: NewConnection path=%s, fd=%d", path, fd);
+    pa_log_debug("dbus: NewConnection path=%s, fd=%d, profile %s", path, fd,
+        pa_bluetooth_profile_to_string(p));
 
     sender = dbus_message_get_sender(m);
 
-    p = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT;
     pathfd = pa_sprintf_malloc ("%s/fd%d", path, fd);
     t = pa_bluetooth_transport_new(d, sender, pathfd, p, NULL, 0);
     pa_xfree(pathfd);
 
-    t->acquire = bluez5_sco_acquire_cb;
-    t->release = bluez5_sco_release_cb;
+    t->acquire = sco_acquire_cb;
+    t->release = sco_release_cb;
     t->destroy = transport_destroy;
     t->set_speaker_gain = set_speaker_gain;
     t->set_microphone_gain = set_microphone_gain;
 
-    trfc = pa_xnew0(struct transport_rfcomm, 1);
-    trfc->rfcomm_fd = fd;
-    trfc->mainloop = b->core->mainloop;
-    trfc->rfcomm_io = trfc->mainloop->io_new(b->core->mainloop, fd, PA_IO_EVENT_INPUT|PA_IO_EVENT_HANGUP,
+    trd = pa_xnew0(struct transport_data, 1);
+    trd->rfcomm_fd = fd;
+    trd->mainloop = b->core->mainloop;
+    trd->rfcomm_io = trd->mainloop->io_new(b->core->mainloop, fd, PA_IO_EVENT_INPUT,
         rfcomm_io_callback, t);
-    t->userdata =  trfc;
+    t->userdata =  trd;
+
+    sco_listen(t);
 
     pa_bluetooth_transport_put(t);
 
@@ -403,7 +588,7 @@ static DBusHandlerResult profile_handler(DBusConnection *c, DBusMessage *m, void
 
     pa_log_debug("dbus: path=%s, interface=%s, member=%s", path, interface, member);
 
-    if (!pa_streq(path, HSP_AG_PROFILE))
+    if (!pa_streq(path, HSP_AG_PROFILE) && !pa_streq(path, HSP_HS_PROFILE))
         return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 
     if (dbus_message_is_method_call(m, "org.freedesktop.DBus.Introspectable", "Introspect")) {
@@ -413,6 +598,8 @@ static DBusHandlerResult profile_handler(DBusConnection *c, DBusMessage *m, void
         pa_assert_se(dbus_message_append_args(r, DBUS_TYPE_STRING, &xml, DBUS_TYPE_INVALID));
 
     } else if (dbus_message_is_method_call(m, BLUEZ_PROFILE_INTERFACE, "Release")) {
+        pa_log_debug("Release not handled");
+        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
     } else if (dbus_message_is_method_call(m, BLUEZ_PROFILE_INTERFACE, "RequestDisconnection")) {
         r = profile_request_disconnection(c, m, userdata);
     } else if (dbus_message_is_method_call(m, BLUEZ_PROFILE_INTERFACE, "NewConnection"))
@@ -442,6 +629,10 @@ static void profile_init(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
             object_name = HSP_AG_PROFILE;
             uuid = PA_BLUETOOTH_UUID_HSP_AG;
             break;
+        case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
+            object_name = HSP_HS_PROFILE;
+            uuid = PA_BLUETOOTH_UUID_HSP_HS;
+            break;
         default:
             pa_assert_not_reached();
             break;
@@ -458,13 +649,29 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
         case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
             dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_AG_PROFILE);
             break;
+        case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
+            dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_HS_PROFILE);
+            break;
         default:
             pa_assert_not_reached();
             break;
     }
 }
 
-pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
+void pa_bluetooth_native_backend_enable_hs_role(pa_bluetooth_backend *native_backend, bool enable_hs_role) {
+
+   if (enable_hs_role == native_backend->enable_hs_role)
+       return;
+
+   if (enable_hs_role)
+       profile_init(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
+   else
+       profile_done(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
+
+   native_backend->enable_hs_role = enable_hs_role;
+}
+
+pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y, bool enable_hs_role) {
     pa_bluetooth_backend *backend;
     DBusError err;
 
@@ -482,7 +689,10 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d
     }
 
     backend->discovery = y;
+    backend->enable_hs_role = enable_hs_role;
 
+    if (enable_hs_role)
+       profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
     profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
 
     return backend;
@@ -493,6 +703,8 @@ void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) {
 
     pa_dbus_free_pending_list(&backend->pending);
 
+    if (backend->enable_hs_role)
+       profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY);
     profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
 
     pa_dbus_connection_unref(backend->connection);
diff --git a/src/modules/bluetooth/backend-ofono.c b/src/modules/bluetooth/backend-ofono.c
index 755df9e..2c51497 100644
--- a/src/modules/bluetooth/backend-ofono.c
+++ b/src/modules/bluetooth/backend-ofono.c
@@ -65,6 +65,7 @@ struct hf_audio_card {
     char *remote_address;
     char *local_address;
 
+    bool connecting;
     int fd;
     uint8_t codec;
 
@@ -155,13 +156,29 @@ static int hf_audio_agent_transport_acquire(pa_bluetooth_transport *t, bool opti
 
     pa_assert(card);
 
-    if (!optional) {
-        DBusMessage *m;
+    if (!optional && card->fd < 0) {
+        DBusMessage *m, *r;
+        DBusError derr;
 
+        if (card->connecting)
+            return -EAGAIN;
+
+        card->connecting = true;
+
+        dbus_error_init(&derr);
         pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.ofono.HandsfreeAudioCard", "Connect"));
-        pa_assert_se(dbus_connection_send(pa_dbus_connection_get(card->backend->connection), m, NULL));
+        r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(card->backend->connection), m, -1, &derr);
+        dbus_message_unref(m);
+        m = NULL;
 
-        return -1;
+        if (!r)
+            return -1;
+
+        dbus_message_unref(r);
+        r = NULL;
+
+        if (card->connecting)
+            return -EAGAIN;
     }
 
     /* The correct block size should take into account the SCO MTU from
@@ -190,14 +207,11 @@ static void hf_audio_agent_transport_release(pa_bluetooth_transport *t) {
 
     pa_assert(card);
 
-    if (t->state <= PA_BLUETOOTH_TRANSPORT_STATE_IDLE) {
+    if (card->fd < 0) {
         pa_log_info("Transport %s already released", t->path);
         return;
     }
 
-    if (card->fd < 0)
-        return;
-
     /* shutdown to make sure connection is dropped immediately */
     shutdown(card->fd, SHUT_RDWR);
     close(card->fd);
@@ -209,6 +223,7 @@ static void hf_audio_agent_card_found(pa_bluetooth_backend *backend, const char
     const char *key, *value;
     struct hf_audio_card *card;
     pa_bluetooth_device *d;
+    pa_bluetooth_profile_t p = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY;
 
     pa_assert(backend);
     pa_assert(path);
@@ -240,6 +255,9 @@ static void hf_audio_agent_card_found(pa_bluetooth_backend *backend, const char
         } else if (pa_streq(key, "LocalAddress")) {
             pa_xfree(card->local_address);
             card->local_address = pa_xstrdup(value);
+        } else if (pa_streq(key, "Type")) {
+            if (pa_streq(value, "gateway"))
+                p = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT;
         }
 
         pa_log_debug("%s: %s", key, value);
@@ -253,7 +271,7 @@ static void hf_audio_agent_card_found(pa_bluetooth_backend *backend, const char
         goto fail;
     }
 
-    card->transport = pa_bluetooth_transport_new(d, backend->ofono_bus_id, path, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY, NULL, 0);
+    card->transport = pa_bluetooth_transport_new(d, backend->ofono_bus_id, path, p, NULL, 0);
     card->transport->acquire = hf_audio_agent_transport_acquire;
     card->transport->release = hf_audio_agent_transport_release;
     card->transport->userdata = card;
@@ -529,9 +547,13 @@ static DBusMessage *hf_audio_agent_new_connection(DBusConnection *c, DBusMessage
 
     card = pa_hashmap_get(backend->cards, path);
 
-    if (!card || codec != HFP_AUDIO_CODEC_CVSD || card->transport->state == PA_BLUETOOTH_TRANSPORT_STATE_PLAYING) {
+    card->connecting = false;
+
+    if (!card || codec != HFP_AUDIO_CODEC_CVSD || card->fd >= 0) {
         pa_log_warn("New audio connection invalid arguments (path=%s fd=%d, codec=%d)", path, fd, codec);
         pa_assert_se(r = dbus_message_new_error(m, "org.ofono.Error.InvalidArguments", "Invalid arguments in method call"));
+        shutdown(fd, SHUT_RDWR);
+        close(fd);
         return r;
     }
 
diff --git a/src/modules/bluetooth/bluez4-util.c b/src/modules/bluetooth/bluez4-util.c
index 542ce35..ca60619 100644
--- a/src/modules/bluetooth/bluez4-util.c
+++ b/src/modules/bluetooth/bluez4-util.c
@@ -792,7 +792,7 @@ static void register_endpoint(pa_bluez4_discovery *y, const char *path, const ch
 
     dbus_message_iter_init_append(m, &i);
 
-    dbus_message_iter_append_basic(&i, DBUS_TYPE_OBJECT_PATH, &endpoint);
+    pa_assert_se(dbus_message_iter_append_basic(&i, DBUS_TYPE_OBJECT_PATH, &endpoint));
 
     dbus_message_iter_open_container(&i, DBUS_TYPE_ARRAY, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
                                     DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
@@ -1116,6 +1116,8 @@ int pa_bluez4_transport_acquire(pa_bluez4_transport *t, bool optional, size_t *i
     pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport", "Acquire"));
     pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
     r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
+    dbus_message_unref(m);
+    m = NULL;
 
     if (!r) {
         dbus_error_free(&err);
@@ -1143,7 +1145,7 @@ fail:
 
 void pa_bluez4_transport_release(pa_bluez4_transport *t) {
     const char *accesstype = "rw";
-    DBusMessage *m;
+    DBusMessage *m, *r;
     DBusError err;
 
     pa_assert(t);
@@ -1154,7 +1156,13 @@ void pa_bluez4_transport_release(pa_bluez4_transport *t) {
 
     pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport", "Release"));
     pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID));
-    dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
+    r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
+    dbus_message_unref(m);
+    m = NULL;
+    if (r) {
+        dbus_message_unref(r);
+        r = NULL;
+    }
 
     if (dbus_error_is_set(&err)) {
         pa_log("Failed to release transport %s: %s", t->path, err.message);
@@ -1175,7 +1183,7 @@ static void set_property(pa_bluez4_discovery *y, const char *bus, const char *pa
 
     pa_assert_se(m = dbus_message_new_method_call(bus, path, interface, "SetProperty"));
     dbus_message_iter_init_append(m, &i);
-    dbus_message_iter_append_basic(&i, DBUS_TYPE_STRING, &prop_name);
+    pa_assert_se(dbus_message_iter_append_basic(&i, DBUS_TYPE_STRING, &prop_name));
     pa_dbus_append_basic_variant(&i, prop_type, prop_value);
 
     dbus_message_set_no_reply(m, true);
@@ -1841,34 +1849,3 @@ const char *pa_bluez4_form_factor_to_string(pa_bluez4_form_factor_t ff) {
 
     pa_assert_not_reached();
 }
-
-char *pa_bluez4_cleanup_name(const char *name) {
-    char *t, *s, *d;
-    bool space = false;
-
-    pa_assert(name);
-
-    while ((*name >= 1 && *name <= 32) || *name >= 127)
-        name++;
-
-    t = pa_xstrdup(name);
-
-    for (s = d = t; *s; s++) {
-
-        if (*s <= 32 || *s >= 127 || *s == '_') {
-            space = true;
-            continue;
-        }
-
-        if (space) {
-            *(d++) = ' ';
-            space = false;
-        }
-
-        *(d++) = *s;
-    }
-
-    *d = 0;
-
-    return t;
-}
diff --git a/src/modules/bluetooth/bluez4-util.h b/src/modules/bluetooth/bluez4-util.h
index ed588f1..f4b5ca3 100644
--- a/src/modules/bluetooth/bluez4-util.h
+++ b/src/modules/bluetooth/bluez4-util.h
@@ -155,8 +155,6 @@ typedef enum pa_bluez4_form_factor {
 pa_bluez4_form_factor_t pa_bluez4_get_form_factor(uint32_t class);
 const char *pa_bluez4_form_factor_to_string(pa_bluez4_form_factor_t ff);
 
-char *pa_bluez4_cleanup_name(const char *name);
-
 const char *pa_bluez4_profile_to_string(pa_bluez4_profile_t profile);
 
 #endif
diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c
index 7d63f35..c928323 100644
--- a/src/modules/bluetooth/bluez5-util.c
+++ b/src/modules/bluetooth/bluez5-util.c
@@ -259,6 +259,9 @@ static void device_start_waiting_for_profiles(pa_bluetooth_device *device) {
 
 void pa_bluetooth_transport_set_state(pa_bluetooth_transport *t, pa_bluetooth_transport_state_t state) {
     bool old_any_connected;
+    unsigned n_disconnected_profiles;
+    bool new_device_appeared;
+    bool device_disconnected;
 
     pa_assert(t);
 
@@ -274,26 +277,44 @@ void pa_bluetooth_transport_set_state(pa_bluetooth_transport *t, pa_bluetooth_tr
 
     pa_hook_fire(&t->device->discovery->hooks[PA_BLUETOOTH_HOOK_TRANSPORT_STATE_CHANGED], t);
 
-    if (old_any_connected != pa_bluetooth_device_any_transport_connected(t->device)) {
-        unsigned n_disconnected_profiles;
+    /* If there are profiles that are expected to get connected soon (based
+     * on the UUID list), we wait for a bit before announcing the new
+     * device, so that all profiles have time to get connected before the
+     * card object is created. If we didn't wait, the card would always
+     * have only one profile marked as available in the initial state,
+     * which would prevent module-card-restore from restoring the initial
+     * profile properly. */
 
-        /* If there are profiles that are expected to get connected soon (based
-         * on the UUID list), we wait for a bit before announcing the new
-         * device, so that all profiles have time to get connected before the
-         * card object is created. If we didn't wait, the card would always
-         * have only one profile marked as available in the initial state,
-         * which would prevent module-card-restore from restoring the initial
-         * profile properly. */
+    n_disconnected_profiles = device_count_disconnected_profiles(t->device);
 
-        n_disconnected_profiles = device_count_disconnected_profiles(t->device);
+    new_device_appeared = !old_any_connected && pa_bluetooth_device_any_transport_connected(t->device);
+    device_disconnected = old_any_connected && !pa_bluetooth_device_any_transport_connected(t->device);
 
-        if (n_disconnected_profiles == 0)
-            device_stop_waiting_for_profiles(t->device);
-
-        if (!old_any_connected && n_disconnected_profiles > 0)
+    if (new_device_appeared) {
+        if (n_disconnected_profiles > 0)
             device_start_waiting_for_profiles(t->device);
         else
             pa_hook_fire(&t->device->discovery->hooks[PA_BLUETOOTH_HOOK_DEVICE_CONNECTION_CHANGED], t->device);
+        return;
+    }
+
+    if (device_disconnected) {
+        if (t->device->wait_for_profiles_timer) {
+            /* If the timer is still running when the device disconnects, we
+             * never sent the notification of the device getting connected, so
+             * we don't need to send a notification about the disconnection
+             * either. Let's just stop the timer. */
+            device_stop_waiting_for_profiles(t->device);
+        } else
+            pa_hook_fire(&t->device->discovery->hooks[PA_BLUETOOTH_HOOK_DEVICE_CONNECTION_CHANGED], t->device);
+        return;
+    }
+
+    if (n_disconnected_profiles == 0 && t->device->wait_for_profiles_timer) {
+        /* All profiles are now connected, so we can stop the wait timer and
+         * send a notification of the new device. */
+        device_stop_waiting_for_profiles(t->device);
+        pa_hook_fire(&t->device->discovery->hooks[PA_BLUETOOTH_HOOK_DEVICE_CONNECTION_CHANGED], t->device);
     }
 }
 
@@ -342,6 +363,8 @@ static int bluez5_transport_acquire_cb(pa_bluetooth_transport *t, bool optional,
     dbus_error_init(&err);
 
     r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
+    dbus_message_unref(m);
+    m = NULL;
     if (!r) {
         if (optional && pa_streq(err.name, "org.bluez.Error.NotAvailable"))
             pa_log_info("Failed optional acquire of unavailable transport %s", t->path);
@@ -372,7 +395,7 @@ finish:
 }
 
 static void bluez5_transport_release_cb(pa_bluetooth_transport *t) {
-    DBusMessage *m;
+    DBusMessage *m, *r;
     DBusError err;
 
     pa_assert(t);
@@ -387,7 +410,13 @@ static void bluez5_transport_release_cb(pa_bluetooth_transport *t) {
     }
 
     pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, BLUEZ_MEDIA_TRANSPORT_INTERFACE, "Release"));
-    dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
+    r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(t->device->discovery->connection), m, -1, &err);
+    dbus_message_unref(m);
+    m = NULL;
+    if (r) {
+        dbus_message_unref(r);
+        r = NULL;
+    }
 
     if (dbus_error_is_set(&err)) {
         pa_log_error("Failed to release transport %s: %s", t->path, err.message);
@@ -865,7 +894,7 @@ static void register_endpoint(pa_bluetooth_discovery *y, const char *path, const
     pa_assert_se(m = dbus_message_new_method_call(BLUEZ_SERVICE, path, BLUEZ_MEDIA_INTERFACE, "RegisterEndpoint"));
 
     dbus_message_iter_init_append(m, &i);
-    dbus_message_iter_append_basic(&i, DBUS_TYPE_OBJECT_PATH, &endpoint);
+    pa_assert_se(dbus_message_iter_append_basic(&i, DBUS_TYPE_OBJECT_PATH, &endpoint));
     dbus_message_iter_open_container(&i, DBUS_TYPE_ARRAY, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING
                                          DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &d);
     pa_dbus_append_basic_variant_dict_entry(&d, "UUID", DBUS_TYPE_STRING, &uuid);
@@ -982,12 +1011,25 @@ void pa_bluetooth_discovery_set_ofono_running(pa_bluetooth_discovery *y, bool is
     if (y->headset_backend != HEADSET_BACKEND_AUTO)
         return;
 
-    if (is_running && y->native_backend) {
-        pa_bluetooth_native_backend_free(y->native_backend);
-        y->native_backend = NULL;
+    /* If ofono starts running, all devices that might be connected to the HS role
+     * need to be disconnected, so that the devices can be handled by ofono */
+    if (is_running) {
+        void *state;
+        pa_bluetooth_device *d;
+
+        PA_HASHMAP_FOREACH(d, y->devices, state) {
+            if (device_supports_profile(d, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)) {
+                DBusMessage *m;
+
+                pa_assert_se(m = dbus_message_new_method_call(BLUEZ_SERVICE, d->path, "org.bluez.Device1", "Disconnect"));
+                dbus_message_set_no_reply(m, true);
+                dbus_connection_send(pa_dbus_connection_get(y->connection), m, NULL);
+                dbus_message_unref(m);
+            }
+        }
     }
-    else if (!is_running && !y->native_backend)
-        y->native_backend = pa_bluetooth_native_backend_new(y->core, y);
+
+    pa_bluetooth_native_backend_enable_hs_role(y->native_backend, !is_running);
 }
 
 static void get_managed_objects_reply(DBusPendingCall *pending, void *userdata) {
@@ -1028,10 +1070,10 @@ static void get_managed_objects_reply(DBusPendingCall *pending, void *userdata)
 
     y->objects_listed = true;
 
+    if (!y->native_backend && y->headset_backend != HEADSET_BACKEND_OFONO)
+        y->native_backend = pa_bluetooth_native_backend_new(y->core, y, (y->headset_backend == HEADSET_BACKEND_NATIVE));
     if (!y->ofono_backend && y->headset_backend != HEADSET_BACKEND_NATIVE)
         y->ofono_backend = pa_bluetooth_ofono_backend_new(y->core, y);
-    if (!y->ofono_backend && !y->native_backend && y->headset_backend != HEADSET_BACKEND_OFONO)
-        y->native_backend = pa_bluetooth_native_backend_new(y->core, y);
 
 finish:
     dbus_message_unref(r);
@@ -1773,6 +1815,11 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) {
 
     pa_dbus_free_pending_list(&y->pending);
 
+    if (y->ofono_backend)
+        pa_bluetooth_ofono_backend_free(y->ofono_backend);
+    if (y->native_backend)
+        pa_bluetooth_native_backend_free(y->native_backend);
+
     if (y->adapters)
         pa_hashmap_free(y->adapters);
 
@@ -1784,11 +1831,6 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) {
         pa_hashmap_free(y->transports);
     }
 
-    if (y->ofono_backend)
-        pa_bluetooth_ofono_backend_free(y->ofono_backend);
-    if (y->native_backend)
-        pa_bluetooth_native_backend_free(y->native_backend);
-
     if (y->connection) {
 
         if (y->matches_added)
diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h
index 7f124e2..a3e7bf3 100644
--- a/src/modules/bluetooth/bluez5-util.h
+++ b/src/modules/bluetooth/bluez5-util.h
@@ -95,6 +95,7 @@ struct pa_bluetooth_device {
     bool properties_received;
     bool tried_to_link_with_adapter;
     bool valid;
+    bool autodetect_mtu;
 
     /* Device information */
     char *path;
@@ -128,13 +129,15 @@ static inline void pa_bluetooth_ofono_backend_free(pa_bluetooth_backend *b) {}
 #endif
 
 #ifdef HAVE_BLUEZ_5_NATIVE_HEADSET
-pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y);
+pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y, bool enable_hs_role);
 void pa_bluetooth_native_backend_free(pa_bluetooth_backend *b);
+void pa_bluetooth_native_backend_enable_hs_role(pa_bluetooth_backend *b, bool enable_hs_role);
 #else
-static inline pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
+static inline pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y, bool enable_hs_role) {
     return NULL;
 }
 static inline void pa_bluetooth_native_backend_free(pa_bluetooth_backend *b) {}
+static inline void pa_bluetooth_native_backend_enable_hs_role(pa_bluetooth_backend *b, bool enable_hs_role) {}
 #endif
 
 pa_bluetooth_transport *pa_bluetooth_transport_new(pa_bluetooth_device *d, const char *owner, const char *path,
diff --git a/src/modules/bluetooth/module-bluetooth-discover.c b/src/modules/bluetooth/module-bluetooth-discover.c
index fe8aec9..d69a77f 100644
--- a/src/modules/bluetooth/module-bluetooth-discover.c
+++ b/src/modules/bluetooth/module-bluetooth-discover.c
@@ -33,6 +33,7 @@ PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_LOAD_ONCE(true);
 PA_MODULE_USAGE(
     "headset=ofono|native|auto (bluez 5 only)"
+    "autodetect_mtu=<boolean> (bluez 5 only)"
 );
 
 struct userdata {
diff --git a/src/modules/bluetooth/module-bluetooth-policy.c b/src/modules/bluetooth/module-bluetooth-policy.c
index df702cc..316b9a8 100644
--- a/src/modules/bluetooth/module-bluetooth-policy.c
+++ b/src/modules/bluetooth/module-bluetooth-policy.c
@@ -38,7 +38,7 @@ PA_MODULE_DESCRIPTION("Policy module to make using bluetooth devices out-of-the-
 PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_LOAD_ONCE(true);
 PA_MODULE_USAGE(
-        "auto_switch=<Switch between hsp and a2dp profile?> "
+        "auto_switch=<Switch between hsp and a2dp profile? (0 - never, 1 - media.role=phone, 2 - heuristic> "
         "a2dp_source=<Handle a2dp_source card profile (sink role)?> "
         "ag=<Handle headset_audio_gateway card profile (headset role)?> "
         "hfgw=<Handle hfgw card profile (headset role)?> DEPRECATED");
@@ -52,6 +52,7 @@ static const char* const valid_modargs[] = {
 };
 
 struct userdata {
+    uint32_t auto_switch;
     bool enable_a2dp_source;
     bool enable_ag;
     pa_hook_slot *source_put_slot;
@@ -214,7 +215,8 @@ static void switch_profile(pa_card *card, bool revert_to_a2dp, void *userdata) {
 }
 
 /* Return true if we should ignore this source output */
-static bool ignore_output(pa_source_output *source_output) {
+static bool ignore_output(pa_source_output *source_output, void *userdata) {
+    struct userdata *u = userdata;
     const char *s;
 
     /* New applications could set media.role for identifying streams */
@@ -223,16 +225,32 @@ static bool ignore_output(pa_source_output *source_output) {
     if (s)
         return !pa_streq(s, "phone");
 
-    return true;
+    /* If media.role is not set use some heuristic (if enabled) */
+    if (u->auto_switch != 2)
+        return true;
+
+    /* Ignore if resample method is peaks (used by desktop volume programs) */
+    if (pa_source_output_get_resample_method(source_output) == PA_RESAMPLER_PEAKS)
+        return true;
+
+    /* Ignore if there is no client/application assigned (used by virtual stream) */
+    if (!source_output->client)
+        return true;
+
+    /* Ignore if recording from monitor of sink */
+    if (source_output->direct_on_input)
+        return true;
+
+    return false;
 }
 
-static unsigned source_output_count(pa_core *c) {
+static unsigned source_output_count(pa_core *c, void *userdata) {
     pa_source_output *source_output;
     uint32_t idx;
     unsigned count = 0;
 
     PA_IDXSET_FOREACH(source_output, c->source_outputs, idx)
-        if (!ignore_output(source_output))
+        if (!ignore_output(source_output, userdata))
             ++count;
 
     return count;
@@ -252,7 +270,7 @@ static pa_hook_result_t source_output_put_hook_callback(pa_core *c, pa_source_ou
     pa_assert(c);
     pa_assert(source_output);
 
-    if (ignore_output(source_output))
+    if (ignore_output(source_output, userdata))
         return PA_HOOK_OK;
 
     switch_profile_all(c->cards, false, userdata);
@@ -264,11 +282,11 @@ static pa_hook_result_t source_output_unlink_hook_callback(pa_core *c, pa_source
     pa_assert(c);
     pa_assert(source_output);
 
-    if (ignore_output(source_output))
+    if (ignore_output(source_output, userdata))
         return PA_HOOK_OK;
 
     /* If there are still some source outputs do nothing. */
-    if (source_output_count(c) > 0)
+    if (source_output_count(c, userdata) > 0)
         return PA_HOOK_OK;
 
     switch_profile_all(c->cards, true, userdata);
@@ -282,7 +300,7 @@ static pa_hook_result_t card_init_profile_hook_callback(pa_core *c, pa_card *car
     pa_assert(c);
     pa_assert(card);
 
-    if (source_output_count(c) == 0)
+    if (source_output_count(c, userdata) == 0)
         return PA_HOOK_OK;
 
     /* Only consider bluetooth cards */
@@ -394,7 +412,6 @@ static void handle_all_profiles(pa_core *core) {
 int pa__init(pa_module *m) {
     pa_modargs *ma;
     struct userdata *u;
-    bool auto_switch;
 
     pa_assert(m);
 
@@ -405,10 +422,23 @@ int pa__init(pa_module *m) {
 
     m->userdata = u = pa_xnew0(struct userdata, 1);
 
-    auto_switch = true;
-    if (pa_modargs_get_value_boolean(ma, "auto_switch", &auto_switch) < 0) {
-        pa_log("Failed to parse auto_switch argument.");
-        goto fail;
+    u->auto_switch = 1;
+
+    if (pa_modargs_get_value(ma, "auto_switch", NULL)) {
+        bool auto_switch_bool;
+
+        /* auto_switch originally took a boolean value, let's keep
+         * compatibility with configuration files that still pass a boolean. */
+        if (pa_modargs_get_value_boolean(ma, "auto_switch", &auto_switch_bool) >= 0) {
+            if (auto_switch_bool)
+                u->auto_switch = 1;
+            else
+                u->auto_switch = 0;
+
+        } else if (pa_modargs_get_value_u32(ma, "auto_switch", &u->auto_switch) < 0) {
+            pa_log("Failed to parse auto_switch argument.");
+            goto fail;
+        }
     }
 
     u->enable_a2dp_source = true;
@@ -435,7 +465,7 @@ int pa__init(pa_module *m) {
     u->sink_put_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_NORMAL,
                                        (pa_hook_cb_t) sink_put_hook_callback, u);
 
-    if (auto_switch) {
+    if (u->auto_switch) {
         u->source_output_put_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_PUT], PA_HOOK_NORMAL,
                                                     (pa_hook_cb_t) source_output_put_hook_callback, u);
 
diff --git a/src/modules/bluetooth/module-bluez4-device.c b/src/modules/bluetooth/module-bluez4-device.c
index ac4ed63..b3f7790 100644
--- a/src/modules/bluetooth/module-bluez4-device.c
+++ b/src/modules/bluetooth/module-bluez4-device.c
@@ -31,6 +31,7 @@
 #include <pulse/rtclock.h>
 #include <pulse/sample.h>
 #include <pulse/timeval.h>
+#include <pulse/utf8.h>
 #include <pulse/xmalloc.h>
 
 #include <pulsecore/i18n.h>
@@ -430,22 +431,22 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
         case PA_SINK_MESSAGE_GET_LATENCY: {
 
             if (u->read_smoother) {
-                pa_usec_t wi, ri;
+                int64_t wi, ri;
 
                 ri = pa_smoother_get(u->read_smoother, pa_rtclock_now());
                 wi = pa_bytes_to_usec(u->write_index + u->write_block_size, &u->sample_spec);
 
-                *((pa_usec_t*) data) = wi > ri ? wi - ri : 0;
+                *((int64_t*) data) = wi - ri;
             } else {
-                pa_usec_t ri, wi;
+                int64_t ri, wi;
 
                 ri = pa_rtclock_now() - u->started_at;
                 wi = pa_bytes_to_usec(u->write_index, &u->sample_spec);
 
-                *((pa_usec_t*) data) = wi > ri ? wi - ri : 0;
+                *((int64_t*) data) = wi - ri;
             }
 
-            *((pa_usec_t*) data) += u->sink->thread_info.fixed_latency;
+            *((int64_t*) data) += u->sink->thread_info.fixed_latency;
             return 0;
         }
     }
@@ -507,15 +508,15 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
             break;
 
         case PA_SOURCE_MESSAGE_GET_LATENCY: {
-            pa_usec_t wi, ri;
+            int64_t wi, ri;
 
             if (u->read_smoother) {
                 wi = pa_smoother_get(u->read_smoother, pa_rtclock_now());
                 ri = pa_bytes_to_usec(u->read_index, &u->sample_spec);
 
-                *((pa_usec_t*) data) = (wi > ri ? wi - ri : 0) + u->source->thread_info.fixed_latency;
+                *((int64_t*) data) = wi - ri + u->source->thread_info.fixed_latency;
             } else
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
 
             return 0;
         }
@@ -2280,7 +2281,7 @@ static int add_card(struct userdata *u) {
     data.driver = __FILE__;
     data.module = u->module;
 
-    n = pa_bluez4_cleanup_name(device->alias);
+    n = pa_utf8_filter(device->alias);
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_DESCRIPTION, n);
     pa_xfree(n);
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, device->address);
diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
index 065fcaa..12a4984 100644
--- a/src/modules/bluetooth/module-bluez5-device.c
+++ b/src/modules/bluetooth/module-bluez5-device.c
@@ -29,6 +29,7 @@
 
 #include <pulse/rtclock.h>
 #include <pulse/timeval.h>
+#include <pulse/utf8.h>
 
 #include <pulsecore/core-error.h>
 #include <pulsecore/core-rtclock.h>
@@ -54,7 +55,8 @@ PA_MODULE_AUTHOR("João Paulo Rechi Vita");
 PA_MODULE_DESCRIPTION("BlueZ 5 Bluetooth audio sink and source");
 PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_LOAD_ONCE(false);
-PA_MODULE_USAGE("path=<device object path>");
+PA_MODULE_USAGE("path=<device object path>"
+                "autodetect_mtu=<boolean>");
 
 #define MAX_PLAYBACK_CATCH_UP_USEC (100 * PA_USEC_PER_MSEC)
 #define FIXED_LATENCY_PLAYBACK_A2DP (25 * PA_USEC_PER_MSEC)
@@ -68,6 +70,7 @@ PA_MODULE_USAGE("path=<device object path>");
 
 static const char* const valid_modargs[] = {
     "path",
+    "autodetect_mtu",
     NULL
 };
 
@@ -77,6 +80,14 @@ enum {
     BLUETOOTH_MESSAGE_MAX
 };
 
+enum {
+    PA_SOURCE_MESSAGE_SETUP_STREAM = PA_SOURCE_MESSAGE_MAX,
+};
+
+enum {
+    PA_SINK_MESSAGE_SETUP_STREAM = PA_SINK_MESSAGE_MAX,
+};
+
 typedef struct bluetooth_msg {
     pa_msgobject parent;
     pa_card *card;
@@ -109,6 +120,7 @@ struct userdata {
     pa_bluetooth_device *device;
     pa_bluetooth_transport *transport;
     bool transport_acquired;
+    bool stream_setup_done;
 
     pa_card *card;
     pa_sink *sink;
@@ -728,6 +740,7 @@ static void teardown_stream(struct userdata *u) {
     }
 
     pa_log_debug("Audio stream torn down");
+    u->stream_setup_done = false;
 }
 
 static int transport_acquire(struct userdata *u, bool optional) {
@@ -740,7 +753,7 @@ static int transport_acquire(struct userdata *u, bool optional) {
 
     u->stream_fd = u->transport->acquire(u->transport, optional, &u->read_link_mtu, &u->write_link_mtu);
     if (u->stream_fd < 0)
-        return -1;
+        return u->stream_fd;
 
     u->transport_acquired = true;
     pa_log_info("Transport %s acquired: fd %d", u->transport->path, u->stream_fd);
@@ -762,6 +775,11 @@ static void transport_release(struct userdata *u) {
     u->transport_acquired = false;
 
     teardown_stream(u);
+
+    /* Set transport state to idle if this was not already done by the remote end closing
+     * the file descriptor. Only do this when called from the I/O thread */
+    if (pa_thread_mq_get() != NULL && u->transport->state == PA_BLUETOOTH_TRANSPORT_STATE_PLAYING)
+        pa_asyncmsgq_post(pa_thread_mq_get()->outq, PA_MSGOBJECT(u->msg), BLUETOOTH_MESSAGE_STREAM_FD_HUP, NULL, 0, NULL, NULL);
 }
 
 /* Run from I/O thread */
@@ -799,6 +817,10 @@ static void setup_stream(struct userdata *u) {
     struct pollfd *pollfd;
     int one;
 
+    /* return if stream is already set up */
+    if (u->stream_setup_done)
+        return;
+
     pa_log_info("Transport %s resuming", u->transport->path);
 
     transport_config_mtu(u);
@@ -822,11 +844,26 @@ static void setup_stream(struct userdata *u) {
 
     u->read_index = u->write_index = 0;
     u->started_at = 0;
+    u->stream_setup_done = true;
 
     if (u->source)
         u->read_smoother = pa_smoother_new(PA_USEC_PER_SEC, 2*PA_USEC_PER_SEC, true, true, 10, pa_rtclock_now(), true);
 }
 
+/* Called from I/O thread, returns true if the transport was acquired or
+ * a connection was requested successfully. */
+static bool setup_transport_and_stream(struct userdata *u) {
+    int transport_error;
+
+    transport_error = transport_acquire(u, false);
+    if (transport_error < 0) {
+        if (transport_error != -EAGAIN)
+            return false;
+    } else
+        setup_stream(u);
+    return true;
+}
+
 /* Run from IO thread */
 static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
     struct userdata *u = PA_SOURCE(o)->userdata;
@@ -862,12 +899,8 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
                         break;
 
                     /* Resume the device if the sink was suspended as well */
-                    if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
-                        if (transport_acquire(u, false) < 0)
-                            failed = true;
-                        else
-                            setup_stream(u);
-                    }
+                    if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state))
+                        failed = !setup_transport_and_stream(u);
 
                     /* We don't resume the smoother here. Instead we
                      * wait until the first packet arrives */
@@ -883,19 +916,23 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
             break;
 
         case PA_SOURCE_MESSAGE_GET_LATENCY: {
-            pa_usec_t wi, ri;
+            int64_t wi, ri;
 
             if (u->read_smoother) {
                 wi = pa_smoother_get(u->read_smoother, pa_rtclock_now());
                 ri = pa_bytes_to_usec(u->read_index, &u->sample_spec);
 
-                *((pa_usec_t*) data) = FIXED_LATENCY_RECORD_A2DP + wi > ri ? FIXED_LATENCY_RECORD_A2DP + wi - ri : 0;
+                *((int64_t*) data) = u->source->thread_info.fixed_latency + wi - ri;
             } else
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
 
             return 0;
         }
 
+        case PA_SOURCE_MESSAGE_SETUP_STREAM:
+            setup_stream(u);
+            return 0;
+
     }
 
     r = pa_source_process_msg(o, code, data, offset, chunk);
@@ -916,7 +953,6 @@ static void source_set_volume_cb(pa_source *s) {
 
     pa_assert(u);
     pa_assert(u->source == s);
-    pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
 
     if (u->transport->set_microphone_gain == NULL)
       return;
@@ -934,6 +970,13 @@ static void source_set_volume_cb(pa_source *s) {
 
     pa_cvolume_set(&s->real_volume, u->sample_spec.channels, volume);
 
+    /* Set soft volume when in headset role */
+    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
+        pa_cvolume_set(&s->soft_volume, u->sample_spec.channels, volume);
+
+    /* If we are in the AG role, we send a command to the head set to change
+     * the microphone gain. In the HS role, source and sink are swapped, so
+     * in this case we notify the AG that the speaker gain has changed */
     u->transport->set_microphone_gain(u->transport, gain);
 }
 
@@ -962,8 +1005,15 @@ static int add_source(struct userdata *u) {
             case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
                 data.suspend_cause = PA_SUSPEND_USER;
                 break;
-            case PA_BLUETOOTH_PROFILE_A2DP_SINK:
             case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
+                /* u->stream_fd contains the error returned by the last transport_acquire()
+                 * EAGAIN means we are waiting for a NewConnection signal */
+                if (u->stream_fd == -EAGAIN)
+                    data.suspend_cause = PA_SUSPEND_USER;
+                else
+                    pa_assert_not_reached();
+                break;
+            case PA_BLUETOOTH_PROFILE_A2DP_SINK:
             case PA_BLUETOOTH_PROFILE_OFF:
                 pa_assert_not_reached();
                 break;
@@ -979,7 +1029,7 @@ static int add_source(struct userdata *u) {
     u->source->userdata = u;
     u->source->parent.process_msg = source_process_msg;
 
-    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) {
+    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) {
         pa_source_set_set_volume_callback(u->source, source_set_volume_cb);
         u->source->n_volume_steps = 16;
     }
@@ -1021,12 +1071,8 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
                         break;
 
                     /* Resume the device if the source was suspended as well */
-                    if (!u->source || !PA_SOURCE_IS_OPENED(u->source->thread_info.state)) {
-                        if (transport_acquire(u, false) < 0)
-                            failed = true;
-                        else
-                            setup_stream(u);
-                    }
+                    if (!u->source || !PA_SOURCE_IS_OPENED(u->source->thread_info.state))
+                        failed = !setup_transport_and_stream(u);
 
                     break;
 
@@ -1039,7 +1085,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
             break;
 
         case PA_SINK_MESSAGE_GET_LATENCY: {
-            pa_usec_t wi, ri;
+            int64_t wi, ri;
 
             if (u->read_smoother) {
                 ri = pa_smoother_get(u->read_smoother, pa_rtclock_now());
@@ -1049,10 +1095,14 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
                 wi = pa_bytes_to_usec(u->write_index, &u->sample_spec);
             }
 
-            *((pa_usec_t*) data) = FIXED_LATENCY_PLAYBACK_A2DP + wi > ri ? FIXED_LATENCY_PLAYBACK_A2DP + wi - ri : 0;
+            *((int64_t*) data) = u->sink->thread_info.fixed_latency + wi - ri;
 
             return 0;
         }
+
+        case PA_SINK_MESSAGE_SETUP_STREAM:
+            setup_stream(u);
+            return 0;
     }
 
     r = pa_sink_process_msg(o, code, data, offset, chunk);
@@ -1073,7 +1123,6 @@ static void sink_set_volume_cb(pa_sink *s) {
 
     pa_assert(u);
     pa_assert(u->sink == s);
-    pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT);
 
     if (u->transport->set_speaker_gain == NULL)
       return;
@@ -1091,6 +1140,13 @@ static void sink_set_volume_cb(pa_sink *s) {
 
     pa_cvolume_set(&s->real_volume, u->sample_spec.channels, volume);
 
+    /* Set soft volume when in headset role */
+    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
+        pa_cvolume_set(&s->soft_volume, u->sample_spec.channels, volume);
+
+    /* If we are in the AG role, we send a command to the head set to change
+     * the speaker gain. In the HS role, source and sink are swapped, so
+     * in this case we notify the AG that the microphone gain has changed */
     u->transport->set_speaker_gain(u->transport, gain);
 }
 
@@ -1118,10 +1174,17 @@ static int add_sink(struct userdata *u) {
             case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY:
                 data.suspend_cause = PA_SUSPEND_USER;
                 break;
+            case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
+                /* u->stream_fd contains the error returned by the last transport_acquire()
+                 * EAGAIN means we are waiting for a NewConnection signal */
+                if (u->stream_fd == -EAGAIN)
+                    data.suspend_cause = PA_SUSPEND_USER;
+                else
+                    pa_assert_not_reached();
+                break;
             case PA_BLUETOOTH_PROFILE_A2DP_SINK:
                 /* Profile switch should have failed */
             case PA_BLUETOOTH_PROFILE_A2DP_SOURCE:
-            case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT:
             case PA_BLUETOOTH_PROFILE_OFF:
                 pa_assert_not_reached();
                 break;
@@ -1137,7 +1200,7 @@ static int add_sink(struct userdata *u) {
     u->sink->userdata = u;
     u->sink->parent.process_msg = sink_process_msg;
 
-    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) {
+    if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) {
         pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
         u->sink->n_volume_steps = 16;
     }
@@ -1255,7 +1318,7 @@ static void transport_config(struct userdata *u) {
         sbc_info->frame_length = sbc_get_frame_length(&sbc_info->sbc);
 
         pa_log_info("SBC parameters: allocation=%u, subbands=%u, blocks=%u, bitpool=%u",
-                    sbc_info->sbc.allocation, sbc_info->sbc.subbands, sbc_info->sbc.blocks, sbc_info->sbc.bitpool);
+                    sbc_info->sbc.allocation, sbc_info->sbc.subbands ? 8 : 4, sbc_info->sbc.blocks, sbc_info->sbc.bitpool);
     }
 }
 
@@ -1270,7 +1333,7 @@ static int setup_transport(struct userdata *u) {
     /* check if profile has a transport */
     t = u->device->transports[u->profile];
     if (!t || t->state <= PA_BLUETOOTH_TRANSPORT_STATE_DISCONNECTED) {
-        pa_log_warn("Profile has no transport");
+        pa_log_warn("Profile %s has no transport", pa_bluetooth_profile_to_string(u->profile));
         return -1;
     }
 
@@ -1278,8 +1341,13 @@ static int setup_transport(struct userdata *u) {
 
     if (u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)
         transport_acquire(u, true); /* In case of error, the sink/sources will be created suspended */
-    else if (transport_acquire(u, false) < 0)
-        return -1; /* We need to fail here until the interactions with module-suspend-on-idle and alike get improved */
+    else {
+        int transport_error;
+
+        transport_error = transport_acquire(u, false);
+        if (transport_error < 0 && transport_error != -EAGAIN)
+            return -1; /* We need to fail here until the interactions with module-suspend-on-idle and alike get improved */
+    }
 
     transport_config(u);
 
@@ -1606,38 +1674,6 @@ static void stop_thread(struct userdata *u) {
 }
 
 /* Run from main thread */
-static char *cleanup_name(const char *name) {
-    char *t, *s, *d;
-    bool space = false;
-
-    pa_assert(name);
-
-    while ((*name >= 1 && *name <= 32) || *name >= 127)
-        name++;
-
-    t = pa_xstrdup(name);
-
-    for (s = d = t; *s; s++) {
-
-        if (*s <= 32 || *s >= 127 || *s == '_') {
-            space = true;
-            continue;
-        }
-
-        if (space) {
-            *(d++) = ' ';
-            space = false;
-        }
-
-        *(d++) = *s;
-    }
-
-    *d = 0;
-
-    return t;
-}
-
-/* Run from main thread */
 static pa_available_t get_port_availability(struct userdata *u, pa_direction_t direction) {
     pa_available_t result = PA_AVAILABLE_NO;
     unsigned i;
@@ -1931,7 +1967,7 @@ static int add_card(struct userdata *u) {
     data.driver = __FILE__;
     data.module = u->module;
 
-    alias = cleanup_name(d->alias);
+    alias = pa_utf8_filter(d->alias);
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_DESCRIPTION, alias);
     pa_xfree(alias);
 
@@ -2019,6 +2055,14 @@ static void handle_transport_state_change(struct userdata *u, struct pa_bluetoot
         if (u->source) {
             pa_log_debug("Resuming source %s because its transport state changed to playing", u->source->name);
 
+            /* When the ofono backend resumes source or sink when in the audio gateway role, the
+             * state of source or sink may already be RUNNING before the transport is acquired via
+             * hf_audio_agent_new_connection(), so the pa_source_suspend() call will not lead to a
+             * state change message. In this case we explicitely need to signal the I/O thread to
+             * set up the stream. */
+            if (PA_SOURCE_IS_OPENED(u->source->state))
+                pa_asyncmsgq_send(u->source->asyncmsgq, PA_MSGOBJECT(u->source), PA_SOURCE_MESSAGE_SETUP_STREAM, NULL, 0, NULL);
+
             /* We remove the IDLE suspend cause, because otherwise
              * module-loopback doesn't uncork its streams. FIXME: Messing with
              * the IDLE suspend cause here is wrong, the correct way to handle
@@ -2032,6 +2076,10 @@ static void handle_transport_state_change(struct userdata *u, struct pa_bluetoot
         if (u->sink) {
             pa_log_debug("Resuming sink %s because its transport state changed to playing", u->sink->name);
 
+            /* Same comment as above */
+            if (PA_SINK_IS_OPENED(u->sink->state))
+                pa_asyncmsgq_send(u->sink->asyncmsgq, PA_MSGOBJECT(u->sink), PA_SINK_MESSAGE_SETUP_STREAM, NULL, 0, NULL);
+
             /* FIXME: See the previous comment. */
             pa_sink_suspend(u->sink, false, PA_SUSPEND_IDLE|PA_SUSPEND_USER);
         }
@@ -2103,7 +2151,10 @@ static pa_hook_result_t transport_speaker_gain_changed_cb(pa_bluetooth_discovery
         volume++;
 
     pa_cvolume_set(&v, u->sample_spec.channels, volume);
-    pa_sink_volume_changed(u->sink, &v);
+    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT)
+        pa_sink_volume_changed(u->sink, &v);
+    else
+        pa_sink_set_volume(u->sink, &v, true, true);
 
     return PA_HOOK_OK;
 }
@@ -2127,7 +2178,11 @@ static pa_hook_result_t transport_microphone_gain_changed_cb(pa_bluetooth_discov
         volume++;
 
     pa_cvolume_set(&v, u->sample_spec.channels, volume);
-    pa_source_volume_changed(u->source, &v);
+
+    if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT)
+        pa_source_volume_changed(u->source, &v);
+    else
+        pa_source_set_volume(u->source, &v, true, true);
 
     return PA_HOOK_OK;
 }
@@ -2158,6 +2213,7 @@ int pa__init(pa_module* m) {
     struct userdata *u;
     const char *path;
     pa_modargs *ma;
+    bool autodetect_mtu;
 
     pa_assert(m);
 
@@ -2187,6 +2243,14 @@ int pa__init(pa_module* m) {
         goto fail_free_modargs;
     }
 
+    autodetect_mtu = true;
+    if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) {
+        pa_log("Invalid boolean value for autodetect_mtu parameter");
+        goto fail_free_modargs;
+    }
+
+    u->device->autodetect_mtu = autodetect_mtu;
+
     pa_modargs_free(ma);
 
     u->device_connection_changed_slot =
@@ -2211,6 +2275,7 @@ int pa__init(pa_module* m) {
 
     u->msg->parent.process_msg = device_process_msg;
     u->msg->card = u->card;
+    u->stream_setup_done = false;
 
     if (u->profile != PA_BLUETOOTH_PROFILE_OFF)
         if (init_profile(u) < 0)
diff --git a/src/modules/bluetooth/module-bluez5-discover.c b/src/modules/bluetooth/module-bluez5-discover.c
index 080e5d0..97ff943 100644
--- a/src/modules/bluetooth/module-bluez5-discover.c
+++ b/src/modules/bluetooth/module-bluez5-discover.c
@@ -42,6 +42,7 @@ PA_MODULE_USAGE(
 
 static const char* const valid_modargs[] = {
     "headset",
+    "autodetect_mtu",
     NULL
 };
 
@@ -51,6 +52,7 @@ struct userdata {
     pa_hashmap *loaded_device_paths;
     pa_hook_slot *device_connection_changed_slot;
     pa_bluetooth_discovery *discovery;
+    bool autodetect_mtu;
 };
 
 static pa_hook_result_t device_connection_changed_cb(pa_bluetooth_discovery *y, const pa_bluetooth_device *d, struct userdata *u) {
@@ -71,7 +73,7 @@ static pa_hook_result_t device_connection_changed_cb(pa_bluetooth_discovery *y,
     if (!module_loaded && pa_bluetooth_device_any_transport_connected(d)) {
         /* a new device has been connected */
         pa_module *m;
-        char *args = pa_sprintf_malloc("path=%s", d->path);
+        char *args = pa_sprintf_malloc("path=%s autodetect_mtu=%i", d->path, (int)u->autodetect_mtu);
 
         pa_log_debug("Loading module-bluez5-device %s", args);
         m = pa_module_load(u->module->core, "module-bluez5-device", args);
@@ -91,7 +93,7 @@ static pa_hook_result_t device_connection_changed_cb(pa_bluetooth_discovery *y,
 }
 
 #ifdef HAVE_BLUEZ_5_NATIVE_HEADSET
-const char *default_headset_backend = "native";
+const char *default_headset_backend = "auto";
 #else
 const char *default_headset_backend = "ofono";
 #endif
@@ -101,6 +103,7 @@ int pa__init(pa_module *m) {
     pa_modargs *ma;
     const char *headset_str;
     int headset_backend;
+    bool autodetect_mtu;
 
     pa_assert(m);
 
@@ -121,9 +124,16 @@ int pa__init(pa_module *m) {
         goto fail;
     }
 
+    autodetect_mtu = true;
+    if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) {
+        pa_log("Invalid boolean value for autodetect_mtu parameter");
+        goto fail;
+    }
+
     m->userdata = u = pa_xnew0(struct userdata, 1);
     u->module = m;
     u->core = m->core;
+    u->autodetect_mtu = autodetect_mtu;
     u->loaded_device_paths = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
 
     if (!(u->discovery = pa_bluetooth_discovery_get(u->core, headset_backend)))
diff --git a/src/modules/dbus/iface-card.c b/src/modules/dbus/iface-card.c
index 1b705ba..5203250 100644
--- a/src/modules/dbus/iface-card.c
+++ b/src/modules/dbus/iface-card.c
@@ -457,27 +457,27 @@ static void check_card_proplist(pa_dbusiface_card *c) {
 }
 
 static pa_hook_result_t card_profile_changed_cb(void *hook_data, void *call_data, void *slot_data) {
-    pa_dbusiface_card *c = slot_data;
-    pa_card_profile *profile = call_data;
+    pa_dbusiface_card *dbus_card = slot_data;
+    pa_card *core_card = call_data;
     const char *object_path;
     DBusMessage *signal_msg;
 
-    if (profile->card != c->card)
+    if (dbus_card->card != core_card)
         return PA_HOOK_OK;
 
-    c->active_profile = c->card->active_profile;
+    dbus_card->active_profile = dbus_card->card->active_profile;
 
-    object_path = pa_dbusiface_card_profile_get_path(pa_hashmap_get(c->profiles, c->active_profile->name));
+    object_path = pa_dbusiface_card_profile_get_path(pa_hashmap_get(dbus_card->profiles, dbus_card->active_profile->name));
 
-    pa_assert_se(signal_msg = dbus_message_new_signal(c->path,
+    pa_assert_se(signal_msg = dbus_message_new_signal(dbus_card->path,
                                                       PA_DBUSIFACE_CARD_INTERFACE,
                                                       signals[SIGNAL_ACTIVE_PROFILE_UPDATED].name));
     pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
 
-    pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+    pa_dbus_protocol_send_signal(dbus_card->dbus_protocol, signal_msg);
     dbus_message_unref(signal_msg);
 
-    check_card_proplist(c);
+    check_card_proplist(dbus_card);
 
     return PA_HOOK_OK;
 }
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index 508913d..7177455 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -721,7 +721,7 @@ static void handle_set_fallback_sink(DBusConnection *conn, DBusMessage *msg, DBu
         return;
     }
 
-    pa_namereg_set_default_sink(c->core, pa_dbusiface_device_get_sink(fallback_sink));
+    pa_core_set_configured_default_sink(c->core, pa_dbusiface_device_get_sink(fallback_sink)->name);
 
     pa_dbus_send_empty_reply(conn, msg);
 }
@@ -809,7 +809,7 @@ static void handle_set_fallback_source(DBusConnection *conn, DBusMessage *msg, D
         return;
     }
 
-    pa_namereg_set_default_source(c->core, pa_dbusiface_device_get_source(fallback_source));
+    pa_core_set_configured_default_source(c->core, pa_dbusiface_device_get_source(fallback_source)->name);
 
     pa_dbus_send_empty_reply(conn, msg);
 }
@@ -1692,6 +1692,28 @@ static pa_hook_result_t sample_cache_removed_cb(void *hook_data, void *call_data
     return PA_HOOK_OK;
 }
 
+static pa_dbusiface_device *create_dbus_object_for_sink(pa_dbusiface_core *c, pa_sink *s) {
+    pa_dbusiface_device *d;
+    const char *object_path;
+    DBusMessage *signal_msg;
+
+    d = pa_dbusiface_device_new_sink(c, s);
+    object_path = pa_dbusiface_device_get_path(d);
+
+    pa_assert_se(pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(s->index), d) >= 0);
+    pa_assert_se(pa_hashmap_put(c->sinks_by_path, (char *) object_path, d) >= 0);
+
+    pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+                                                       PA_DBUS_CORE_INTERFACE,
+                                                       signals[SIGNAL_NEW_SINK].name)));
+    pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+    pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+    dbus_message_unref(signal_msg);
+
+    return d;
+}
+
 static pa_hook_result_t default_sink_changed_cb(void *hook_data, void *call_data, void *slot_data) {
     pa_dbusiface_core *c = slot_data;
     pa_sink *new_fallback_sink = call_data;
@@ -1707,7 +1729,15 @@ static pa_hook_result_t default_sink_changed_cb(void *hook_data, void *call_data
         c->fallback_sink = new_fallback_sink ? pa_sink_ref(new_fallback_sink) : NULL;
 
         if (c->fallback_sink) {
-            pa_assert_se((device_iface = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(c->fallback_sink->index))));
+            device_iface = pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(c->fallback_sink->index));
+
+            /* It's possible that we haven't created a dbus object for the
+             * source yet, because if a new source immediately becomes the
+             * default source, the default source change hook is fired before
+             * the put hook. */
+            if (!device_iface)
+                device_iface = create_dbus_object_for_sink(c, c->fallback_sink);
+
             object_path = pa_dbusiface_device_get_path(device_iface);
 
             pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
@@ -1730,6 +1760,28 @@ static pa_hook_result_t default_sink_changed_cb(void *hook_data, void *call_data
     return PA_HOOK_OK;
 }
 
+static pa_dbusiface_device *create_dbus_object_for_source(pa_dbusiface_core *c, pa_source *s) {
+    pa_dbusiface_device *d;
+    const char *object_path;
+    DBusMessage *signal_msg;
+
+    d = pa_dbusiface_device_new_source(c, s);
+    object_path = pa_dbusiface_device_get_path(d);
+
+    pa_assert_se(pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(s->index), d) >= 0);
+    pa_assert_se(pa_hashmap_put(c->sources_by_path, (char *) object_path, d) >= 0);
+
+    pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
+                                                       PA_DBUS_CORE_INTERFACE,
+                                                       signals[SIGNAL_NEW_SOURCE].name)));
+    pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+
+    pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
+    dbus_message_unref(signal_msg);
+
+    return d;
+}
+
 static pa_hook_result_t default_source_changed_cb(void *hook_data, void *call_data, void *slot_data) {
     pa_dbusiface_core *c = slot_data;
     pa_source *new_fallback_source = call_data;
@@ -1745,7 +1797,15 @@ static pa_hook_result_t default_source_changed_cb(void *hook_data, void *call_da
         c->fallback_source = new_fallback_source ? pa_source_ref(new_fallback_source) : NULL;
 
         if (c->fallback_source) {
-            pa_assert_se((device_iface = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(c->fallback_source->index))));
+            device_iface = pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(c->fallback_source->index));
+
+            /* It's possible that we haven't created a dbus object for the
+             * source yet, because if a new source immediately becomes the
+             * default source, the default source change hook is fired before
+             * the put hook. */
+            if (!device_iface)
+                device_iface = create_dbus_object_for_source(c, c->fallback_source);
+
             object_path = pa_dbusiface_device_get_path(device_iface);
 
             pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
@@ -1983,26 +2043,17 @@ static pa_hook_result_t client_unlink_cb(void *hook_data, void *call_data, void
 static pa_hook_result_t sink_put_cb(void *hook_data, void *call_data, void *slot_data) {
     pa_dbusiface_core *c = slot_data;
     pa_sink *s = call_data;
-    pa_dbusiface_device *d = NULL;
-    const char *object_path = NULL;
-    DBusMessage *signal_msg = NULL;
 
     pa_assert(c);
     pa_assert(s);
 
-    d = pa_dbusiface_device_new_sink(c, s);
-    object_path = pa_dbusiface_device_get_path(d);
-
-    pa_assert_se(pa_hashmap_put(c->sinks_by_index, PA_UINT32_TO_PTR(s->index), d) >= 0);
-    pa_assert_se(pa_hashmap_put(c->sinks_by_path, (char *) object_path, d) >= 0);
-
-    pa_assert_se(signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
-                                                      PA_DBUS_CORE_INTERFACE,
-                                                      signals[SIGNAL_NEW_SINK].name));
-    pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+    /* We may have alredy encountered this sink, because if the new sink was
+     * chosen as the default sink, the default sink change hook was fired
+     * first, and we saw the sink in default_sink_changed_cb(). */
+    if (pa_hashmap_get(c->sinks_by_index, PA_UINT32_TO_PTR(s->index)))
+        return PA_HOOK_OK;
 
-    pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
-    dbus_message_unref(signal_msg);
+    create_dbus_object_for_sink(c, s);
 
     return PA_HOOK_OK;
 }
@@ -2037,26 +2088,17 @@ static pa_hook_result_t sink_unlink_cb(void *hook_data, void *call_data, void *s
 static pa_hook_result_t source_put_cb(void *hook_data, void *call_data, void *slot_data) {
     pa_dbusiface_core *c = slot_data;
     pa_source *s = call_data;
-    pa_dbusiface_device *d = NULL;
-    const char *object_path = NULL;
-    DBusMessage *signal_msg = NULL;
 
     pa_assert(c);
     pa_assert(s);
 
-    d = pa_dbusiface_device_new_source(c, s);
-    object_path = pa_dbusiface_device_get_path(d);
-
-    pa_assert_se(pa_hashmap_put(c->sources_by_index, PA_UINT32_TO_PTR(s->index), d) >= 0);
-    pa_assert_se(pa_hashmap_put(c->sources_by_path, (char *) object_path, d) >= 0);
-
-    pa_assert_se((signal_msg = dbus_message_new_signal(PA_DBUS_CORE_OBJECT_PATH,
-                                                       PA_DBUS_CORE_INTERFACE,
-                                                       signals[SIGNAL_NEW_SOURCE].name)));
-    pa_assert_se(dbus_message_append_args(signal_msg, DBUS_TYPE_OBJECT_PATH, &object_path, DBUS_TYPE_INVALID));
+    /* We may have alredy encountered this source, because if the new source
+     * was chosen as the default source, the default source change hook was
+     * fired first, and we saw the source in default_source_changed_cb(). */
+    if (pa_hashmap_get(c->sources_by_index, PA_UINT32_TO_PTR(s->index)))
+        return PA_HOOK_OK;
 
-    pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
-    dbus_message_unref(signal_msg);
+    create_dbus_object_for_source(c, s);
 
     return PA_HOOK_OK;
 }
@@ -2158,8 +2200,8 @@ pa_dbusiface_core *pa_dbusiface_core_new(pa_core *core) {
     c->samples = pa_hashmap_new_full(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func, NULL, (pa_free_cb_t) pa_dbusiface_sample_free);
     c->modules = pa_hashmap_new_full(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func, NULL, (pa_free_cb_t) pa_dbusiface_module_free);
     c->clients = pa_hashmap_new_full(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func, NULL, (pa_free_cb_t) pa_dbusiface_client_free);
-    c->fallback_sink = pa_namereg_get_default_sink(core);
-    c->fallback_source = pa_namereg_get_default_source(core);
+    c->fallback_sink = core->default_sink;
+    c->fallback_source = core->default_source;
     c->default_sink_changed_slot = pa_hook_connect(&core->hooks[PA_CORE_HOOK_DEFAULT_SINK_CHANGED],
                                                    PA_HOOK_NORMAL, default_sink_changed_cb, c);
     c->default_source_changed_slot = pa_hook_connect(&core->hooks[PA_CORE_HOOK_DEFAULT_SOURCE_CHANGED],
diff --git a/src/modules/dbus/iface-sample.c b/src/modules/dbus/iface-sample.c
index 61f2ba0..5118919 100644
--- a/src/modules/dbus/iface-sample.c
+++ b/src/modules/dbus/iface-sample.c
@@ -352,7 +352,6 @@ static void handle_play(DBusConnection *conn, DBusMessage *msg, void *userdata)
     DBusMessageIter msg_iter;
     dbus_uint32_t volume = 0;
     pa_proplist *property_list = NULL;
-    pa_sink *sink = NULL;
 
     pa_assert(conn);
     pa_assert(msg);
@@ -370,13 +369,18 @@ static void handle_play(DBusConnection *conn, DBusMessage *msg, void *userdata)
         goto finish;
     }
 
-    if (!(sink = pa_namereg_get_default_sink(s->sample->core))) {
+    if (!s->sample->core->default_sink) {
         pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED,
                            "Can't play sample %s, because there are no sinks available.", s->sample->name);
         goto finish;
     }
 
-    if (pa_scache_play_item(s->sample->core, s->sample->name, sink, volume, property_list, NULL) < 0) {
+    if (pa_scache_play_item(s->sample->core,
+                            s->sample->name,
+                            s->sample->core->default_sink,
+                            volume,
+                            property_list,
+                            NULL) < 0) {
         pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "Playing sample %s failed.", s->sample->name);
         goto finish;
     }
diff --git a/src/modules/dbus/module-dbus-protocol.c b/src/modules/dbus/module-dbus-protocol.c
index 8079d6b..2cd206e 100644
--- a/src/modules/dbus/module-dbus-protocol.c
+++ b/src/modules/dbus/module-dbus-protocol.c
@@ -220,7 +220,7 @@ static void io_event_cb(pa_mainloop_api *mainloop, pa_io_event *e, int fd, pa_io
     unsigned int flags = 0;
     DBusWatch *watch = userdata;
 
-#if HAVE_DBUS_WATCH_GET_UNIX_FD
+#ifdef HAVE_DBUS_WATCH_GET_UNIX_FD
     pa_assert(fd == dbus_watch_get_unix_fd(watch));
 #else
     pa_assert(fd == dbus_watch_get_fd(watch));
@@ -291,7 +291,7 @@ static dbus_bool_t watch_add_cb(DBusWatch *watch, void *data) {
 
     ev = mainloop->io_new(
             mainloop,
-#if HAVE_DBUS_WATCH_GET_UNIX_FD
+#ifdef HAVE_DBUS_WATCH_GET_UNIX_FD
             dbus_watch_get_unix_fd(watch),
 #else
             dbus_watch_get_fd(watch),
diff --git a/src/modules/echo-cancel/module-echo-cancel.c b/src/modules/echo-cancel/module-echo-cancel.c
index dfd05b6..a1eeace 100644
--- a/src/modules/echo-cancel/module-echo-cancel.c
+++ b/src/modules/echo-cancel/module-echo-cancel.c
@@ -145,6 +145,8 @@ static const pa_echo_canceller ec_table[] = {
 
 #define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
 
+#define MAX_LATENCY_BLOCKS 10
+
 /* Can only be used in main context */
 #define IS_ACTIVE(u) ((pa_source_get_state((u)->source) == PA_SOURCE_RUNNING) && \
                       (pa_sink_get_state((u)->sink) == PA_SINK_RUNNING))
@@ -408,14 +410,14 @@ static int source_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t
              * source output is first shut down, the source second. */
             if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state) ||
                 !PA_SOURCE_OUTPUT_IS_LINKED(u->source_output->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) =
+            *((int64_t*) data) =
 
                 /* Get the latency of the master source */
-                pa_source_get_latency_within_thread(u->source_output->source) +
+                pa_source_get_latency_within_thread(u->source_output->source, true) +
                 /* Add the latency internal to our source output on top */
                 pa_bytes_to_usec(pa_memblockq_get_length(u->source_output->thread_info.delay_memblockq), &u->source_output->source->sample_spec) +
                 /* and the buffering we do on the source */
@@ -444,19 +446,32 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
              * sink input is first shut down, the sink second. */
             if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
                 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) =
+            *((int64_t*) data) =
 
                 /* Get the latency of the master sink */
-                pa_sink_get_latency_within_thread(u->sink_input->sink) +
+                pa_sink_get_latency_within_thread(u->sink_input->sink, true) +
 
                 /* Add the latency internal to our sink input on top */
                 pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
 
             return 0;
+
+        case PA_SINK_MESSAGE_SET_STATE: {
+            pa_sink_state_t new_state = (pa_sink_state_t) PA_PTR_TO_UINT(data);
+
+            /* When set to running or idle for the first time, request a rewind
+             * of the master sink to make sure we are heard immediately */
+            if ((new_state == PA_SINK_IDLE || new_state == PA_SINK_RUNNING) && u->sink->thread_info.state == PA_SINK_INIT) {
+                pa_log_debug("Requesting rewind due to state change.");
+                pa_sink_input_request_rewind(u->sink_input, 0, false, true, true);
+            }
+            break;
+        }
+
     }
 
     return pa_sink_process_msg(o, code, data, offset, chunk);
@@ -515,6 +530,7 @@ static int sink_set_state_cb(pa_sink *s, pa_sink_state_t state) {
 /* Called from source I/O thread context */
 static void source_update_requested_latency_cb(pa_source *s) {
     struct userdata *u;
+    pa_usec_t latency;
 
     pa_source_assert_ref(s);
     pa_assert_se(u = s->userdata);
@@ -525,15 +541,17 @@ static void source_update_requested_latency_cb(pa_source *s) {
 
     pa_log_debug("Source update requested latency");
 
-    /* Just hand this one over to the master source */
-    pa_source_output_set_requested_latency_within_thread(
-            u->source_output,
-            pa_source_get_requested_latency_within_thread(s));
+    /* Cap the maximum latency so we don't have to process too large chunks */
+    latency = PA_MIN(pa_source_get_requested_latency_within_thread(s),
+                     pa_bytes_to_usec(u->source_blocksize, &s->sample_spec) * MAX_LATENCY_BLOCKS);
+
+    pa_source_output_set_requested_latency_within_thread(u->source_output, latency);
 }
 
 /* Called from sink I/O thread context */
 static void sink_update_requested_latency_cb(pa_sink *s) {
     struct userdata *u;
+    pa_usec_t latency;
 
     pa_sink_assert_ref(s);
     pa_assert_se(u = s->userdata);
@@ -544,10 +562,11 @@ static void sink_update_requested_latency_cb(pa_sink *s) {
 
     pa_log_debug("Sink update requested latency");
 
-    /* Just hand this one over to the master sink */
-    pa_sink_input_set_requested_latency_within_thread(
-            u->sink_input,
-            pa_sink_get_requested_latency_within_thread(s));
+    /* Cap the maximum latency so we don't have to process too large chunks */
+    latency = PA_MIN(pa_sink_get_requested_latency_within_thread(s),
+                     pa_bytes_to_usec(u->sink_blocksize, &s->sample_spec) * MAX_LATENCY_BLOCKS);
+
+    pa_sink_input_set_requested_latency_within_thread(u->sink_input, latency);
 }
 
 /* Called from sink I/O thread context */
@@ -683,8 +702,13 @@ static void do_resync(struct userdata *u) {
     pa_log("Doing resync");
 
     /* update our snapshot */
-    source_output_snapshot_within_thread(u, &latency_snapshot);
+    /* 1. Get sink input latency snapshot, might cause buffers to be sent to source thread */
     pa_asyncmsgq_send(u->sink_input->sink->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_LATENCY_SNAPSHOT, &latency_snapshot, 0, NULL);
+    /* 2. Pick up any in-flight buffers (and discard if needed) */
+    while (pa_asyncmsgq_process_one(u->asyncmsgq))
+        ;
+    /* 3. Now get the source output latency snapshot */
+    source_output_snapshot_within_thread(u, &latency_snapshot);
 
     /* calculate drift between capture and playback */
     diff_time = calc_diff(u, &latency_snapshot);
@@ -725,9 +749,6 @@ static void do_push_drift_comp(struct userdata *u) {
     u->sink_rem = plen % u->sink_blocksize;
     u->source_rem = rlen % u->source_output_blocksize;
 
-    /* Now let the canceller work its drift compensation magic */
-    u->ec->set_drift(u->ec, drift);
-
     if (u->save_aec) {
         if (u->drift_file)
             fprintf(u->drift_file, "d %a\n", drift);
@@ -767,6 +788,7 @@ static void do_push_drift_comp(struct userdata *u) {
         cchunk.memblock = pa_memblock_new(u->source->core->mempool, cchunk.length);
         cdata = pa_memblock_acquire(cchunk.memblock);
 
+        u->ec->set_drift(u->ec, drift);
         u->ec->record(u->ec, rdata, cdata);
 
         if (u->save_aec) {
@@ -874,6 +896,9 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
+    if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        return;
+
     if (!PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output))) {
         pa_log("Push when no link?");
         return;
@@ -935,8 +960,8 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
         u->sink_skip -= to_skip;
     }
 
-    /* process and push out samples, do drift compensation only if the sink is actually running */
-    if (u->ec->params.drift_compensation && u->sink->thread_info.state == PA_SINK_RUNNING)
+    /* process and push out samples */
+    if (u->ec->params.drift_compensation)
         do_push_drift_comp(u);
     else
         do_push(u);
@@ -950,6 +975,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     pa_assert(chunk);
     pa_assert_se(u = i->userdata);
 
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return -1;
+
     if (u->sink->thread_info.rewind_requested)
         pa_sink_process_rewind(u->sink, 0);
 
@@ -977,6 +1005,10 @@ static void source_output_process_rewind_cb(pa_source_output *o, size_t nbytes)
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
+    /* If the source is not yet linked, there is nothing to rewind */
+    if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        return;
+
     pa_source_process_rewind(u->source, nbytes);
 
     /* go back on read side, we need to use older sink data for this */
@@ -996,6 +1028,10 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
+    /* If the sink is not yet linked, there is nothing to rewind */
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return;
+
     pa_log_debug("Sink process rewind %lld", (long long) nbytes);
 
     pa_sink_process_rewind(u->sink, nbytes);
@@ -1010,7 +1046,7 @@ static void source_output_snapshot_within_thread(struct userdata *u, struct snap
     pa_usec_t now, latency;
 
     now = pa_rtclock_now();
-    latency = pa_source_get_latency_within_thread(u->source_output->source);
+    latency = pa_source_get_latency_within_thread(u->source_output->source, false);
     delay = pa_memblockq_get_length(u->source_output->thread_info.delay_memblockq);
 
     delay = (u->source_output->thread_info.resampler ? pa_resampler_request(u->source_output->thread_info.resampler, delay) : delay);
@@ -1089,7 +1125,7 @@ static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, in
             pa_sink_input_assert_io_context(u->sink_input);
 
             now = pa_rtclock_now();
-            latency = pa_sink_get_latency_within_thread(u->sink_input->sink);
+            latency = pa_sink_get_latency_within_thread(u->sink_input->sink, false);
             delay = pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq);
 
             delay = (u->sink_input->thread_info.resampler ? pa_resampler_request(u->sink_input->thread_info.resampler, delay) : delay);
@@ -1239,7 +1275,8 @@ static void source_output_attach_cb(pa_source_output *o) {
 
     pa_log_debug("Source output %d attach", o->index);
 
-    pa_source_attach_within_thread(u->source);
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_attach_within_thread(u->source);
 
     u->rtpoll_item_read = pa_rtpoll_item_new_asyncmsgq_read(
             o->source->thread_info.rtpoll,
@@ -1277,7 +1314,8 @@ static void sink_input_attach_cb(pa_sink_input *i) {
             PA_RTPOLL_LATE,
             u->asyncmsgq);
 
-    pa_sink_attach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_attach_within_thread(u->sink);
 }
 
 /* Called from source I/O thread context. */
@@ -1288,7 +1326,8 @@ static void source_output_detach_cb(pa_source_output *o) {
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
-    pa_source_detach_within_thread(u->source);
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_detach_within_thread(u->source);
     pa_source_set_rtpoll(u->source, NULL);
 
     pa_log_debug("Source output %d detach", o->index);
@@ -1306,7 +1345,8 @@ static void sink_input_detach_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    pa_sink_detach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_detach_within_thread(u->sink);
 
     pa_sink_set_rtpoll(u->sink, NULL);
 
@@ -1318,12 +1358,11 @@ static void sink_input_detach_cb(pa_sink_input *i) {
     }
 }
 
-/* Called from source I/O thread context. */
+/* Called from source I/O thread context except when cork() is called without valid source. */
 static void source_output_state_change_cb(pa_source_output *o, pa_source_output_state_t state) {
     struct userdata *u;
 
     pa_source_output_assert_ref(o);
-    pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
     pa_log_debug("Source output %d state %d", o->index, state);
@@ -1337,14 +1376,6 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
     pa_assert_se(u = i->userdata);
 
     pa_log_debug("Sink input %d state %d", i->index, state);
-
-    /* If we are added for the first time, ask for a rewinding so that
-     * we are heard right-away. */
-    if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT) {
-        pa_log_debug("Requesting rewind due to state change.");
-        pa_sink_input_request_rewind(i, 0, false, true, true);
-    }
 }
 
 /* Called from main context. */
@@ -1357,11 +1388,12 @@ static void source_output_kill_cb(pa_source_output *o) {
 
     u->dead = true;
 
-    /* The order here matters! We first kill the source output, followed
-     * by the source. That means the source callbacks must be protected
-     * against an unconnected source output! */
-    pa_source_output_unlink(u->source_output);
+    /* The order here matters! We first kill the source so that streams can
+     * properly be moved away while the source output is still connected to
+     * the master. */
+    pa_source_output_cork(u->source_output, true);
     pa_source_unlink(u->source);
+    pa_source_output_unlink(u->source_output);
 
     pa_source_output_unref(u->source_output);
     u->source_output = NULL;
@@ -1383,11 +1415,12 @@ static void sink_input_kill_cb(pa_sink_input *i) {
 
     u->dead = true;
 
-    /* The order here matters! We first kill the sink input, followed
-     * by the sink. That means the sink callbacks must be protected
-     * against an unconnected sink input! */
-    pa_sink_input_unlink(u->sink_input);
+    /* The order here matters! We first kill the sink so that streams
+     * can properly be moved away while the sink input is still connected
+     * to the master. */
+    pa_sink_input_cork(u->sink_input, true);
     pa_sink_unlink(u->sink);
+    pa_sink_input_unlink(u->sink_input);
 
     pa_sink_input_unref(u->sink_input);
     u->sink_input = NULL;
@@ -1446,9 +1479,10 @@ static void source_output_moving_cb(pa_source_output *o, pa_source *dest) {
         pa_proplist *pl;
 
         pl = pa_proplist_new();
-        if (u->sink_input->sink)
+        if (u->sink_input->sink) {
+            pa_proplist_sets(pl, PA_PROP_DEVICE_MASTER_DEVICE, u->sink_input->sink->name);
             y = pa_proplist_gets(u->sink_input->sink->proplist, PA_PROP_DEVICE_DESCRIPTION);
-        else
+        } else
             y = "<unknown>"; /* Probably in the middle of a move */
         z = pa_proplist_gets(dest->proplist, PA_PROP_DEVICE_DESCRIPTION);
         pa_proplist_setf(pl, PA_PROP_DEVICE_DESCRIPTION, "%s (echo cancelled with %s)", z ? z : dest->name,
@@ -1477,9 +1511,10 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
         pa_proplist *pl;
 
         pl = pa_proplist_new();
-        if (u->source_output->source)
+        if (u->source_output->source) {
+            pa_proplist_sets(pl, PA_PROP_DEVICE_MASTER_DEVICE, u->source_output->source->name);
             y = pa_proplist_gets(u->source_output->source->proplist, PA_PROP_DEVICE_DESCRIPTION);
-        else
+        } else
             y = "<unknown>"; /* Probably in the middle of a move */
         z = pa_proplist_gets(dest->proplist, PA_PROP_DEVICE_DESCRIPTION);
         pa_proplist_setf(pl, PA_PROP_DEVICE_DESCRIPTION, "%s (echo cancelled with %s)", z ? z : dest->name,
@@ -1653,6 +1688,7 @@ int pa__init(pa_module*m) {
     uint32_t temp;
     uint32_t nframes = 0;
     bool use_master_format;
+    pa_usec_t blocksize_usec;
 
     pa_assert(m);
 
@@ -1899,6 +1935,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(source_output_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_source_output_new_data_set_sample_spec(&source_output_data, &source_output_ss);
     pa_source_output_new_data_set_channel_map(&source_output_data, &source_output_map);
+    source_output_data.flags |= PA_SOURCE_OUTPUT_START_CORKED;
 
     if (autoloaded)
         source_output_data.flags |= PA_SOURCE_OUTPUT_DONT_MOVE;
@@ -1936,7 +1973,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_sink_input_new_data_set_sample_spec(&sink_input_data, &sink_ss);
     pa_sink_input_new_data_set_channel_map(&sink_input_data, &sink_map);
-    sink_input_data.flags = PA_SINK_INPUT_VARIABLE_RATE;
+    sink_input_data.flags = PA_SINK_INPUT_VARIABLE_RATE | PA_SINK_INPUT_START_CORKED;
 
     if (autoloaded)
         sink_input_data.flags |= PA_SINK_INPUT_DONT_MOVE;
@@ -2015,11 +2052,27 @@ int pa__init(pa_module*m) {
 
     u->thread_info.current_volume = u->source->reference_volume;
 
-    pa_sink_put(u->sink);
-    pa_source_put(u->source);
+    /* We don't want to deal with too many chunks at a time */
+    blocksize_usec = pa_bytes_to_usec(u->source_blocksize, &u->source->sample_spec);
+    pa_source_set_latency_range(u->source, blocksize_usec, blocksize_usec * MAX_LATENCY_BLOCKS);
+    pa_source_output_set_requested_latency(u->source_output, blocksize_usec * MAX_LATENCY_BLOCKS);
+
+    blocksize_usec = pa_bytes_to_usec(u->sink_blocksize, &u->sink->sample_spec);
+    pa_sink_set_latency_range(u->sink, blocksize_usec, blocksize_usec * MAX_LATENCY_BLOCKS);
+    pa_sink_input_set_requested_latency(u->sink_input, blocksize_usec * MAX_LATENCY_BLOCKS);
 
+    /* The order here is important. The input/output must be put first,
+     * otherwise streams might attach to the sink/source before the
+     * sink input or source output is attached to the master. */
     pa_sink_input_put(u->sink_input);
     pa_source_output_put(u->source_output);
+
+    pa_sink_put(u->sink);
+    pa_source_put(u->source);
+
+    pa_source_output_cork(u->source_output, false);
+    pa_sink_input_cork(u->sink_input, false);
+
     pa_modargs_free(ma);
 
     return 0;
@@ -2061,19 +2114,24 @@ void pa__done(pa_module*m) {
         u->core->mainloop->time_free(u->time_event);
 
     if (u->source_output)
-        pa_source_output_unlink(u->source_output);
+        pa_source_output_cork(u->source_output, true);
     if (u->sink_input)
-        pa_sink_input_unlink(u->sink_input);
+        pa_sink_input_cork(u->sink_input, true);
 
     if (u->source)
         pa_source_unlink(u->source);
     if (u->sink)
         pa_sink_unlink(u->sink);
 
-    if (u->source_output)
+    if (u->source_output) {
+        pa_source_output_unlink(u->source_output);
         pa_source_output_unref(u->source_output);
-    if (u->sink_input)
+    }
+
+    if (u->sink_input) {
+        pa_sink_input_unlink(u->sink_input);
         pa_sink_input_unref(u->sink_input);
+    }
 
     if (u->source)
         pa_source_unref(u->source);
diff --git a/src/modules/jack/module-jack-sink.c b/src/modules/jack/module-jack-sink.c
index 4d31493..82bfccd 100644
--- a/src/modules/jack/module-jack-sink.c
+++ b/src/modules/jack/module-jack-sink.c
@@ -165,13 +165,14 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
             return 0;
 
         case PA_SINK_MESSAGE_GET_LATENCY: {
-            jack_nframes_t l, ft, d;
+            jack_nframes_t ft, d;
             jack_latency_range_t r;
             size_t n;
+            int32_t number_of_frames;
 
             /* This is the "worst-case" latency */
             jack_port_get_latency_range(u->port[0], JackPlaybackLatency, &r);
-            l = r.max + u->frames_in_buffer;
+            number_of_frames = r.max + u->frames_in_buffer;
 
             if (u->saved_frame_time_valid) {
                 /* Adjust the worst case latency by the time that
@@ -179,12 +180,17 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
 
                 ft = jack_frame_time(u->client);
                 d = ft > u->saved_frame_time ? ft - u->saved_frame_time : 0;
-                l = l > d ? l - d : 0;
+                number_of_frames -= d;
             }
 
             /* Convert it to usec */
-            n = l * pa_frame_size(&u->sink->sample_spec);
-            *((pa_usec_t*) data) = pa_bytes_to_usec(n, &u->sink->sample_spec);
+            if (number_of_frames > 0) {
+                n = number_of_frames * pa_frame_size(&u->sink->sample_spec);
+                *((int64_t*) data) = pa_bytes_to_usec(n, &u->sink->sample_spec);
+            } else {
+                n = - number_of_frames * pa_frame_size(&u->sink->sample_spec);
+                *((int64_t*) data) = - (int64_t)pa_bytes_to_usec(n, &u->sink->sample_spec);
+            }
 
             return 0;
         }
diff --git a/src/modules/jack/module-jack-source.c b/src/modules/jack/module-jack-source.c
index e45f304..1f020c0 100644
--- a/src/modules/jack/module-jack-source.c
+++ b/src/modules/jack/module-jack-source.c
@@ -141,7 +141,7 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
 
             /* Convert it to usec */
             n = l * pa_frame_size(&u->source->sample_spec);
-            *((pa_usec_t*) data) = pa_bytes_to_usec(n, &u->source->sample_spec);
+            *((int64_t*) data) = pa_bytes_to_usec(n, &u->source->sample_spec);
 
             return 0;
         }
diff --git a/src/modules/macosx/module-coreaudio-device.c b/src/modules/macosx/module-coreaudio-device.c
index 502fc51..48faf08 100644
--- a/src/modules/macosx/module-coreaudio-device.c
+++ b/src/modules/macosx/module-coreaudio-device.c
@@ -305,7 +305,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
         }
 
         case PA_SINK_MESSAGE_GET_LATENCY: {
-            *((pa_usec_t *) data) = get_latency_us(PA_OBJECT(o));
+            *((int64_t *) data) = get_latency_us(PA_OBJECT(o));
             return 0;
         }
     }
@@ -343,7 +343,7 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
         }
 
         case PA_SOURCE_MESSAGE_GET_LATENCY: {
-            *((pa_usec_t *) data) = get_latency_us(PA_OBJECT(o));
+            *((int64_t *) data) = get_latency_us(PA_OBJECT(o));
             return 0;
         }
     }
@@ -379,8 +379,6 @@ static int ca_sink_set_state(pa_sink *s, pa_sink_state_t state) {
 static char * CFString_to_cstr(CFStringRef cfstr) {
     char *ret = NULL;
 
-    ret = false;
-
     if (cfstr != NULL) {
         const char *tmp = CFStringGetCStringPtr(cfstr, kCFStringEncodingUTF8);
         CFIndex n = CFStringGetLength(cfstr) + 1 /* for the terminating NULL */;
@@ -410,7 +408,7 @@ static int ca_device_create_sink(pa_module *m, AudioBuffer *buf, int channel_idx
     coreaudio_sink *ca_sink;
     pa_sink *sink;
     unsigned int i;
-    char *tmp;
+    char *tmp = NULL;
     pa_strbuf *strbuf;
     AudioObjectPropertyAddress property_address;
     CFStringRef tmp_cfstr = NULL;
@@ -450,6 +448,7 @@ static int ca_device_create_sink(pa_module *m, AudioBuffer *buf, int channel_idx
             pa_strbuf_puts(strbuf, tmp);
 
         pa_xfree(tmp);
+        tmp = NULL;
     }
 
     ca_sink->name = pa_strbuf_to_string_free(strbuf);
@@ -543,7 +542,7 @@ static int ca_device_create_source(pa_module *m, AudioBuffer *buf, int channel_i
     coreaudio_source *ca_source;
     pa_source *source;
     unsigned int i;
-    char *tmp;
+    char *tmp = NULL;
     pa_strbuf *strbuf;
     AudioObjectPropertyAddress property_address;
     CFStringRef tmp_cfstr = NULL;
@@ -583,6 +582,7 @@ static int ca_device_create_source(pa_module *m, AudioBuffer *buf, int channel_i
             pa_strbuf_puts(strbuf, tmp);
 
         pa_xfree(tmp);
+        tmp = NULL;
     }
 
     ca_source->name = pa_strbuf_to_string_free(strbuf);
diff --git a/src/modules/module-allow-passthrough.c b/src/modules/module-allow-passthrough.c
index 4b801e4..31ff270 100644
--- a/src/modules/module-allow-passthrough.c
+++ b/src/modules/module-allow-passthrough.c
@@ -77,10 +77,10 @@ static pa_sink *ensure_null_sink_for_sink(struct userdata *u, pa_sink *s, pa_cor
     if (m == NULL)
         return NULL;
 
-   PA_IDXSET_FOREACH(sink, c->sinks, idx) {
+    PA_IDXSET_FOREACH(sink, c->sinks, idx) {
         if (sink->module->index == m->index) {
-          pa_hashmap_put(u->null_sinks, s, sink);
-          return sink;
+            pa_hashmap_put(u->null_sinks, s, sink);
+            return sink;
         }
     }
 
@@ -118,10 +118,10 @@ static bool sink_has_passthrough_stream(pa_sink *sink, pa_sink_input *ignore)
 
     PA_IDXSET_FOREACH(stream, sink->inputs, idx) {
         if (stream == ignore)
-          continue;
+            continue;
 
         if (pa_sink_input_is_passthrough(stream))
-          return true;
+            return true;
     }
 
     return false;
@@ -147,7 +147,7 @@ static pa_hook_result_t new_passthrough_stream(struct userdata *u, pa_core *c, p
     PA_IDXSET_FOREACH(stream, sink->inputs, idx) {
         /* We don't want to move the stream which just moved to the sink and trigger this re-routing */
         if (stream != i)
-          move_stream(u, stream, null_sink);
+            move_stream(u, stream, null_sink);
     }
 
     return PA_HOOK_OK;
@@ -184,7 +184,7 @@ static pa_hook_result_t sink_input_new_cb(pa_core *core, pa_sink_input_new_data
     }
 
     if (!new_data->format && new_data->nego_formats && !pa_idxset_isempty(new_data->nego_formats))
-      new_data->format = pa_format_info_copy(pa_idxset_first(new_data->nego_formats, NULL));
+        new_data->format = pa_format_info_copy(pa_idxset_first(new_data->nego_formats, NULL));
 
     if (pa_sink_input_new_data_is_passthrough(new_data))
         return new_passthrough_stream(u, core, new_data->sink, NULL);
@@ -225,7 +225,7 @@ static pa_hook_result_t sink_input_removed(pa_core *core, pa_sink_input *i, stru
     pa_sink_input_assert_ref(i);
 
     if (pa_sink_input_is_passthrough(i))
-      return passthrough_stream_removed(u, core, i);
+        return passthrough_stream_removed(u, core, i);
 
     return PA_HOOK_OK;
 }
@@ -236,7 +236,7 @@ static pa_hook_result_t sink_input_unlink_cb(pa_core *core, pa_sink_input *i, st
 
 static pa_hook_result_t sink_input_move_start_cb(pa_core *core, pa_sink_input *i, struct userdata *u) {
     if (u->moving)
-      return PA_HOOK_OK;
+        return PA_HOOK_OK;
 
     return sink_input_removed(core, i, u);
 }
diff --git a/src/modules/module-combine-sink.c b/src/modules/module-combine-sink.c
index 250240a..4aa7de9 100644
--- a/src/modules/module-combine-sink.c
+++ b/src/modules/module-combine-sink.c
@@ -227,7 +227,7 @@ static void adjust_rates(struct userdata *u) {
 
     avg_total_latency /= n;
 
-    target_latency = max_sink_latency > min_total_latency ? max_sink_latency : min_total_latency;
+    target_latency = PA_MAX(max_sink_latency, min_total_latency);
 
     pa_log_info("[%s] avg total latency is %0.2f msec.", u->sink->name, (double) avg_total_latency / PA_USEC_PER_MSEC);
     pa_log_info("[%s] target latency is %0.2f msec.", u->sink->name, (double) target_latency / PA_USEC_PER_MSEC);
@@ -870,17 +870,15 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
         }
 
         case PA_SINK_MESSAGE_GET_LATENCY: {
-            pa_usec_t x, y, c, *delay = data;
+            pa_usec_t x, y, c;
+            int64_t *delay = data;
 
             x = pa_rtclock_now();
             y = pa_smoother_get(u->thread_info.smoother, x);
 
             c = pa_bytes_to_usec(u->thread_info.counter, &u->sink->sample_spec);
 
-            if (y < c)
-                *delay = c - y;
-            else
-                *delay = 0;
+            *delay = (int64_t)c - y;
 
             return 0;
         }
diff --git a/src/modules/module-default-device-restore.c b/src/modules/module-default-device-restore.c
index d76e28e..adf19ff 100644
--- a/src/modules/module-default-device-restore.c
+++ b/src/modules/module-default-device-restore.c
@@ -56,11 +56,10 @@ static void load(struct userdata *u) {
 
     /* We never overwrite manually configured settings */
 
-    if (u->core->default_sink)
+    if (u->core->configured_default_sink)
         pa_log_info("Manually configured default sink, not overwriting.");
     else if ((f = pa_fopen_cloexec(u->sink_filename, "r"))) {
         char ln[256] = "";
-        pa_sink *s;
 
         if (fgets(ln, sizeof(ln)-1, f))
             pa_strip_nl(ln);
@@ -68,20 +67,20 @@ static void load(struct userdata *u) {
 
         if (!ln[0])
             pa_log_info("No previous default sink setting, ignoring.");
-        else if ((s = pa_namereg_get(u->core, ln, PA_NAMEREG_SINK))) {
-            pa_namereg_set_default_sink(u->core, s);
-            pa_log_info("Restored default sink '%s'.", ln);
-        } else
-            pa_log_info("Saved default sink '%s' not existent, not restoring default sink setting.", ln);
+        else if (!pa_namereg_is_valid_name(ln))
+            pa_log_warn("Invalid sink name: %s", ln);
+        else {
+            pa_log_info("Restoring default sink '%s'.", ln);
+            pa_core_set_configured_default_sink(u->core, ln);
+        }
 
     } else if (errno != ENOENT)
         pa_log("Failed to load default sink: %s", pa_cstrerror(errno));
 
-    if (u->core->default_source)
+    if (u->core->configured_default_source)
         pa_log_info("Manually configured default source, not overwriting.");
     else if ((f = pa_fopen_cloexec(u->source_filename, "r"))) {
         char ln[256] = "";
-        pa_source *s;
 
         if (fgets(ln, sizeof(ln)-1, f))
             pa_strip_nl(ln);
@@ -89,14 +88,15 @@ static void load(struct userdata *u) {
 
         if (!ln[0])
             pa_log_info("No previous default source setting, ignoring.");
-        else if ((s = pa_namereg_get(u->core, ln, PA_NAMEREG_SOURCE))) {
-            pa_namereg_set_default_source(u->core, s);
-            pa_log_info("Restored default source '%s'.", ln);
-        } else
-            pa_log_info("Saved default source '%s' not existent, not restoring default source setting.", ln);
+        else if (!pa_namereg_is_valid_name(ln))
+            pa_log_warn("Invalid source name: %s", ln);
+        else {
+            pa_log_info("Restoring default source '%s'.", ln);
+            pa_core_set_configured_default_source(u->core, ln);
+        }
 
     } else if (errno != ENOENT)
-            pa_log("Failed to load default sink: %s", pa_cstrerror(errno));
+        pa_log("Failed to load default source: %s", pa_cstrerror(errno));
 }
 
 static void save(struct userdata *u) {
@@ -107,8 +107,7 @@ static void save(struct userdata *u) {
 
     if (u->sink_filename) {
         if ((f = pa_fopen_cloexec(u->sink_filename, "w"))) {
-            pa_sink *s = pa_namereg_get_default_sink(u->core);
-            fprintf(f, "%s\n", s ? s->name : "");
+            fprintf(f, "%s\n", u->core->configured_default_sink ? u->core->configured_default_sink : "");
             fclose(f);
         } else
             pa_log("Failed to save default sink: %s", pa_cstrerror(errno));
@@ -116,8 +115,7 @@ static void save(struct userdata *u) {
 
     if (u->source_filename) {
         if ((f = pa_fopen_cloexec(u->source_filename, "w"))) {
-            pa_source *s = pa_namereg_get_default_source(u->core);
-            fprintf(f, "%s\n", s ? s->name : "");
+            fprintf(f, "%s\n", u->core->configured_default_source ? u->core->configured_default_source : "");
             fclose(f);
         } else
             pa_log("Failed to save default source: %s", pa_cstrerror(errno));
diff --git a/src/modules/module-equalizer-sink.c b/src/modules/module-equalizer-sink.c
index 9c25f3f..280ca25 100644
--- a/src/modules/module-equalizer-sink.c
+++ b/src/modules/module-equalizer-sink.c
@@ -251,13 +251,13 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
              * sink input is first shut down, the sink second. */
             if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
                 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) =
+            *((int64_t*) data) =
                 /* Get the latency of the master sink */
-                pa_sink_get_latency_within_thread(u->sink_input->sink) +
+                pa_sink_get_latency_within_thread(u->sink_input->sink, true) +
 
                 /* Add the latency internal to our sink input on top */
                 pa_bytes_to_usec(pa_memblockq_get_length(u->output_q) +
@@ -267,6 +267,18 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
             //+ pa_bytes_to_usec(u->latency * fs, ss)
             return 0;
         }
+
+        case PA_SINK_MESSAGE_SET_STATE: {
+            pa_sink_state_t new_state = (pa_sink_state_t) PA_PTR_TO_UINT(data);
+
+            /* When set to running or idle for the first time, request a rewind
+             * of the master sink to make sure we are heard immediately */
+            if ((new_state == PA_SINK_IDLE || new_state == PA_SINK_RUNNING) && u->sink->thread_info.state == PA_SINK_INIT) {
+                pa_log_debug("Requesting rewind due to state change.");
+                pa_sink_input_request_rewind(u->sink_input, 0, false, true, true);
+            }
+            break;
+        }
     }
 
     return pa_sink_process_msg(o, code, data, offset, chunk);
@@ -599,6 +611,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     pa_assert(chunk);
     pa_assert(u->sink);
 
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return -1;
+
     /* FIXME: Please clean this up. I see more commented code lines
      * than uncommented code lines. I am sorry, but I am too dumb to
      * understand this. */
@@ -724,6 +739,10 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
+    /* If the sink is not yet linked, there is nothing to rewind */
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return;
+
     if (u->sink->thread_info.rewind_nbytes > 0) {
         size_t max_rewrite;
 
@@ -797,7 +816,8 @@ static void sink_input_detach_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    pa_sink_detach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_detach_within_thread(u->sink);
 
     pa_sink_set_rtpoll(u->sink, NULL);
 }
@@ -825,7 +845,8 @@ static void sink_input_attach_cb(pa_sink_input *i) {
      * https://bugs.freedesktop.org/show_bug.cgi?id=53709 */
     pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
 
-    pa_sink_attach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_attach_within_thread(u->sink);
 }
 
 /* Called from main context */
@@ -835,11 +856,12 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    /* The order here matters! We first kill the sink input, followed
-     * by the sink. That means the sink callbacks must be protected
-     * against an unconnected sink input! */
-    pa_sink_input_unlink(u->sink_input);
+    /* The order here matters! We first kill the sink so that streams
+     * can properly be moved away while the sink input is still connected
+     * to the master. */
+    pa_sink_input_cork(u->sink_input, true);
     pa_sink_unlink(u->sink);
+    pa_sink_input_unlink(u->sink_input);
 
     pa_sink_input_unref(u->sink_input);
     u->sink_input = NULL;
@@ -850,22 +872,6 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_module_unload_request(u->module, true);
 }
 
-/* Called from IO thread context */
-static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
-    struct userdata *u;
-
-    pa_sink_input_assert_ref(i);
-    pa_assert_se(u = i->userdata);
-
-    /* If we are added for the first time, ask for a rewinding so that
-     * we are heard right-away. */
-    if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT) {
-        pa_log_debug("Requesting rewind due to state change.");
-        pa_sink_input_request_rewind(i, 0, false, true, true);
-    }
-}
-
 static void pack(char **strs, size_t len, char **packed, size_t *length) {
     size_t t_len = 0;
     size_t headers = (1+len) * sizeof(uint16_t);
@@ -1236,6 +1242,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
     pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
+    sink_input_data.flags |= PA_SINK_INPUT_START_CORKED;
 
     pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
     pa_sink_input_new_data_done(&sink_input_data);
@@ -1252,7 +1259,6 @@ int pa__init(pa_module*m) {
     u->sink_input->kill = sink_input_kill_cb;
     u->sink_input->attach = sink_input_attach_cb;
     u->sink_input->detach = sink_input_detach_cb;
-    u->sink_input->state_change = sink_input_state_change_cb;
     u->sink_input->may_move_to = sink_input_may_move_to_cb;
     u->sink_input->moving = sink_input_moving_cb;
     if (!use_volume_sharing)
@@ -1280,8 +1286,12 @@ int pa__init(pa_module*m) {
     /* load old parameters */
     load_state(u);
 
-    pa_sink_put(u->sink);
+    /* The order here is important. The input must be put first,
+     * otherwise streams might attach to the sink before the sink
+     * input is attached to the master. */
     pa_sink_input_put(u->sink_input);
+    pa_sink_put(u->sink);
+    pa_sink_input_cork(u->sink_input, false);
 
     pa_modargs_free(ma);
 
@@ -1326,13 +1336,15 @@ void pa__done(pa_module*m) {
      * destruction order! */
 
     if (u->sink_input)
-        pa_sink_input_unlink(u->sink_input);
+        pa_sink_input_cork(u->sink_input, true);
 
     if (u->sink)
         pa_sink_unlink(u->sink);
 
-    if (u->sink_input)
+    if (u->sink_input) {
+        pa_sink_input_unlink(u->sink_input);
         pa_sink_input_unref(u->sink_input);
+}
 
     if (u->sink)
         pa_sink_unref(u->sink);
diff --git a/src/modules/module-esound-sink.c b/src/modules/module-esound-sink.c
index 2ce0c85..59bef48 100644
--- a/src/modules/module-esound-sink.c
+++ b/src/modules/module-esound-sink.c
@@ -175,7 +175,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
             r = pa_smoother_get(u->smoother, pa_rtclock_now());
             w = pa_bytes_to_usec((uint64_t) u->offset + u->memchunk.length, &u->sink->sample_spec);
 
-            *((pa_usec_t*) data) = w > r ? w - r : 0;
+            *((int64_t*) data) = (int64_t)w - r;
             return 0;
         }
 
diff --git a/src/modules/module-filter-apply.c b/src/modules/module-filter-apply.c
index 364d68b..e91fb37 100644
--- a/src/modules/module-filter-apply.c
+++ b/src/modules/module-filter-apply.c
@@ -37,8 +37,9 @@
 
 #include "module-filter-apply-symdef.h"
 
-#define PA_PROP_FILTER_APPLY_MOVING "filter.apply.moving"
-#define PA_PROP_MDM_AUTO_FILTERED   "module-device-manager.auto_filtered"
+#define PA_PROP_FILTER_APPLY_PARAMETERS PA_PROP_FILTER_APPLY".%s.parameters"
+#define PA_PROP_FILTER_APPLY_MOVING     "filter.apply.moving"
+#define PA_PROP_MDM_AUTO_FILTERED       "module-device-manager.auto_filtered"
 
 PA_MODULE_AUTHOR("Colin Guthrie");
 PA_MODULE_DESCRIPTION("Load filter sinks automatically when needed");
@@ -56,6 +57,7 @@ static const char* const valid_modargs[] = {
 
 struct filter {
     char *name;
+    char *parameters;
     uint32_t module_index;
     pa_sink *sink;
     pa_sink *sink_master;
@@ -97,13 +99,14 @@ static int filter_compare(const void *a, const void *b) {
     return 0;
 }
 
-static struct filter *filter_new(const char *name, pa_sink *sink, pa_source *source) {
+static struct filter *filter_new(const char *name, const char *parameters, pa_sink *sink, pa_source *source) {
     struct filter *f;
 
     pa_assert(sink || source);
 
     f = pa_xnew(struct filter, 1);
     f->name = pa_xstrdup(name);
+    f->parameters = pa_xstrdup(parameters);
     f->sink_master = sink;
     f->source_master = source;
     f->module_index = PA_INVALID_INDEX;
@@ -114,13 +117,14 @@ static struct filter *filter_new(const char *name, pa_sink *sink, pa_source *sou
 }
 
 static void filter_free(struct filter *f) {
-    pa_assert(f);
-
-    pa_xfree(f->name);
-    pa_xfree(f);
+    if (f) {
+        pa_xfree(f->name);
+        pa_xfree(f->parameters);
+        pa_xfree(f);
+    }
 }
 
-static const char* should_filter(pa_object *o, bool is_sink_input) {
+static const char* get_filter_name(pa_object *o, bool is_sink_input) {
     const char *apply;
     pa_proplist *pl;
 
@@ -140,6 +144,23 @@ static const char* should_filter(pa_object *o, bool is_sink_input) {
     return NULL;
 }
 
+static const char* get_filter_parameters(pa_object *o, const char *want, bool is_sink_input) {
+    const char *parameters;
+    char *prop_parameters;
+    pa_proplist *pl;
+
+    if (is_sink_input)
+        pl = PA_SINK_INPUT(o)->proplist;
+    else
+        pl = PA_SOURCE_OUTPUT(o)->proplist;
+
+    prop_parameters = pa_sprintf_malloc(PA_PROP_FILTER_APPLY_PARAMETERS, want);
+    parameters = pa_proplist_gets(pl, prop_parameters);
+    pa_xfree(prop_parameters);
+
+    return parameters;
+}
+
 static bool should_group_filter(struct filter *filter) {
     return pa_streq(filter->name, "echo-cancel");
 }
@@ -359,7 +380,7 @@ static void move_objects_for_filter(struct userdata *u, pa_object *o, struct fil
 
 /* Note that we assume a filter will provide at most one sink and at most one
  * source (and at least one of either). */
-static void find_filters_for_module(struct userdata *u, pa_module *m, const char *name) {
+static void find_filters_for_module(struct userdata *u, pa_module *m, const char *name, const char *parameters) {
     uint32_t idx;
     pa_sink *sink;
     pa_source *source;
@@ -369,7 +390,7 @@ static void find_filters_for_module(struct userdata *u, pa_module *m, const char
         if (sink->module == m) {
             pa_assert(pa_sink_is_filter(sink));
 
-            fltr = filter_new(name, sink->input_to_master->sink, NULL);
+            fltr = filter_new(name, parameters, sink->input_to_master->sink, NULL);
             fltr->module_index = m->index;
             fltr->sink = sink;
 
@@ -382,7 +403,7 @@ static void find_filters_for_module(struct userdata *u, pa_module *m, const char
             pa_assert(pa_source_is_filter(source));
 
             if (!fltr) {
-                fltr = filter_new(name, NULL, source->output_from_master->source);
+                fltr = filter_new(name, parameters, NULL, source->output_from_master->source);
                 fltr->module_index = m->index;
                 fltr->source = source;
             } else {
@@ -412,6 +433,7 @@ static bool can_unload_module(struct userdata *u, uint32_t idx) {
 
 static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_input) {
     const char *want;
+    const char *parameters;
     bool done_something = false;
     pa_sink *sink = NULL;
     pa_source *source = NULL;
@@ -436,7 +458,7 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
         goto done;
 
     /* If the stream doesn't what any filter, then let it be. */
-    if ((want = should_filter(o, is_sink_input))) {
+    if ((want = get_filter_name(o, is_sink_input))) {
         /* We need to ensure the SI is playing on a sink of this type
          * attached to the sink it's "officially" playing on */
 
@@ -449,7 +471,11 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
             goto done;
         }
 
-        fltr = filter_new(want, sink, source);
+        /* Some filter modules might require parameters by default.
+         * (e.g 'plugin', 'label', 'control' of module-ladspa-sink) */
+        parameters = get_filter_parameters(o, want, is_sink_input);
+
+        fltr = filter_new(want, parameters, sink, source);
 
         if (should_group_filter(fltr) && !find_paired_master(u, fltr, o, is_sink_input)) {
             pa_log_debug("Want group filtering but don't have enough streams.");
@@ -460,16 +486,17 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
             char *args;
             pa_module *m;
 
-            args = pa_sprintf_malloc("autoloaded=1 %s%s %s%s",
+            args = pa_sprintf_malloc("autoloaded=1 %s%s %s%s %s",
                     fltr->sink_master ? "sink_master=" : "",
                     fltr->sink_master ? fltr->sink_master->name : "",
                     fltr->source_master ? "source_master=" : "",
-                    fltr->source_master ? fltr->source_master->name : "");
+                    fltr->source_master ? fltr->source_master->name : "",
+                    fltr->parameters ? fltr->parameters : "");
 
             pa_log_debug("Loading %s with arguments '%s'", module_name, args);
 
             if ((m = pa_module_load(u->core, module_name, args))) {
-                find_filters_for_module(u, m, want);
+                find_filters_for_module(u, m, want, parameters);
                 filter = pa_hashmap_get(u->filters, fltr);
                 done_something = true;
             }
@@ -506,7 +533,7 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
 
 done:
     pa_xfree(module_name);
-    pa_xfree(fltr);
+    filter_free(fltr);
 
     return PA_HOOK_OK;
 }
diff --git a/src/modules/module-intended-roles.c b/src/modules/module-intended-roles.c
index 60ec7e9..f906b88 100644
--- a/src/modules/module-intended-roles.c
+++ b/src/modules/module-intended-roles.c
@@ -69,7 +69,7 @@ static bool role_match(pa_proplist *proplist, const char *role) {
 
 static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_new_data *new_data, struct userdata *u) {
     const char *role;
-    pa_sink *s, *def;
+    pa_sink *s;
     uint32_t idx;
 
     pa_assert(c);
@@ -92,13 +92,13 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
     }
 
     /* Prefer the default sink over any other sink, just in case... */
-    if ((def = pa_namereg_get_default_sink(c)))
-        if (role_match(def->proplist, role) && pa_sink_input_new_data_set_sink(new_data, def, false))
+    if (c->default_sink)
+        if (role_match(c->default_sink->proplist, role) && pa_sink_input_new_data_set_sink(new_data, c->default_sink, false))
             return PA_HOOK_OK;
 
     /* @todo: favour the highest priority device, not the first one we find? */
     PA_IDXSET_FOREACH(s, c->sinks, idx) {
-        if (s == def)
+        if (s == c->default_sink)
             continue;
 
         if (!PA_SINK_IS_LINKED(pa_sink_get_state(s)))
@@ -113,7 +113,7 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
 
 static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_output_new_data *new_data, struct userdata *u) {
     const char *role;
-    pa_source *s, *def;
+    pa_source *s;
     uint32_t idx;
 
     pa_assert(c);
@@ -136,9 +136,9 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
     }
 
     /* Prefer the default source over any other source, just in case... */
-    if ((def = pa_namereg_get_default_source(c)))
-        if (role_match(def->proplist, role)) {
-            pa_source_output_new_data_set_source(new_data, def, false);
+    if (c->default_source)
+        if (role_match(c->default_source->proplist, role)) {
+            pa_source_output_new_data_set_source(new_data, c->default_source, false);
             return PA_HOOK_OK;
         }
 
@@ -146,7 +146,7 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
         if (s->monitor_of)
             continue;
 
-        if (s == def)
+        if (s == c->default_source)
             continue;
 
         if (!PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
@@ -259,7 +259,6 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
 static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, struct userdata *u) {
     pa_sink_input *si;
     uint32_t idx;
-    pa_sink *def;
 
     pa_assert(c);
     pa_assert(sink);
@@ -271,7 +270,7 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, str
         return PA_HOOK_OK;
 
     /* If there not default sink, then there is no sink at all */
-    if (!(def = pa_namereg_get_default_sink(c)))
+    if (!c->default_sink)
         return PA_HOOK_OK;
 
     PA_IDXSET_FOREACH(si, sink->inputs, idx) {
@@ -286,14 +285,14 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, str
             continue;
 
         /* Would the default sink fit? If so, let's use it */
-        if (def != sink && role_match(def->proplist, role))
-            if (pa_sink_input_move_to(si, def, false) >= 0)
+        if (c->default_sink != sink && role_match(c->default_sink->proplist, role))
+            if (pa_sink_input_move_to(si, c->default_sink, false) >= 0)
                 continue;
 
         /* Try to find some other fitting sink */
         /* @todo: favour the highest priority device, not the first one we find? */
         PA_IDXSET_FOREACH(d, c->sinks, jdx) {
-            if (d == def || d == sink)
+            if (d == c->default_sink || d == sink)
                 continue;
 
             if (!PA_SINK_IS_LINKED(pa_sink_get_state(d)))
@@ -311,7 +310,6 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, str
 static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *source, struct userdata *u) {
     pa_source_output *so;
     uint32_t idx;
-    pa_source *def;
 
     pa_assert(c);
     pa_assert(source);
@@ -323,7 +321,7 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
         return PA_HOOK_OK;
 
     /* If there not default source, then there is no source at all */
-    if (!(def = pa_namereg_get_default_source(c)))
+    if (!c->default_source)
         return PA_HOOK_OK;
 
     PA_IDXSET_FOREACH(so, source->outputs, idx) {
@@ -341,15 +339,16 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
             continue;
 
         /* Would the default source fit? If so, let's use it */
-        if (def != source && role_match(def->proplist, role) && !source->monitor_of == !def->monitor_of) {
-            pa_source_output_move_to(so, def, false);
+        if (c->default_source != source && role_match(c->default_source->proplist, role)
+                && !source->monitor_of == !c->default_source->monitor_of) {
+            pa_source_output_move_to(so, c->default_source, false);
             continue;
         }
 
         /* Try to find some other fitting source */
         /* @todo: favour the highest priority device, not the first one we find? */
         PA_IDXSET_FOREACH(d, c->sources, jdx) {
-            if (d == def || d == source)
+            if (d == c->default_source || d == source)
                 continue;
 
             if (!PA_SOURCE_IS_LINKED(pa_source_get_state(d)))
diff --git a/src/modules/module-ladspa-sink.c b/src/modules/module-ladspa-sink.c
index c11fa5e..c2c7c85 100644
--- a/src/modules/module-ladspa-sink.c
+++ b/src/modules/module-ladspa-sink.c
@@ -55,6 +55,7 @@ PA_MODULE_USAGE(
     _("sink_name=<name for the sink> "
       "sink_properties=<properties for the sink> "
       "master=<name of sink to filter> "
+      "sink_master=<name of sink to filter> "
       "format=<sample format> "
       "rate=<sample rate> "
       "channels=<number of channels> "
@@ -63,9 +64,11 @@ PA_MODULE_USAGE(
       "label=<ladspa plugin label> "
       "control=<comma separated list of input control values> "
       "input_ladspaport_map=<comma separated list of input LADSPA port names> "
-      "output_ladspaport_map=<comma separated list of output LADSPA port names> "));
+      "output_ladspaport_map=<comma separated list of output LADSPA port names> "
+      "autoloaded=<set if this module is being loaded automatically> "));
 
 #define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
+#define DEFAULT_AUTOLOADED false
 
 /* PLEASE NOTICE: The PortAudio ports and the LADSPA ports are two different concepts.
 They are not related and where possible the names of the LADSPA port variables contains "ladspa" to avoid confusion */
@@ -99,12 +102,14 @@ struct userdata {
 #endif
 
     bool auto_desc;
+    bool autoloaded;
 };
 
 static const char* const valid_modargs[] = {
     "sink_name",
     "sink_properties",
-    "master",
+    "master",  /* Will be deprecated. */
+    "sink_master",
     "format",
     "rate",
     "channels",
@@ -114,6 +119,7 @@ static const char* const valid_modargs[] = {
     "control",
     "input_ladspaport_map",
     "output_ladspaport_map",
+    "autoloaded",
     NULL
 };
 
@@ -341,15 +347,15 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
          * make sure we don't access it in that time. Also, the
          * sink input is first shut down, the sink second. */
         if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
-                !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
-            *((pa_usec_t*) data) = 0;
+            !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
+            *((int64_t*) data) = 0;
             return 0;
         }
 
-        *((pa_usec_t*) data) =
+        *((int64_t*) data) =
 
             /* Get the latency of the master sink */
-            pa_sink_get_latency_within_thread(u->sink_input->sink) +
+            pa_sink_get_latency_within_thread(u->sink_input->sink, true) +
 
             /* Add the latency internal to our sink input on top */
             pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
@@ -367,6 +373,18 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
         connect_control_ports(u);
 
         return 0;
+
+        case PA_SINK_MESSAGE_SET_STATE: {
+            pa_sink_state_t new_state = (pa_sink_state_t) PA_PTR_TO_UINT(data);
+
+            /* When set to running or idle for the first time, request a rewind
+             * of the master sink to make sure we are heard immediately */
+            if ((new_state == PA_SINK_IDLE || new_state == PA_SINK_RUNNING) && u->sink->thread_info.state == PA_SINK_INIT) {
+                pa_log_debug("Requesting rewind due to state change.");
+                pa_sink_input_request_rewind(u->sink_input, 0, false, true, true);
+            }
+            break;
+        }
     }
 
     return pa_sink_process_msg(o, code, data, offset, chunk);
@@ -447,6 +465,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     pa_assert(chunk);
     pa_assert_se(u = i->userdata);
 
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return -1;
+
     /* Hmm, process any rewind request that might be queued up */
     pa_sink_process_rewind(u->sink, 0);
 
@@ -499,6 +520,10 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
+    /* If the sink is not yet linked, there is nothing to rewind */
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return;
+
     if (u->sink->thread_info.rewind_nbytes > 0) {
         size_t max_rewrite;
 
@@ -577,7 +602,8 @@ static void sink_input_detach_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    pa_sink_detach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_detach_within_thread(u->sink);
 
     pa_sink_set_rtpoll(u->sink, NULL);
 }
@@ -598,7 +624,8 @@ static void sink_input_attach_cb(pa_sink_input *i) {
      * https://bugs.freedesktop.org/show_bug.cgi?id=53709 */
     pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
 
-    pa_sink_attach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_attach_within_thread(u->sink);
 }
 
 /* Called from main context */
@@ -608,11 +635,12 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    /* The order here matters! We first kill the sink input, followed
-     * by the sink. That means the sink callbacks must be protected
-     * against an unconnected sink input! */
-    pa_sink_input_unlink(u->sink_input);
+    /* The order here matters! We first kill the sink so that streams
+     * can properly be moved away while the sink input is still connected
+     * to the master. */
+    pa_sink_input_cork(u->sink_input, true);
     pa_sink_unlink(u->sink);
+    pa_sink_input_unlink(u->sink_input);
 
     pa_sink_input_unref(u->sink_input);
     u->sink_input = NULL;
@@ -623,20 +651,17 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_module_unload_request(u->module, true);
 }
 
-/* Called from IO thread context */
-static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
+/* Called from main context */
+static bool sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
     struct userdata *u;
 
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    /* If we are added for the first time, ask for a rewinding so that
-     * we are heard right-away. */
-    if (PA_SINK_INPUT_IS_LINKED(state) &&
-            i->thread_info.state == PA_SINK_INPUT_INIT) {
-        pa_log_debug("Requesting rewind due to state change.");
-        pa_sink_input_request_rewind(i, 0, false, true, true);
-    }
+    if (u->autoloaded)
+        return false;
+
+    return u->sink != dest;
 }
 
 /* Called from main context */
@@ -948,6 +973,7 @@ int pa__init(pa_module*m) {
     pa_channel_map map;
     pa_modargs *ma;
     char *t;
+    const char *master_name;
     pa_sink *master;
     pa_sink_input_new_data sink_input_data;
     pa_sink_new_data sink_data;
@@ -968,8 +994,17 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
-    if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SINK))) {
-        pa_log("Master sink not found");
+    master_name = pa_modargs_get_value(ma, "sink_master", NULL);
+    if (!master_name) {
+        master_name = pa_modargs_get_value(ma, "master", NULL);
+        if (master_name)
+            pa_log_warn("The 'master' module argument is deprecated and may be removed in the future, "
+                        "please use the 'sink_master' argument instead.");
+    }
+
+    master = pa_namereg_get(m->core, master_name, PA_NAMEREG_SINK);
+    if (!master) {
+        pa_log("Master sink not found.");
         goto fail;
     }
 
@@ -1231,6 +1266,12 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
+    u->autoloaded = DEFAULT_AUTOLOADED;
+    if (pa_modargs_get_value_boolean(ma, "autoloaded", &u->autoloaded) < 0) {
+        pa_log("Failed to parse autoloaded value");
+        goto fail;
+    }
+
     if ((u->auto_desc = !pa_proplist_contains(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION))) {
         const char *z;
 
@@ -1266,6 +1307,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
     pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
+    sink_input_data.flags |= PA_SINK_INPUT_START_CORKED;
 
     pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
     pa_sink_input_new_data_done(&sink_input_data);
@@ -1282,7 +1324,7 @@ int pa__init(pa_module*m) {
     u->sink_input->kill = sink_input_kill_cb;
     u->sink_input->attach = sink_input_attach_cb;
     u->sink_input->detach = sink_input_detach_cb;
-    u->sink_input->state_change = sink_input_state_change_cb;
+    u->sink_input->may_move_to = sink_input_may_move_to_cb;
     u->sink_input->moving = sink_input_moving_cb;
     u->sink_input->mute_changed = sink_input_mute_changed_cb;
     u->sink_input->userdata = u;
@@ -1293,8 +1335,12 @@ int pa__init(pa_module*m) {
     u->memblockq = pa_memblockq_new("module-ladspa-sink memblockq", 0, MEMBLOCKQ_MAXLENGTH, 0, &ss, 1, 1, 0, &silence);
     pa_memblock_unref(silence.memblock);
 
-    pa_sink_put(u->sink);
+    /* The order here is important. The input must be put first,
+     * otherwise streams might attach to the sink before the sink
+     * input is attached to the master. */
     pa_sink_input_put(u->sink_input);
+    pa_sink_put(u->sink);
+    pa_sink_input_cork(u->sink_input, false);
 
 #ifdef HAVE_DBUS
     dbus_init(u);
@@ -1339,13 +1385,15 @@ void pa__done(pa_module*m) {
 #endif
 
     if (u->sink_input)
-        pa_sink_input_unlink(u->sink_input);
+        pa_sink_input_cork(u->sink_input, true);
 
     if (u->sink)
         pa_sink_unlink(u->sink);
 
-    if (u->sink_input)
+    if (u->sink_input) {
+        pa_sink_input_unlink(u->sink_input);
         pa_sink_input_unref(u->sink_input);
+    }
 
     if (u->sink)
         pa_sink_unref(u->sink);
diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c
index 9410c98..ded59e1 100644
--- a/src/modules/module-loopback.c
+++ b/src/modules/module-loopback.c
@@ -61,12 +61,18 @@ PA_MODULE_USAGE(
 
 #define MEMBLOCKQ_MAXLENGTH (1024*1024*32)
 
+#define MIN_DEVICE_LATENCY (2.5*PA_USEC_PER_MSEC)
+
 #define DEFAULT_ADJUST_TIME_USEC (10*PA_USEC_PER_SEC)
 
+typedef struct loopback_msg loopback_msg;
+
 struct userdata {
     pa_core *core;
     pa_module *module;
 
+    loopback_msg *msg;
+
     pa_sink_input *sink_input;
     pa_source_output *source_output;
 
@@ -76,28 +82,71 @@ struct userdata {
     pa_rtpoll_item *rtpoll_item_read, *rtpoll_item_write;
 
     pa_time_event *time_event;
+
+    /* Values from command line configuration */
+    pa_usec_t latency;
     pa_usec_t adjust_time;
 
-    int64_t recv_counter;
-    int64_t send_counter;
+    /* Latency boundaries and current values */
+    pa_usec_t min_source_latency;
+    pa_usec_t max_source_latency;
+    pa_usec_t min_sink_latency;
+    pa_usec_t max_sink_latency;
+    pa_usec_t configured_sink_latency;
+    pa_usec_t configured_source_latency;
+    int64_t source_latency_offset;
+    int64_t sink_latency_offset;
+    pa_usec_t minimum_latency;
 
-    size_t skip;
-    pa_usec_t latency;
+    /* lower latency limit found by underruns */
+    pa_usec_t underrun_latency_limit;
+
+    /* Various counters */
+    uint32_t iteration_counter;
+    uint32_t underrun_counter;
 
-    bool in_pop;
+    bool fixed_alsa_source;
 
+    /* Used for sink input and source output snapshots */
     struct {
         int64_t send_counter;
         pa_usec_t source_latency;
         pa_usec_t source_timestamp;
 
         int64_t recv_counter;
-        size_t sink_input_buffer;
+        size_t loopback_memblockq_length;
         pa_usec_t sink_latency;
         pa_usec_t sink_timestamp;
     } latency_snapshot;
+
+    /* Input thread variable */
+    int64_t send_counter;
+
+    /* Output thread variables */
+    struct {
+        int64_t recv_counter;
+
+        /* Copied from main thread */
+        pa_usec_t effective_source_latency;
+        pa_usec_t minimum_latency;
+
+        /* Various booleans */
+        bool in_pop;
+        bool pop_called;
+        bool pop_adjust;
+        bool first_pop_done;
+        bool push_called;
+    } output_thread_info;
 };
 
+struct loopback_msg {
+    pa_msgobject parent;
+    struct userdata *userdata;
+};
+
+PA_DEFINE_PRIVATE_CLASS(loopback_msg, pa_msgobject);
+#define LOOPBACK_MSG(o) (loopback_msg_cast(o))
+
 static const char* const valid_modargs[] = {
     "source",
     "sink",
@@ -118,13 +167,22 @@ static const char* const valid_modargs[] = {
 enum {
     SINK_INPUT_MESSAGE_POST = PA_SINK_INPUT_MESSAGE_MAX,
     SINK_INPUT_MESSAGE_REWIND,
-    SINK_INPUT_MESSAGE_LATENCY_SNAPSHOT
+    SINK_INPUT_MESSAGE_LATENCY_SNAPSHOT,
+    SINK_INPUT_MESSAGE_SOURCE_CHANGED,
+    SINK_INPUT_MESSAGE_SET_EFFECTIVE_SOURCE_LATENCY,
+    SINK_INPUT_MESSAGE_UPDATE_MIN_LATENCY,
 };
 
 enum {
     SOURCE_OUTPUT_MESSAGE_LATENCY_SNAPSHOT = PA_SOURCE_OUTPUT_MESSAGE_MAX,
 };
 
+enum {
+    LOOPBACK_MESSAGE_SOURCE_LATENCY_RANGE_CHANGED,
+    LOOPBACK_MESSAGE_SINK_LATENCY_RANGE_CHANGED,
+    LOOPBACK_MESSAGE_UNDERRUN,
+};
+
 static void enable_adjust_timer(struct userdata *u, bool enable);
 
 /* Called from main context */
@@ -163,7 +221,7 @@ static void teardown(struct userdata *u) {
     }
 }
 
-/* rate controller
+/* rate controller, called from main context
  * - maximum deviation from base rate is less than 1%
  * - can create audible artifacts by changing the rate too quickly
  * - exhibits hunting with USB or Bluetooth sources
@@ -184,10 +242,68 @@ static uint32_t rate_controller(
     return new_rate;
 }
 
+/* Called from main thread.
+ * It has been a matter of discussion how to correctly calculate the minimum
+ * latency that module-loopback can deliver with a given source and sink.
+ * The calculation has been placed in a separate function so that the definition
+ * can easily be changed. The resulting estimate is not very exact because it
+ * depends on the reported latency ranges. In cases were the lower bounds of
+ * source and sink latency are not reported correctly (USB) the result will
+ * be wrong. */
+static void update_minimum_latency(struct userdata *u, pa_sink *sink, bool print_msg) {
+
+    if (u->underrun_latency_limit)
+        /* If we already detected a real latency limit because of underruns, use it */
+        u->minimum_latency = u->underrun_latency_limit;
+
+    else {
+        /* Calculate latency limit from latency ranges */
+
+        u->minimum_latency = u->min_sink_latency;
+        if (u->fixed_alsa_source)
+            /* If we are using an alsa source with fixed latency, we will get a wakeup when
+             * one fragment is filled, and then we empty the source buffer, so the source
+             * latency never grows much beyond one fragment (assuming that the CPU doesn't
+             * cause a bottleneck). */
+            u->minimum_latency += u->core->default_fragment_size_msec * PA_USEC_PER_MSEC;
+
+        else
+            /* In all other cases the source will deliver new data at latest after one source latency.
+             * Make sure there is enough data available that the sink can keep on playing until new
+             * data is pushed. */
+            u->minimum_latency += u->min_source_latency;
+
+        /* Multiply by 1.1 as a safety margin for delays that are proportional to the buffer sizes */
+        u->minimum_latency *= 1.1;
+
+        /* Add 1.5 ms as a safety margin for delays not related to the buffer sizes */
+        u->minimum_latency += 1.5 * PA_USEC_PER_MSEC;
+    }
+
+    /* Add the latency offsets */
+    if (-(u->sink_latency_offset + u->source_latency_offset) <= (int64_t)u->minimum_latency)
+        u->minimum_latency += u->sink_latency_offset + u->source_latency_offset;
+    else
+        u->minimum_latency = 0;
+
+    /* If the sink is valid, send a message to update the minimum latency to
+     * the output thread, else set the variable directly */
+    if (sink)
+        pa_asyncmsgq_send(sink->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_UPDATE_MIN_LATENCY, NULL, u->minimum_latency, NULL);
+    else
+        u->output_thread_info.minimum_latency = u->minimum_latency;
+
+    if (print_msg) {
+        pa_log_info("Minimum possible end to end latency: %0.2f ms", (double)u->minimum_latency / PA_USEC_PER_MSEC);
+        if (u->latency < u->minimum_latency)
+            pa_log_warn("Configured latency of %0.2f ms is smaller than minimum latency, using minimum instead", (double)u->latency / PA_USEC_PER_MSEC);
+    }
+}
+
 /* Called from main context */
 static void adjust_rates(struct userdata *u) {
     size_t buffer;
-    uint32_t old_rate, base_rate, new_rate;
+    uint32_t old_rate, base_rate, new_rate, run_hours;
     int32_t latency_difference;
     pa_usec_t current_buffer_latency, snapshot_delay, current_source_sink_latency, current_latency, latency_at_optimum_rate;
     pa_usec_t final_latency;
@@ -195,11 +311,31 @@ static void adjust_rates(struct userdata *u) {
     pa_assert(u);
     pa_assert_ctl_context();
 
+    /* Runtime and counters since last change of source or sink
+     * or source/sink latency */
+    run_hours = u->iteration_counter * u->adjust_time / PA_USEC_PER_SEC / 3600;
+    u->iteration_counter +=1;
+
+    /* If we are seeing underruns then the latency is too small */
+    if (u->underrun_counter > 2) {
+        u->underrun_latency_limit = PA_MAX(u->latency, u->minimum_latency) + 5 * PA_USEC_PER_MSEC;
+        u->underrun_latency_limit = PA_CLIP_SUB((int64_t)u->underrun_latency_limit, u->sink_latency_offset + u->source_latency_offset);
+        update_minimum_latency(u, u->sink_input->sink, false);
+        pa_log_warn("Too many underruns, increasing latency to %0.2f ms", (double)u->minimum_latency / PA_USEC_PER_MSEC);
+        u->underrun_counter = 0;
+    }
+
+    /* Allow one underrun per hour */
+    if (u->iteration_counter * u->adjust_time / PA_USEC_PER_SEC / 3600 > run_hours) {
+        u->underrun_counter = PA_CLIP_SUB(u->underrun_counter, 1u);
+        pa_log_info("Underrun counter: %u", u->underrun_counter);
+    }
+
     /* Rates and latencies*/
     old_rate = u->sink_input->sample_spec.rate;
     base_rate = u->source_output->sample_spec.rate;
 
-    buffer = u->latency_snapshot.sink_input_buffer;
+    buffer = u->latency_snapshot.loopback_memblockq_length;
     if (u->latency_snapshot.recv_counter <= u->latency_snapshot.send_counter)
         buffer += (size_t) (u->latency_snapshot.send_counter - u->latency_snapshot.recv_counter);
     else
@@ -215,7 +351,7 @@ static void adjust_rates(struct userdata *u) {
     /* Latency at base rate */
     latency_at_optimum_rate = current_source_sink_latency + current_buffer_latency * old_rate / base_rate;
 
-    final_latency = u->latency;
+    final_latency = PA_MAX(u->latency, u->minimum_latency);
     latency_difference = (int32_t)((int64_t)latency_at_optimum_rate - final_latency);
 
     pa_log_debug("Loopback overall latency is %0.2f ms + %0.2f ms + %0.2f ms = %0.2f ms",
@@ -279,30 +415,94 @@ static void update_adjust_timer(struct userdata *u) {
         enable_adjust_timer(u, true);
 }
 
+/* Called from main thread
+ * Calculates minimum and maximum possible latency for source and sink */
+static void update_latency_boundaries(struct userdata *u, pa_source *source, pa_sink *sink) {
+    const char *s;
+
+    if (source) {
+        /* Source latencies */
+        u->fixed_alsa_source = false;
+        if (source->flags & PA_SOURCE_DYNAMIC_LATENCY)
+            pa_source_get_latency_range(source, &u->min_source_latency, &u->max_source_latency);
+        else {
+            u->min_source_latency = pa_source_get_fixed_latency(source);
+            u->max_source_latency = u->min_source_latency;
+            if ((s = pa_proplist_gets(source->proplist, PA_PROP_DEVICE_API))) {
+                if (pa_streq(s, "alsa"))
+                    u->fixed_alsa_source = true;
+            }
+        }
+        /* Source offset */
+        u->source_latency_offset = source->port_latency_offset;
+
+        /* Latencies below 2.5 ms cause problems, limit source latency if possible */
+        if (u->max_source_latency >= MIN_DEVICE_LATENCY)
+            u->min_source_latency = PA_MAX(u->min_source_latency, MIN_DEVICE_LATENCY);
+        else
+            u->min_source_latency = u->max_source_latency;
+    }
+
+    if (sink) {
+        /* Sink latencies */
+        if (sink->flags & PA_SINK_DYNAMIC_LATENCY)
+            pa_sink_get_latency_range(sink, &u->min_sink_latency, &u->max_sink_latency);
+        else {
+            u->min_sink_latency = pa_sink_get_fixed_latency(sink);
+            u->max_sink_latency = u->min_sink_latency;
+        }
+        /* Sink offset */
+        u->sink_latency_offset = sink->port_latency_offset;
+
+        /* Latencies below 2.5 ms cause problems, limit sink latency if possible */
+        if (u->max_sink_latency >= MIN_DEVICE_LATENCY)
+            u->min_sink_latency = PA_MAX(u->min_sink_latency, MIN_DEVICE_LATENCY);
+        else
+            u->min_sink_latency = u->max_sink_latency;
+    }
+
+    update_minimum_latency(u, sink, true);
+}
+
+/* Called from output context
+ * Sets the memblockq to the configured latency corrected by latency_offset_usec */
+static void memblockq_adjust(struct userdata *u, pa_usec_t latency_offset_usec, bool allow_push) {
+    size_t current_memblockq_length, requested_memblockq_length, buffer_correction;
+    pa_usec_t requested_buffer_latency, final_latency;
+
+    final_latency = PA_MAX(u->latency, u->output_thread_info.minimum_latency);
+    requested_buffer_latency = PA_CLIP_SUB(final_latency, latency_offset_usec);
+    requested_memblockq_length = pa_usec_to_bytes(requested_buffer_latency, &u->sink_input->sample_spec);
+    current_memblockq_length = pa_memblockq_get_length(u->memblockq);
+
+    if (current_memblockq_length > requested_memblockq_length) {
+        /* Drop audio from queue */
+        buffer_correction = current_memblockq_length - requested_memblockq_length;
+        pa_log_info("Dropping %lu usec of audio from queue", pa_bytes_to_usec(buffer_correction, &u->sink_input->sample_spec));
+        pa_memblockq_drop(u->memblockq, buffer_correction);
+
+    } else if (current_memblockq_length < requested_memblockq_length && allow_push) {
+        /* Add silence to queue */
+        buffer_correction = requested_memblockq_length - current_memblockq_length;
+        pa_log_info("Adding %lu usec of silence to queue", pa_bytes_to_usec(buffer_correction, &u->sink_input->sample_spec));
+        pa_memblockq_seek(u->memblockq, (int64_t)buffer_correction, PA_SEEK_RELATIVE, true);
+    }
+}
+
 /* Called from input thread context */
 static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk) {
     struct userdata *u;
-    pa_memchunk copy;
+    pa_usec_t push_time, current_source_latency;
 
     pa_source_output_assert_ref(o);
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
-    if (u->skip >= chunk->length) {
-        u->skip -= chunk->length;
-        return;
-    }
+    /* Send current source latency and timestamp with the message */
+    push_time = pa_rtclock_now();
+    current_source_latency = pa_source_get_latency_within_thread(u->source_output->source, false);
 
-    if (u->skip > 0) {
-        copy = *chunk;
-        copy.index += u->skip;
-        copy.length -= u->skip;
-        u->skip = 0;
-
-        chunk = ©
-    }
-
-    pa_asyncmsgq_post(u->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_POST, NULL, 0, chunk, NULL);
+    pa_asyncmsgq_post(u->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_POST, PA_UINT_TO_PTR(current_source_latency), push_time, chunk, NULL);
     u->send_counter += (int64_t) chunk->length;
 }
 
@@ -318,7 +518,7 @@ static void source_output_process_rewind_cb(pa_source_output *o, size_t nbytes)
     u->send_counter -= (int64_t) nbytes;
 }
 
-/* Called from output thread context */
+/* Called from input thread context */
 static int source_output_process_msg_cb(pa_msgobject *obj, int code, void *data, int64_t offset, pa_memchunk *chunk) {
     struct userdata *u = PA_SOURCE_OUTPUT(obj)->userdata;
 
@@ -331,7 +531,7 @@ static int source_output_process_msg_cb(pa_msgobject *obj, int code, void *data,
 
             u->latency_snapshot.send_counter = u->send_counter;
             /* Add content of delay memblockq to the source latency */
-            u->latency_snapshot.source_latency = pa_source_get_latency_within_thread(u->source_output->source) +
+            u->latency_snapshot.source_latency = pa_source_get_latency_within_thread(u->source_output->source, false) +
                                                  pa_bytes_to_usec(length, &u->source_output->source->sample_spec);
             u->latency_snapshot.source_timestamp = pa_rtclock_now();
 
@@ -342,7 +542,53 @@ static int source_output_process_msg_cb(pa_msgobject *obj, int code, void *data,
     return pa_source_output_process_msg(obj, code, data, offset, chunk);
 }
 
-/* Called from output thread context */
+/* Called from main thread.
+ * Get current effective latency of the source. If the source is in use with
+ * smaller latency than the configured latency, it will continue running with
+ * the smaller value when the source output is switched to the source. */
+static void update_effective_source_latency(struct userdata *u, pa_source *source, pa_sink *sink) {
+    pa_usec_t effective_source_latency;
+
+    effective_source_latency = u->configured_source_latency;
+
+    if (source) {
+        effective_source_latency = pa_source_get_requested_latency(source);
+        if (effective_source_latency == 0 || effective_source_latency > u->configured_source_latency)
+            effective_source_latency = u->configured_source_latency;
+    }
+
+    /* If the sink is valid, send a message to the output thread, else set the variable directly */
+    if (sink)
+        pa_asyncmsgq_send(sink->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_SET_EFFECTIVE_SOURCE_LATENCY, NULL, (int64_t)effective_source_latency, NULL);
+    else
+       u->output_thread_info.effective_source_latency = effective_source_latency;
+}
+
+/* Called from main thread.
+ * Set source output latency to one third of the overall latency if possible.
+ * The choice of one third is rather arbitrary somewhere between the minimum
+ * possible latency which would cause a lot of CPU load and half the configured
+ * latency which would quickly lead to underruns */
+static void set_source_output_latency(struct userdata *u, pa_source *source) {
+    pa_usec_t latency, requested_latency;
+
+    requested_latency = u->latency / 3;
+
+    /* Normally we try to configure sink and source latency equally. If the
+     * sink latency cannot match the requested source latency try to set the
+     * source latency to a smaller value to avoid underruns */
+    if (u->min_sink_latency > requested_latency) {
+        latency = PA_MAX(u->latency, u->minimum_latency);
+        requested_latency = (latency - u->min_sink_latency) / 2;
+    }
+
+    latency = PA_CLAMP(requested_latency , u->min_source_latency, u->max_source_latency);
+    u->configured_source_latency = pa_source_output_set_requested_latency(u->source_output, latency);
+    if (u->configured_source_latency != requested_latency)
+        pa_log_warn("Cannot set requested source latency of %0.2f ms, adjusting to %0.2f ms", (double)requested_latency / PA_USEC_PER_MSEC, (double)u->configured_source_latency / PA_USEC_PER_MSEC);
+}
+
+/* Called from input thread context */
 static void source_output_attach_cb(pa_source_output *o) {
     struct userdata *u;
 
@@ -356,7 +602,7 @@ static void source_output_attach_cb(pa_source_output *o) {
             u->asyncmsgq);
 }
 
-/* Called from output thread context */
+/* Called from input thread context */
 static void source_output_detach_cb(pa_source_output *o) {
     struct userdata *u;
 
@@ -370,24 +616,6 @@ static void source_output_detach_cb(pa_source_output *o) {
     }
 }
 
-/* Called from output thread context */
-static void source_output_state_change_cb(pa_source_output *o, pa_source_output_state_t state) {
-    struct userdata *u;
-
-    pa_source_output_assert_ref(o);
-    pa_source_output_assert_io_context(o);
-    pa_assert_se(u = o->userdata);
-
-    if (PA_SOURCE_OUTPUT_IS_LINKED(state) && o->thread_info.state == PA_SOURCE_OUTPUT_INIT) {
-
-        u->skip = pa_usec_to_bytes(PA_CLIP_SUB(pa_source_get_latency_within_thread(o->source),
-                                               u->latency),
-                                   &o->sample_spec);
-
-        pa_log_info("Skipping %lu bytes", (unsigned long) u->skip);
-    }
-}
-
 /* Called from main thread */
 static void source_output_kill_cb(pa_source_output *o) {
     struct userdata *u;
@@ -435,12 +663,37 @@ static void source_output_moving_cb(pa_source_output *o, pa_source *dest) {
     if ((n = pa_proplist_gets(dest->proplist, PA_PROP_DEVICE_ICON_NAME)))
         pa_sink_input_set_property(u->sink_input, PA_PROP_DEVICE_ICON_NAME, n);
 
+    /* Set latency and calculate latency limits */
+    u->underrun_latency_limit = 0;
+    update_latency_boundaries(u, dest, u->sink_input->sink);
+    set_source_output_latency(u, dest);
+    update_effective_source_latency(u, dest, u->sink_input->sink);
+
+    /* Uncork the sink input unless the destination is suspended for other
+     * reasons than idle. */
     if (pa_source_get_state(dest) == PA_SOURCE_SUSPENDED)
-        pa_sink_input_cork(u->sink_input, true);
+        pa_sink_input_cork(u->sink_input, (dest->suspend_cause != PA_SUSPEND_IDLE));
     else
         pa_sink_input_cork(u->sink_input, false);
 
     update_adjust_timer(u);
+
+    /* Reset counters */
+    u->iteration_counter = 0;
+    u->underrun_counter = 0;
+
+    /* Send a mesage to the output thread that the source has changed.
+     * If the sink is invalid here during a profile switching situation
+     * we can safely set push_called to false directly. */
+    if (u->sink_input->sink)
+        pa_asyncmsgq_send(u->sink_input->sink->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_SOURCE_CHANGED, NULL, 0, NULL);
+    else
+        u->output_thread_info.push_called = false;
+
+    /* The sampling rate may be far away from the default rate if we are still
+     * recovering from a previous source or sink change, so reset rate to
+     * default before moving the source. */
+    pa_sink_input_set_rate(u->sink_input, u->source_output->sample_spec.rate);
 }
 
 /* Called from main thread */
@@ -451,11 +704,35 @@ static void source_output_suspend_cb(pa_source_output *o, bool suspended) {
     pa_assert_ctl_context();
     pa_assert_se(u = o->userdata);
 
+    /* If the source has been suspended, we need to handle this like
+     * a source change when the source is resumed */
+    if (suspended) {
+        if (u->sink_input->sink)
+            pa_asyncmsgq_send(u->sink_input->sink->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_SOURCE_CHANGED, NULL, 0, NULL);
+        else
+            u->output_thread_info.push_called = false;
+
+    } else
+        /* Get effective source latency on unsuspend */
+        update_effective_source_latency(u, u->source_output->source, u->sink_input->sink);
+
     pa_sink_input_cork(u->sink_input, suspended);
 
     update_adjust_timer(u);
 }
 
+/* Called from input thread context */
+static void update_source_latency_range_cb(pa_source_output *i) {
+    struct userdata *u;
+
+    pa_source_output_assert_ref(i);
+    pa_source_output_assert_io_context(i);
+    pa_assert_se(u = i->userdata);
+
+    /* Source latency may have changed */
+    pa_asyncmsgq_post(pa_thread_mq_get()->outq, PA_MSGOBJECT(u->msg), LOOPBACK_MESSAGE_SOURCE_LATENCY_RANGE_CHANGED, NULL, 0, NULL, NULL);
+}
+
 /* Called from output thread context */
 static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk) {
     struct userdata *u;
@@ -465,10 +742,23 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     pa_assert_se(u = i->userdata);
     pa_assert(chunk);
 
-    u->in_pop = true;
+    /* It seems necessary to handle outstanding push messages here, though it is not clear
+     * why. Removing this part leads to underruns when low latencies are configured. */
+    u->output_thread_info.in_pop = true;
     while (pa_asyncmsgq_process_one(u->asyncmsgq) > 0)
         ;
-    u->in_pop = false;
+    u->output_thread_info.in_pop = false;
+
+    /* While pop has not been called, latency adjustments in SINK_INPUT_MESSAGE_POST are
+     * enabled. Disable them on second pop and enable the final adjustment during the
+     * next push. The adjustment must be done on the next push, because there is no way
+     * to retrieve the source latency here. We are waiting for the second pop, because
+     * the first pop may be called before the sink is actually started. */
+    if (!u->output_thread_info.pop_called && u->output_thread_info.first_pop_done) {
+        u->output_thread_info.pop_adjust = true;
+        u->output_thread_info.pop_called = true;
+    }
+    u->output_thread_info.first_pop_done = true;
 
     if (pa_memblockq_peek(u->memblockq, chunk) < 0) {
         pa_log_info("Could not peek into queue");
@@ -478,6 +768,11 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     chunk->length = PA_MIN(chunk->length, nbytes);
     pa_memblockq_drop(u->memblockq, chunk->length);
 
+    /* Adjust the memblockq to ensure that there is
+     * enough data in the queue to avoid underruns. */
+    if (!u->output_thread_info.push_called)
+        memblockq_adjust(u, 0, true);
+
     return 0;
 }
 
@@ -496,13 +791,13 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
 static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, int64_t offset, pa_memchunk *chunk) {
     struct userdata *u = PA_SINK_INPUT(obj)->userdata;
 
+    pa_sink_input_assert_io_context(u->sink_input);
+
     switch (code) {
 
         case PA_SINK_INPUT_MESSAGE_GET_LATENCY: {
             pa_usec_t *r = data;
 
-            pa_sink_input_assert_io_context(u->sink_input);
-
             *r = pa_bytes_to_usec(pa_memblockq_get_length(u->memblockq), &u->sink_input->sample_spec);
 
             /* Fall through, the default handler will add in the extra
@@ -512,39 +807,83 @@ static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, in
 
         case SINK_INPUT_MESSAGE_POST:
 
-            pa_sink_input_assert_io_context(u->sink_input);
+            pa_memblockq_push_align(u->memblockq, chunk);
+
+            /* If push has not been called yet, latency adjustments in sink_input_pop_cb()
+             * are enabled. Disable them on first push and correct the memblockq. If pop
+             * has not been called yet, wait until the pop_cb() requests the adjustment */
+            if (u->output_thread_info.pop_called && (!u->output_thread_info.push_called || u->output_thread_info.pop_adjust)) {
+                pa_usec_t time_delta;
+
+                /* This is the source latency at the time push was called */
+                time_delta = PA_PTR_TO_UINT(data);
+                /* Add the time between push and post */
+                time_delta += pa_rtclock_now() - (pa_usec_t) offset;
+                /* Add the sink latency */
+                time_delta += pa_sink_get_latency_within_thread(u->sink_input->sink, false);
+
+                /* The source latency report includes the audio in the chunk,
+                 * but since we already pushed the chunk to the memblockq, we need
+                 * to subtract the chunk size from the source latency so that it
+                 * won't be counted towards both the memblockq latency and the
+                 * source latency.
+                 *
+                 * Sometimes the alsa source reports way too low latency (might
+                 * be a bug in the alsa source code). This seems to happen when
+                 * there's an overrun. As an attempt to detect overruns, we
+                 * check if the chunk size is larger than the configured source
+                 * latency. If so, we assume that the source should have pushed
+                 * a chunk whose size equals the configured latency, so we
+                 * modify time_delta only by that amount, which makes
+                 * memblockq_adjust() drop more data than it would otherwise.
+                 * This seems to work quite well, but it's possible that the
+                 * next push also contains too much data, and in that case the
+                 * resulting latency will be wrong. */
+                if (pa_bytes_to_usec(chunk->length, &u->sink_input->sample_spec) > u->output_thread_info.effective_source_latency)
+                    time_delta = PA_CLIP_SUB(time_delta, u->output_thread_info.effective_source_latency);
+                else
+                    time_delta = PA_CLIP_SUB(time_delta, pa_bytes_to_usec(chunk->length, &u->sink_input->sample_spec));
+
+                /* FIXME: We allow pushing silence here to fix up the latency. This
+                 * might lead to a gap in the stream */
+                memblockq_adjust(u, time_delta, true);
+
+                u->output_thread_info.pop_adjust = false;
+                u->output_thread_info.push_called = true;
+            }
 
-            if (PA_SINK_IS_OPENED(u->sink_input->sink->thread_info.state))
-                pa_memblockq_push_align(u->memblockq, chunk);
-            else
-                pa_memblockq_flush_write(u->memblockq, true);
+            /* If pop has not been called yet, make sure the latency does not grow too much.
+             * Don't push any silence here, because we already have new data in the queue */
+            if (!u->output_thread_info.pop_called)
+                 memblockq_adjust(u, 0, false);
 
             /* Is this the end of an underrun? Then let's start things
              * right-away */
-            if (!u->in_pop &&
+            if (u->sink_input->sink->thread_info.state != PA_SINK_SUSPENDED &&
                 u->sink_input->thread_info.underrun_for > 0 &&
                 pa_memblockq_is_readable(u->memblockq)) {
 
-                pa_log_debug("Requesting rewind due to end of underrun.");
-                pa_sink_input_request_rewind(u->sink_input,
-                                             (size_t) (u->sink_input->thread_info.underrun_for == (size_t) -1 ? 0 : u->sink_input->thread_info.underrun_for),
-                                             false, true, false);
+                pa_asyncmsgq_post(pa_thread_mq_get()->outq, PA_MSGOBJECT(u->msg), LOOPBACK_MESSAGE_UNDERRUN, NULL, 0, NULL, NULL);
+                /* If called from within the pop callback skip the rewind */
+                if (!u->output_thread_info.in_pop) {
+                    pa_log_debug("Requesting rewind due to end of underrun.");
+                    pa_sink_input_request_rewind(u->sink_input,
+                                                 (size_t) (u->sink_input->thread_info.underrun_for == (size_t) -1 ? 0 : u->sink_input->thread_info.underrun_for),
+                                                 false, true, false);
+                }
             }
 
-            u->recv_counter += (int64_t) chunk->length;
+            u->output_thread_info.recv_counter += (int64_t) chunk->length;
 
             return 0;
 
         case SINK_INPUT_MESSAGE_REWIND:
 
-            pa_sink_input_assert_io_context(u->sink_input);
-
-            if (PA_SINK_IS_OPENED(u->sink_input->sink->thread_info.state))
+            /* Do not try to rewind if no data was pushed yet */
+            if (u->output_thread_info.push_called)
                 pa_memblockq_seek(u->memblockq, -offset, PA_SEEK_RELATIVE, true);
-            else
-                pa_memblockq_flush_write(u->memblockq, true);
 
-            u->recv_counter -= offset;
+            u->output_thread_info.recv_counter -= offset;
 
             return 0;
 
@@ -553,19 +892,60 @@ static int sink_input_process_msg_cb(pa_msgobject *obj, int code, void *data, in
 
             length = pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq);
 
-            u->latency_snapshot.recv_counter = u->recv_counter;
-            u->latency_snapshot.sink_input_buffer = pa_memblockq_get_length(u->memblockq);
+            u->latency_snapshot.recv_counter = u->output_thread_info.recv_counter;
+            u->latency_snapshot.loopback_memblockq_length = pa_memblockq_get_length(u->memblockq);
             /* Add content of render memblockq to sink latency */
-            u->latency_snapshot.sink_latency = pa_sink_get_latency_within_thread(u->sink_input->sink) +
+            u->latency_snapshot.sink_latency = pa_sink_get_latency_within_thread(u->sink_input->sink, false) +
                                                pa_bytes_to_usec(length, &u->sink_input->sink->sample_spec);
             u->latency_snapshot.sink_timestamp = pa_rtclock_now();
 
             return 0;
         }
+
+        case SINK_INPUT_MESSAGE_SOURCE_CHANGED:
+
+            u->output_thread_info.push_called = false;
+
+            return 0;
+
+        case SINK_INPUT_MESSAGE_SET_EFFECTIVE_SOURCE_LATENCY:
+
+            u->output_thread_info.effective_source_latency = (pa_usec_t)offset;
+
+            return 0;
+
+        case SINK_INPUT_MESSAGE_UPDATE_MIN_LATENCY:
+
+            u->output_thread_info.minimum_latency = (pa_usec_t)offset;
+
+            return 0;
     }
 
     return pa_sink_input_process_msg(obj, code, data, offset, chunk);
 }
+/* Called from main thread.
+ * Set sink input latency to one third of the overall latency if possible.
+ * The choice of one third is rather arbitrary somewhere between the minimum
+ * possible latency which would cause a lot of CPU load and half the configured
+ * latency which would quickly lead to underruns. */
+static void set_sink_input_latency(struct userdata *u, pa_sink *sink) {
+     pa_usec_t latency, requested_latency;
+
+    requested_latency = u->latency / 3;
+
+    /* Normally we try to configure sink and source latency equally. If the
+     * source latency cannot match the requested sink latency try to set the
+     * sink latency to a smaller value to avoid underruns */
+    if (u->min_source_latency > requested_latency) {
+        latency = PA_MAX(u->latency, u->minimum_latency);
+        requested_latency = (latency - u->min_source_latency) / 2;
+    }
+
+    latency = PA_CLAMP(requested_latency , u->min_sink_latency, u->max_sink_latency);
+    u->configured_sink_latency = pa_sink_input_set_requested_latency(u->sink_input, latency);
+    if (u->configured_sink_latency != requested_latency)
+        pa_log_warn("Cannot set requested sink latency of %0.2f ms, adjusting to %0.2f ms", (double)requested_latency / PA_USEC_PER_MSEC, (double)u->configured_sink_latency / PA_USEC_PER_MSEC);
+}
 
 /* Called from output thread context */
 static void sink_input_attach_cb(pa_sink_input *i) {
@@ -665,12 +1045,32 @@ static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
     if ((n = pa_proplist_gets(dest->proplist, PA_PROP_DEVICE_ICON_NAME)))
         pa_source_output_set_property(u->source_output, PA_PROP_MEDIA_ICON_NAME, n);
 
+    /* Set latency and calculate latency limits */
+    u->underrun_latency_limit = 0;
+    update_latency_boundaries(u, NULL, dest);
+    set_sink_input_latency(u, dest);
+    update_effective_source_latency(u, u->source_output->source, dest);
+
+    /* Uncork the source output unless the destination is suspended for other
+     * reasons than idle */
     if (pa_sink_get_state(dest) == PA_SINK_SUSPENDED)
-        pa_source_output_cork(u->source_output, true);
+        pa_source_output_cork(u->source_output, (dest->suspend_cause != PA_SUSPEND_IDLE));
     else
         pa_source_output_cork(u->source_output, false);
 
     update_adjust_timer(u);
+
+    /* Reset counters */
+    u->iteration_counter = 0;
+    u->underrun_counter = 0;
+
+    u->output_thread_info.pop_called = false;
+    u->output_thread_info.first_pop_done = false;
+
+    /* Sample rate may be far away from the default rate if we are still
+     * recovering from a previous source or sink change, so reset rate to
+     * default before moving the sink. */
+    pa_sink_input_set_rate(u->sink_input, u->source_output->sample_spec.rate);
 }
 
 /* Called from main thread */
@@ -695,11 +1095,119 @@ static void sink_input_suspend_cb(pa_sink_input *i, bool suspended) {
     pa_assert_ctl_context();
     pa_assert_se(u = i->userdata);
 
+    /* If the sink has been suspended, we need to handle this like
+     * a sink change when the sink is resumed. Because the sink
+     * is suspended, we can set the variables directly. */
+    if (suspended) {
+        u->output_thread_info.pop_called = false;
+        u->output_thread_info.first_pop_done = false;
+
+    } else
+        /* Set effective source latency on unsuspend */
+        update_effective_source_latency(u, u->source_output->source, u->sink_input->sink);
+
     pa_source_output_cork(u->source_output, suspended);
 
     update_adjust_timer(u);
 }
 
+/* Called from output thread context */
+static void update_sink_latency_range_cb(pa_sink_input *i) {
+    struct userdata *u;
+
+    pa_sink_input_assert_ref(i);
+    pa_sink_input_assert_io_context(i);
+    pa_assert_se(u = i->userdata);
+
+    /* Sink latency may have changed */
+    pa_asyncmsgq_post(pa_thread_mq_get()->outq, PA_MSGOBJECT(u->msg), LOOPBACK_MESSAGE_SINK_LATENCY_RANGE_CHANGED, NULL, 0, NULL, NULL);
+}
+
+/* Called from main context */
+static int loopback_process_msg_cb(pa_msgobject *o, int code, void *userdata, int64_t offset, pa_memchunk *chunk) {
+    struct loopback_msg *msg;
+    struct userdata *u;
+    pa_usec_t current_latency;
+
+    pa_assert(o);
+    pa_assert_ctl_context();
+
+    msg = LOOPBACK_MSG(o);
+    pa_assert_se(u = msg->userdata);
+
+    switch (code) {
+
+        case LOOPBACK_MESSAGE_SOURCE_LATENCY_RANGE_CHANGED:
+
+            update_effective_source_latency(u, u->source_output->source, u->sink_input->sink);
+            current_latency = pa_source_get_requested_latency(u->source_output->source);
+            if (current_latency > u->configured_source_latency) {
+                /* The minimum latency has changed to a value larger than the configured latency, so
+                 * the source latency has been increased. The case that the minimum latency changes
+                 * back to a smaller value is not handled because this never happens with the current
+                 * source implementations. */
+                pa_log_warn("Source minimum latency increased to %0.2f ms", (double)current_latency / PA_USEC_PER_MSEC);
+                u->configured_source_latency = current_latency;
+                update_latency_boundaries(u, u->source_output->source, u->sink_input->sink);
+                /* We re-start counting when the latency has changed */
+                u->iteration_counter = 0;
+                u->underrun_counter = 0;
+            }
+
+            return 0;
+
+        case LOOPBACK_MESSAGE_SINK_LATENCY_RANGE_CHANGED:
+
+            current_latency = pa_sink_get_requested_latency(u->sink_input->sink);
+            if (current_latency > u->configured_sink_latency) {
+                /* The minimum latency has changed to a value larger than the configured latency, so
+                 * the sink latency has been increased. The case that the minimum latency changes back
+                 * to a smaller value is not handled because this never happens with the current sink
+                 * implementations. */
+                pa_log_warn("Sink minimum latency increased to %0.2f ms", (double)current_latency / PA_USEC_PER_MSEC);
+                u->configured_sink_latency = current_latency;
+                update_latency_boundaries(u, u->source_output->source, u->sink_input->sink);
+                /* We re-start counting when the latency has changed */
+                u->iteration_counter = 0;
+                u->underrun_counter = 0;
+            }
+
+            return 0;
+
+        case LOOPBACK_MESSAGE_UNDERRUN:
+
+            u->underrun_counter++;
+            pa_log_debug("Underrun detected, counter incremented to %u", u->underrun_counter);
+
+            return 0;
+
+    }
+
+    return 0;
+}
+
+static pa_hook_result_t sink_port_latency_offset_changed_cb(pa_core *core, pa_sink *sink, struct userdata *u) {
+
+    if (sink != u->sink_input->sink)
+        return PA_HOOK_OK;
+
+    u->sink_latency_offset = sink->port_latency_offset;
+    update_minimum_latency(u, sink, true);
+
+    return PA_HOOK_OK;
+}
+
+static pa_hook_result_t source_port_latency_offset_changed_cb(pa_core *core, pa_source *source, struct userdata *u) {
+
+    if (source != u->source_output->source)
+        return PA_HOOK_OK;
+
+    u->source_latency_offset = source->port_latency_offset;
+    update_minimum_latency(u, u->sink_input->sink, true);
+
+    return PA_HOOK_OK;
+}
+
 int pa__init(pa_module *m) {
     pa_modargs *ma = NULL;
     struct userdata *u;
@@ -798,6 +1306,12 @@ int pa__init(pa_module *m) {
     u->core = m->core;
     u->module = m;
     u->latency = (pa_usec_t) latency_msec * PA_USEC_PER_MSEC;
+    u->output_thread_info.pop_called = false;
+    u->output_thread_info.pop_adjust = false;
+    u->output_thread_info.push_called = false;
+    u->iteration_counter = 0;
+    u->underrun_counter = 0;
+    u->underrun_latency_limit = 0;
 
     adjust_time_sec = DEFAULT_ADJUST_TIME_USEC / PA_USEC_PER_SEC;
     if (pa_modargs_get_value_u32(ma, "adjust_time", &adjust_time_sec) < 0) {
@@ -874,10 +1388,10 @@ int pa__init(pa_module *m) {
     u->sink_input->may_move_to = sink_input_may_move_to_cb;
     u->sink_input->moving = sink_input_moving_cb;
     u->sink_input->suspend = sink_input_suspend_cb;
+    u->sink_input->update_sink_latency_range = update_sink_latency_range_cb;
+    u->sink_input->update_sink_fixed_latency = update_sink_latency_range_cb;
     u->sink_input->userdata = u;
 
-    pa_sink_input_set_requested_latency(u->sink_input, u->latency/3);
-
     pa_source_output_new_data_init(&source_output_data);
     source_output_data.driver = __FILE__;
     source_output_data.module = m;
@@ -921,13 +1435,16 @@ int pa__init(pa_module *m) {
     u->source_output->kill = source_output_kill_cb;
     u->source_output->attach = source_output_attach_cb;
     u->source_output->detach = source_output_detach_cb;
-    u->source_output->state_change = source_output_state_change_cb;
     u->source_output->may_move_to = source_output_may_move_to_cb;
     u->source_output->moving = source_output_moving_cb;
     u->source_output->suspend = source_output_suspend_cb;
+    u->source_output->update_source_latency_range = update_source_latency_range_cb;
+    u->source_output->update_source_fixed_latency = update_source_latency_range_cb;
     u->source_output->userdata = u;
 
-    pa_source_output_set_requested_latency(u->source_output, u->latency/3);
+    update_latency_boundaries(u, u->source_output->source, u->sink_input->sink);
+    set_sink_input_latency(u, u->sink_input->sink);
+    set_source_output_latency(u, u->source_output->source);
 
     pa_sink_input_get_silence(u->sink_input, &silence);
     u->memblockq = pa_memblockq_new(
@@ -941,6 +1458,8 @@ int pa__init(pa_module *m) {
             0,                      /* maxrewind */
             &silence);              /* silence frame */
     pa_memblock_unref(silence.memblock);
+    /* Fill the memblockq with silence */
+    pa_memblockq_seek(u->memblockq, pa_usec_to_bytes(u->latency, &u->sink_input->sample_spec), PA_SEEK_RELATIVE, true);
 
     u->asyncmsgq = pa_asyncmsgq_new(0);
     if (!u->asyncmsgq) {
@@ -964,6 +1483,20 @@ int pa__init(pa_module *m) {
             && (n = pa_proplist_gets(u->source_output->source->proplist, PA_PROP_DEVICE_ICON_NAME)))
         pa_proplist_sets(u->sink_input->proplist, PA_PROP_MEDIA_ICON_NAME, n);
 
+    /* Hooks to track changes of latency offsets */
+    pa_module_hook_connect(m, &m->core->hooks[PA_CORE_HOOK_SINK_PORT_LATENCY_OFFSET_CHANGED],
+                           PA_HOOK_NORMAL, (pa_hook_cb_t) sink_port_latency_offset_changed_cb, u);
+    pa_module_hook_connect(m, &m->core->hooks[PA_CORE_HOOK_SOURCE_PORT_LATENCY_OFFSET_CHANGED],
+                           PA_HOOK_NORMAL, (pa_hook_cb_t) source_port_latency_offset_changed_cb, u);
+
+    /* Setup message handler for main thread */
+    u->msg = pa_msgobject_new(loopback_msg);
+    u->msg->parent.process_msg = loopback_process_msg_cb;
+    u->msg->userdata = u;
+
+    /* The output thread is not yet running, set effective_source_latency directly */
+    update_effective_source_latency(u, u->source_output->source, NULL);
+
     pa_sink_input_put(u->sink_input);
     pa_source_output_put(u->source_output);
 
diff --git a/src/modules/module-null-sink.c b/src/modules/module-null-sink.c
index b8157e8..9237656 100644
--- a/src/modules/module-null-sink.c
+++ b/src/modules/module-null-sink.c
@@ -104,7 +104,7 @@ static int sink_process_msg(
             pa_usec_t now;
 
             now = pa_rtclock_now();
-            *((pa_usec_t*) data) = u->timestamp > now ? u->timestamp - now : 0ULL;
+            *((int64_t*) data) = (int64_t)u->timestamp - (int64_t)now;
 
             return 0;
         }
diff --git a/src/modules/module-null-source.c b/src/modules/module-null-source.c
index a75a04f..5bfa1e1 100644
--- a/src/modules/module-null-source.c
+++ b/src/modules/module-null-source.c
@@ -102,7 +102,7 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
             pa_usec_t now;
 
             now = pa_rtclock_now();
-            *((pa_usec_t*) data) = u->timestamp > now ? u->timestamp - now : 0;
+            *((int64_t*) data) = (int64_t)u->timestamp - (int64_t)now;
 
             return 0;
         }
diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c
index da65021..8396a63 100644
--- a/src/modules/module-pipe-sink.c
+++ b/src/modules/module-pipe-sink.c
@@ -75,6 +75,7 @@ struct userdata {
 
     char *filename;
     int fd;
+    size_t buffer_size;
 
     pa_memchunk memchunk;
 
@@ -111,7 +112,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
 
             n += u->memchunk.length;
 
-            *((pa_usec_t*) data) = pa_bytes_to_usec(n, &u->sink->sample_spec);
+            *((int64_t*) data) = pa_bytes_to_usec(n, &u->sink->sample_spec);
             return 0;
         }
     }
@@ -123,7 +124,7 @@ static int process_render(struct userdata *u) {
     pa_assert(u);
 
     if (u->memchunk.length <= 0)
-        pa_sink_render(u->sink, pa_frame_align(pa_pipe_buf(u->fd), &u->sink->sample_spec), &u->memchunk);
+        pa_sink_render(u->sink, u->buffer_size, &u->memchunk);
 
     pa_assert(u->memchunk.length > 0);
 
@@ -306,8 +307,10 @@ int pa__init(pa_module *m) {
 
     pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
     pa_sink_set_rtpoll(u->sink, u->rtpoll);
-    pa_sink_set_max_request(u->sink, pa_frame_align(pa_pipe_buf(u->fd), &u->sink->sample_spec));
-    pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(pa_pipe_buf(u->fd), &u->sink->sample_spec));
+
+    u->buffer_size = pa_frame_align(pa_pipe_buf(u->fd), &u->sink->sample_spec);
+    pa_sink_set_max_request(u->sink, u->buffer_size);
+    pa_sink_set_fixed_latency(u->sink, pa_bytes_to_usec(u->buffer_size, &u->sink->sample_spec));
 
     u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
     pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c
index f39fc55..411f1fd 100644
--- a/src/modules/module-pipe-source.c
+++ b/src/modules/module-pipe-source.c
@@ -113,7 +113,7 @@ static int source_process_msg(
                 n = (size_t) l;
 #endif
 
-            *((pa_usec_t*) data) = pa_bytes_to_usec(n, &u->source->sample_spec);
+            *((int64_t*) data) = pa_bytes_to_usec(n, &u->source->sample_spec);
             return 0;
         }
     }
diff --git a/src/modules/module-remap-sink.c b/src/modules/module-remap-sink.c
index 8a21c3c..a2a8e31 100644
--- a/src/modules/module-remap-sink.c
+++ b/src/modules/module-remap-sink.c
@@ -84,18 +84,30 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
              * make sure we don't access it yet */
             if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
                 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) =
+            *((int64_t*) data) =
                 /* Get the latency of the master sink */
-                pa_sink_get_latency_within_thread(u->sink_input->sink) +
+                pa_sink_get_latency_within_thread(u->sink_input->sink, true) +
 
                 /* Add the latency internal to our sink input on top */
                 pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
 
             return 0;
+
+        case PA_SINK_MESSAGE_SET_STATE: {
+            pa_sink_state_t new_state = (pa_sink_state_t) PA_PTR_TO_UINT(data);
+
+            /* When set to running or idle for the first time, request a rewind
+             * of the master sink to make sure we are heard immediately */
+            if ((new_state == PA_SINK_IDLE || new_state == PA_SINK_RUNNING) && u->sink->thread_info.state == PA_SINK_INIT) {
+                pa_log_debug("Requesting rewind due to state change.");
+                pa_sink_input_request_rewind(u->sink_input, 0, false, true, true);
+            }
+            break;
+        }
     }
 
     return pa_sink_process_msg(o, code, data, offset, chunk);
@@ -155,6 +167,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     pa_assert(chunk);
     pa_assert_se(u = i->userdata);
 
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return -1;
+
     /* Hmm, process any rewind request that might be queued up */
     pa_sink_process_rewind(u->sink, 0);
 
@@ -170,6 +185,10 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
+    /* If the sink is not yet linked, there is nothing to rewind */
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return;
+
     if (u->sink->thread_info.rewind_nbytes > 0) {
         amount = PA_MIN(u->sink->thread_info.rewind_nbytes, nbytes);
         u->sink->thread_info.rewind_nbytes = 0;
@@ -227,7 +246,8 @@ static void sink_input_detach_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    pa_sink_detach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_detach_within_thread(u->sink);
 
     pa_sink_set_rtpoll(u->sink, NULL);
 }
@@ -248,7 +268,8 @@ static void sink_input_attach_cb(pa_sink_input *i) {
      * https://bugs.freedesktop.org/show_bug.cgi?id=53709 */
     pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
 
-    pa_sink_attach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_attach_within_thread(u->sink);
 }
 
 /* Called from main context */
@@ -258,11 +279,12 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    /* The order here matters! We first kill the sink input, followed
-     * by the sink. That means the sink callbacks must be protected
-     * against an unconnected sink input! */
-    pa_sink_input_unlink(u->sink_input);
+    /* The order here matters! We first kill the sink so that streams
+     * can properly be moved away while the sink input is still connected
+     * to the master. */
+    pa_sink_input_cork(u->sink_input, true);
     pa_sink_unlink(u->sink);
+    pa_sink_input_unlink(u->sink_input);
 
     pa_sink_input_unref(u->sink_input);
     u->sink_input = NULL;
@@ -273,22 +295,6 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_module_unload_request(u->module, true);
 }
 
-/* Called from IO thread context */
-static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
-    struct userdata *u;
-
-    pa_sink_input_assert_ref(i);
-    pa_assert_se(u = i->userdata);
-
-    /* If we are added for the first time, ask for a rewinding so that
-     * we are heard right-away. */
-    if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT) {
-        pa_log_debug("Requesting rewind due to state change.");
-        pa_sink_input_request_rewind(i, 0, false, true, true);
-    }
-}
-
 /* Called from main context */
 static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
     struct userdata *u;
@@ -423,7 +429,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
     pa_sink_input_new_data_set_channel_map(&sink_input_data, &stream_map);
-    sink_input_data.flags = (remix ? 0 : PA_SINK_INPUT_NO_REMIX);
+    sink_input_data.flags = (remix ? 0 : PA_SINK_INPUT_NO_REMIX) | PA_SINK_INPUT_START_CORKED;
     sink_input_data.resample_method = resample_method;
 
     pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
@@ -441,14 +447,17 @@ int pa__init(pa_module*m) {
     u->sink_input->attach = sink_input_attach_cb;
     u->sink_input->detach = sink_input_detach_cb;
     u->sink_input->kill = sink_input_kill_cb;
-    u->sink_input->state_change = sink_input_state_change_cb;
     u->sink_input->moving = sink_input_moving_cb;
     u->sink_input->userdata = u;
 
     u->sink->input_to_master = u->sink_input;
 
-    pa_sink_put(u->sink);
+    /* The order here is important. The input must be put first,
+     * otherwise streams might attach to the sink before the sink
+     * input is attached to the master. */
     pa_sink_input_put(u->sink_input);
+    pa_sink_put(u->sink);
+    pa_sink_input_cork(u->sink_input, false);
 
     pa_modargs_free(ma);
 
@@ -484,13 +493,15 @@ void pa__done(pa_module*m) {
      * destruction order! */
 
     if (u->sink_input)
-        pa_sink_input_unlink(u->sink_input);
+        pa_sink_input_cork(u->sink_input, true);
 
     if (u->sink)
         pa_sink_unlink(u->sink);
 
-    if (u->sink_input)
+    if (u->sink_input) {
+        pa_sink_input_unlink(u->sink_input);
         pa_sink_input_unref(u->sink_input);
+    }
 
     if (u->sink)
         pa_sink_unref(u->sink);
diff --git a/src/modules/module-remap-source.c b/src/modules/module-remap-source.c
index 9b62c51..281d651 100644
--- a/src/modules/module-remap-source.c
+++ b/src/modules/module-remap-source.c
@@ -92,14 +92,14 @@ static int source_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t
              * source output is first shut down, the source second. */
             if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state) ||
                 !PA_SOURCE_OUTPUT_IS_LINKED(u->source_output->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) =
+            *((int64_t*) data) =
 
                 /* Get the latency of the master source */
-                pa_source_get_latency_within_thread(u->source_output->source) +
+                pa_source_get_latency_within_thread(u->source_output->source, true) +
                 /* Add the latency internal to our source output on top */
                 pa_bytes_to_usec(pa_memblockq_get_length(u->source_output->thread_info.delay_memblockq), &u->source_output->source->sample_spec);
 
@@ -151,6 +151,9 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
+    if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        return;
+
     if (!PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output))) {
         pa_log("push when no link?");
         return;
@@ -167,7 +170,9 @@ static void source_output_process_rewind_cb(pa_source_output *o, size_t nbytes)
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
-    pa_source_process_rewind(u->source, nbytes);
+    /* If the source is not yet linked, there is nothing to rewind */
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_process_rewind(u->source, nbytes);
 }
 
 /* Called from output thread context */
@@ -178,7 +183,8 @@ static void source_output_detach_cb(pa_source_output *o) {
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
-    pa_source_detach_within_thread(u->source);
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_detach_within_thread(u->source);
 
     pa_source_set_rtpoll(u->source, NULL);
 }
@@ -196,7 +202,8 @@ static void source_output_attach_cb(pa_source_output *o) {
     pa_source_set_fixed_latency_within_thread(u->source, o->source->thread_info.fixed_latency);
     pa_source_set_max_rewind_within_thread(u->source, pa_source_output_get_max_rewind(o));
 
-    pa_source_attach_within_thread(u->source);
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_attach_within_thread(u->source);
 }
 
 /* Called from main thread */
@@ -207,11 +214,12 @@ static void source_output_kill_cb(pa_source_output *o) {
     pa_assert_ctl_context();
     pa_assert_se(u = o->userdata);
 
-    /* The order here matters! We first kill the source output, followed
-     * by the source. That means the source callbacks must be protected
-     * against an unconnected source output! */
-    pa_source_output_unlink(u->source_output);
+    /* The order here matters! We first kill the source so that streams
+     * can properly be moved away while the source output is still connected
+     * to the master. */
+    pa_source_output_cork(u->source_output, true);
     pa_source_unlink(u->source);
+    pa_source_output_unlink(u->source_output);
 
     pa_source_output_unref(u->source_output);
     u->source_output = NULL;
@@ -222,12 +230,11 @@ static void source_output_kill_cb(pa_source_output *o) {
     pa_module_unload_request(u->module, true);
 }
 
-/* Called from output thread context */
+/* Called from output thread context except when cork() is called without valid source. */
 static void source_output_state_change_cb(pa_source_output *o, pa_source_output_state_t state) {
     struct userdata *u;
 
     pa_source_output_assert_ref(o);
-    pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
     pa_log_debug("Source output %d state %d.", o->index, state);
@@ -369,7 +376,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(source_output_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_source_output_new_data_set_sample_spec(&source_output_data, &ss);
     pa_source_output_new_data_set_channel_map(&source_output_data, &stream_map);
-    source_output_data.flags = remix ? 0 : PA_SOURCE_OUTPUT_NO_REMIX;
+    source_output_data.flags = (remix ? 0 : PA_SOURCE_OUTPUT_NO_REMIX) | PA_SOURCE_OUTPUT_START_CORKED;
     source_output_data.resample_method = resample_method;
 
     pa_source_output_new(&u->source_output, m->core, &source_output_data);
@@ -389,8 +396,12 @@ int pa__init(pa_module*m) {
 
     u->source->output_from_master = u->source_output;
 
-    pa_source_put(u->source);
+    /* The order here is important. The output must be put first,
+     * otherwise streams might attach to the source before the
+     * source output is attached to the master. */
     pa_source_output_put(u->source_output);
+    pa_source_put(u->source);
+    pa_source_output_cork(u->source_output, false);
 
     pa_modargs_free(ma);
 
@@ -426,13 +437,15 @@ void pa__done(pa_module*m) {
      * destruction order! */
 
     if (u->source_output)
-        pa_source_output_unlink(u->source_output);
+        pa_source_output_cork(u->source_output, true);
 
     if (u->source)
         pa_source_unlink(u->source);
 
-    if (u->source_output)
+    if (u->source_output) {
+        pa_source_output_unlink(u->source_output);
         pa_source_output_unref(u->source_output);
+    }
 
     if (u->source)
         pa_source_unref(u->source);
diff --git a/src/modules/module-rescue-streams.c b/src/modules/module-rescue-streams.c
index 60ac1c4..d3c9953 100644
--- a/src/modules/module-rescue-streams.c
+++ b/src/modules/module-rescue-streams.c
@@ -96,7 +96,7 @@ static void build_group_ports(pa_hashmap *g_ports, pa_hashmap *s_ports) {
 }
 
 static pa_sink* find_evacuation_sink(pa_core *c, pa_sink_input *i, pa_sink *skip) {
-    pa_sink *target, *def, *fb_sink = NULL;
+    pa_sink *target, *fb_sink = NULL;
     uint32_t idx;
     pa_hashmap *all_ports;
     pa_device_port *best_port;
@@ -104,15 +104,13 @@ static pa_sink* find_evacuation_sink(pa_core *c, pa_sink_input *i, pa_sink *skip
     pa_assert(c);
     pa_assert(i);
 
-    def = pa_namereg_get_default_sink(c);
-
-    if (def && def != skip && pa_sink_input_may_move_to(i, def))
-        return def;
+    if (c->default_sink && c->default_sink != skip && pa_sink_input_may_move_to(i, c->default_sink))
+        return c->default_sink;
 
     all_ports = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
 
     PA_IDXSET_FOREACH(target, c->sinks, idx) {
-        if (target == def)
+        if (target == c->default_sink)
             continue;
 
         if (target == skip)
@@ -204,7 +202,7 @@ static pa_hook_result_t sink_input_move_fail_hook_callback(pa_core *c, pa_sink_i
 }
 
 static pa_source* find_evacuation_source(pa_core *c, pa_source_output *o, pa_source *skip) {
-    pa_source *target, *def, *fb_source = NULL;
+    pa_source *target, *fb_source = NULL;
     uint32_t idx;
     pa_hashmap *all_ports;
     pa_device_port *best_port;
@@ -212,15 +210,13 @@ static pa_source* find_evacuation_source(pa_core *c, pa_source_output *o, pa_sou
     pa_assert(c);
     pa_assert(o);
 
-    def = pa_namereg_get_default_source(c);
-
-    if (def && def != skip && pa_source_output_may_move_to(o, def))
-        return def;
+    if (c->default_source && c->default_source != skip && pa_source_output_may_move_to(o, c->default_source))
+        return c->default_source;
 
     all_ports = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
 
     PA_IDXSET_FOREACH(target, c->sources, idx) {
-        if (target == def)
+        if (target == c->default_source)
             continue;
 
         if (target == skip)
diff --git a/src/modules/module-sine-source.c b/src/modules/module-sine-source.c
index cdeb2c0..3f275e2 100644
--- a/src/modules/module-sine-source.c
+++ b/src/modules/module-sine-source.c
@@ -102,7 +102,7 @@ static int source_process_msg(
             now = pa_rtclock_now();
             left_to_fill = u->timestamp > now ? u->timestamp - now : 0ULL;
 
-            *((pa_usec_t*) data) = u->block_usec > left_to_fill ? u->block_usec - left_to_fill : 0ULL;
+            *((int64_t*) data) = (int64_t)u->block_usec - left_to_fill;
 
             return 0;
         }
diff --git a/src/modules/module-sine.c b/src/modules/module-sine.c
index d56fae5..4592071 100644
--- a/src/modules/module-sine.c
+++ b/src/modules/module-sine.c
@@ -112,7 +112,7 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
     /* If we are added for the first time, ask for a rewinding so that
      * we are heard right-away. */
     if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT)
+        i->thread_info.state == PA_SINK_INPUT_INIT && i->sink)
         pa_sink_input_request_rewind(i, 0, false, true, true);
 }
 
diff --git a/src/modules/module-solaris.c b/src/modules/module-solaris.c
index ccff69f..f44bc7c 100644
--- a/src/modules/module-solaris.c
+++ b/src/modules/module-solaris.c
@@ -31,11 +31,18 @@
 #include <sys/ioctl.h>
 #include <sys/types.h>
 
+#ifdef HAVE_POLL_H
+#include <poll.h>
+#endif
+
 #include <signal.h>
 #include <stropts.h>
-#include <sys/conf.h>
 #include <sys/audio.h>
 
+#ifdef HAVE_SYS_CONF_H
+#include <sys/conf.h>
+#endif
+
 #include <pulse/mainloop-signal.h>
 #include <pulse/xmalloc.h>
 #include <pulse/timeval.h>
@@ -385,7 +392,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
     switch (code) {
 
         case PA_SINK_MESSAGE_GET_LATENCY:
-            *((pa_usec_t*) data) = sink_get_latency(u, &PA_SINK(o)->sample_spec);
+            *((int64_t*) data) = sink_get_latency(u, &PA_SINK(o)->sample_spec);
             return 0;
 
         case PA_SINK_MESSAGE_SET_STATE:
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index d1c2597..eb75833 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -1274,6 +1274,11 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
         if (!(sink_input = pa_idxset_get_by_index(c->sink_inputs, idx)))
             return;
 
+        /* Ignore this sink input if it is connecting a filter sink to
+         * the master */
+        if (sink_input->origin_sink)
+            return;
+
         if (!(name = pa_proplist_get_stream_group(sink_input->proplist, "sink-input", IDENTIFICATION_PROPERTY)))
             return;
 
@@ -1324,6 +1329,11 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
         if (!(source_output = pa_idxset_get_by_index(c->source_outputs, idx)))
             return;
 
+        /* Ignore this source output if it is connecting a filter source to
+         * the master */
+        if (source_output->destination_source)
+            return;
+
         if (!(name = pa_proplist_get_stream_group(source_output->proplist, "source-output", IDENTIFICATION_PROPERTY)))
             return;
 
@@ -1422,6 +1432,8 @@ static pa_hook_result_t sink_input_new_hook_callback(pa_core *c, pa_sink_input_n
 
     if (new_data->sink)
         pa_log_debug("Not restoring device for stream %s, because already set to '%s'.", name, new_data->sink->name);
+    else if (new_data->origin_sink)
+        pa_log_debug("Not restoring device for stream %s, because it connects a filter to the master sink.", name);
     else if ((e = entry_read(u, name))) {
         pa_sink *s = NULL;
 
@@ -1462,6 +1474,11 @@ static pa_hook_result_t sink_input_fixate_hook_callback(pa_core *c, pa_sink_inpu
     if (!(name = pa_proplist_get_stream_group(new_data->proplist, "sink-input", IDENTIFICATION_PROPERTY)))
         return PA_HOOK_OK;
 
+    if (new_data->origin_sink) {
+        pa_log_debug("Not restoring volume for sink input %s, because it connects a filter to the master sink.", name);
+        return PA_HOOK_OK;
+    }
+
     if ((e = entry_read(u, name))) {
 
         if (u->restore_volume && e->volume_valid) {
@@ -1518,6 +1535,8 @@ static pa_hook_result_t source_output_new_hook_callback(pa_core *c, pa_source_ou
 
     if (new_data->source)
         pa_log_debug("Not restoring device for stream %s, because already set", name);
+    else if (new_data->destination_source)
+        pa_log_debug("Not restoring device for stream %s, because it connects a filter to the master source.", name);
     else if ((e = entry_read(u, name))) {
         pa_source *s = NULL;
 
@@ -1559,6 +1578,11 @@ static pa_hook_result_t source_output_fixate_hook_callback(pa_core *c, pa_source
     if (!(name = pa_proplist_get_stream_group(new_data->proplist, "source-output", IDENTIFICATION_PROPERTY)))
         return PA_HOOK_OK;
 
+    if (new_data->destination_source) {
+        pa_log_debug("Not restoring volume for source output %s, because it connects a filter to the master source.", name);
+        return PA_HOOK_OK;
+    }
+
     if ((e = entry_read(u, name))) {
 
         if (u->restore_volume && e->volume_valid) {
@@ -1622,6 +1646,11 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, struct
         if (!si->sink)
             continue;
 
+        /* Skip this sink input if it is connecting a filter sink to
+         * the master */
+        if (si->origin_sink)
+            continue;
+
         /* It might happen that a stream and a sink are set up at the
            same time, in which case we want to make sure we don't
            interfere with that */
@@ -1670,6 +1699,11 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
         if (!so->source)
             continue;
 
+        /* Skip this source output if it is connecting a filter source to
+         * the master */
+        if (so->destination_source)
+            continue;
+
         /* It might happen that a stream and a source are set up at the
            same time, in which case we want to make sure we don't
            interfere with that */
@@ -1712,6 +1746,11 @@ static pa_hook_result_t sink_unlink_hook_callback(pa_core *c, pa_sink *sink, str
         if (!si->sink)
             continue;
 
+        /* Skip this sink input if it is connecting a filter sink to
+         * the master */
+        if (si->origin_sink)
+            continue;
+
         if (!(name = pa_proplist_get_stream_group(si->proplist, "sink-input", IDENTIFICATION_PROPERTY)))
             continue;
 
@@ -1758,6 +1797,11 @@ static pa_hook_result_t source_unlink_hook_callback(pa_core *c, pa_source *sourc
         if (!so->source)
             continue;
 
+        /* Skip this source output if it is connecting a filter source to
+         * the master */
+        if (so->destination_source)
+            continue;
+
         if (!(name = pa_proplist_get_stream_group(so->proplist, "source-output", IDENTIFICATION_PROPERTY)))
             continue;
 
diff --git a/src/modules/module-suspend-on-idle.c b/src/modules/module-suspend-on-idle.c
index a284f85..90d356f 100644
--- a/src/modules/module-suspend-on-idle.c
+++ b/src/modules/module-suspend-on-idle.c
@@ -284,7 +284,7 @@ static pa_hook_result_t sink_input_state_changed_hook_cb(pa_core *c, pa_sink_inp
     pa_assert(u);
 
     state = pa_sink_input_get_state(s);
-    if (state == PA_SINK_INPUT_RUNNING || state == PA_SINK_INPUT_DRAINED)
+    if ((state == PA_SINK_INPUT_RUNNING || state == PA_SINK_INPUT_DRAINED) && s->sink)
         if ((d = pa_hashmap_get(u->device_infos, s->sink)))
             resume(d);
 
@@ -296,7 +296,7 @@ static pa_hook_result_t source_output_state_changed_hook_cb(pa_core *c, pa_sourc
     pa_source_output_assert_ref(s);
     pa_assert(u);
 
-    if (pa_source_output_get_state(s) == PA_SOURCE_OUTPUT_RUNNING) {
+    if (pa_source_output_get_state(s) == PA_SOURCE_OUTPUT_RUNNING && s->source) {
         struct device_info *d;
 
         if (s->source->monitor_of)
@@ -476,6 +476,8 @@ fail:
 
 void pa__done(pa_module*m) {
     struct userdata *u;
+    struct device_info *d;
+    void *state;
 
     pa_assert(m);
 
@@ -484,6 +486,18 @@ void pa__done(pa_module*m) {
 
     u = m->userdata;
 
+    PA_HASHMAP_FOREACH(d, u->device_infos, state) {
+        if (d->sink && pa_sink_get_state(d->sink) == PA_SINK_SUSPENDED) {
+            pa_log_debug("Resuming sink %s on module unload.", d->sink->name);
+            pa_sink_suspend(d->sink, false, PA_SUSPEND_IDLE);
+        }
+
+        if (d->source && pa_source_get_state(d->source) == PA_SOURCE_SUSPENDED) {
+            pa_log_debug("Resuming source %s on module unload.", d->source->name);
+            pa_source_suspend(d->source, false, PA_SUSPEND_IDLE);
+        }
+    }
+
     pa_hashmap_free(u->device_infos);
 
     pa_xfree(u);
diff --git a/src/modules/module-switch-on-connect.c b/src/modules/module-switch-on-connect.c
index c844add..640024e 100644
--- a/src/modules/module-switch-on-connect.c
+++ b/src/modules/module-switch-on-connect.c
@@ -55,7 +55,7 @@ struct userdata {
 static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, void* userdata) {
     pa_sink_input *i;
     uint32_t idx;
-    pa_sink *def;
+    pa_sink *old_default_sink;
     const char *s;
     struct userdata *u = userdata;
 
@@ -75,24 +75,31 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, void*
             return PA_HOOK_OK;
     }
 
-    def = pa_namereg_get_default_sink(c);
-    if (def == sink)
+    /* No default sink, nothing to move away, just set the new default */
+    if (!c->default_sink) {
+        pa_core_set_configured_default_sink(c, sink->name);
+        return PA_HOOK_OK;
+    }
+
+    if (c->default_sink == sink)
         return PA_HOOK_OK;
 
     if (u->only_from_unavailable)
-        if (!def->active_port || def->active_port->available != PA_AVAILABLE_NO)
+        if (!c->default_sink->active_port || c->default_sink->active_port->available != PA_AVAILABLE_NO)
             return PA_HOOK_OK;
 
+    old_default_sink = c->default_sink;
+
     /* Actually do the switch to the new sink */
-    pa_namereg_set_default_sink(c, sink);
+    pa_core_set_configured_default_sink(c, sink->name);
 
     /* Now move all old inputs over */
-    if (pa_idxset_size(def->inputs) <= 0) {
+    if (pa_idxset_size(old_default_sink->inputs) <= 0) {
         pa_log_debug("No sink inputs to move away.");
         return PA_HOOK_OK;
     }
 
-    PA_IDXSET_FOREACH(i, def->inputs, idx) {
+    PA_IDXSET_FOREACH(i, old_default_sink->inputs, idx) {
         if (i->save_sink || !PA_SINK_INPUT_IS_LINKED(i->state))
             continue;
 
@@ -110,7 +117,7 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, void*
 static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source, void* userdata) {
     pa_source_output *o;
     uint32_t idx;
-    pa_source *def;
+    pa_source *old_default_source;
     const char *s;
     struct userdata *u = userdata;
 
@@ -134,24 +141,31 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
             return PA_HOOK_OK;
     }
 
-    def = pa_namereg_get_default_source(c);
-    if (def == source)
+    /* No default source, nothing to move away, just set the new default */
+    if (!c->default_source) {
+        pa_core_set_configured_default_source(c, source->name);
+        return PA_HOOK_OK;
+    }
+
+    if (c->default_source == source)
         return PA_HOOK_OK;
 
     if (u->only_from_unavailable)
-        if (!def->active_port || def->active_port->available != PA_AVAILABLE_NO)
+        if (!c->default_source->active_port || c->default_source->active_port->available != PA_AVAILABLE_NO)
             return PA_HOOK_OK;
 
+    old_default_source = c->default_source;
+
     /* Actually do the switch to the new source */
-    pa_namereg_set_default_source(c, source);
+    pa_core_set_configured_default_source(c, source->name);
 
     /* Now move all old outputs over */
-    if (pa_idxset_size(def->outputs) <= 0) {
+    if (pa_idxset_size(old_default_source->outputs) <= 0) {
         pa_log_debug("No source outputs to move away.");
         return PA_HOOK_OK;
     }
 
-    PA_IDXSET_FOREACH(o, def->outputs, idx) {
+    PA_IDXSET_FOREACH(o, old_default_source->outputs, idx) {
         if (o->save_source || !PA_SOURCE_OUTPUT_IS_LINKED(o->state))
             continue;
 
diff --git a/src/modules/module-tunnel-sink-new.c b/src/modules/module-tunnel-sink-new.c
index 92f99df..dd6c886 100644
--- a/src/modules/module-tunnel-sink-new.c
+++ b/src/modules/module-tunnel-sink-new.c
@@ -407,26 +407,26 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
             pa_usec_t remote_latency;
 
             if (!PA_SINK_IS_LINKED(u->sink->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
             if (!u->stream) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
             if (pa_stream_get_state(u->stream) != PA_STREAM_READY) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
             if (pa_stream_get_latency(u->stream, &remote_latency, &negative) < 0) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) = remote_latency;
+            *((int64_t*) data) = remote_latency;
             return 0;
         }
         case PA_SINK_MESSAGE_SET_STATE:
diff --git a/src/modules/module-tunnel-source-new.c b/src/modules/module-tunnel-source-new.c
index e159c33..2db928c 100644
--- a/src/modules/module-tunnel-source-new.c
+++ b/src/modules/module-tunnel-source-new.c
@@ -402,29 +402,29 @@ static int source_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t
             pa_usec_t remote_latency;
 
             if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
             if (!u->stream) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
             if (pa_stream_get_state(u->stream) != PA_STREAM_READY) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
             if (pa_stream_get_latency(u->stream, &remote_latency, &negative) < 0) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
             if (negative)
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = - (int64_t)remote_latency;
             else
-                *((pa_usec_t*) data) = remote_latency;
+                *((int64_t*) data) = remote_latency;
 
             return 0;
         }
diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c
index e08816b..94ea4fb 100644
--- a/src/modules/module-tunnel.c
+++ b/src/modules/module-tunnel.c
@@ -513,12 +513,13 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
         }
 
         case PA_SINK_MESSAGE_GET_LATENCY: {
-            pa_usec_t yl, yr, *usec = data;
+            pa_usec_t yl, yr;
+            int64_t *usec = data;
 
             yl = pa_bytes_to_usec((uint64_t) u->counter, &u->sink->sample_spec);
             yr = pa_smoother_get(u->smoother, pa_rtclock_now());
 
-            *usec = yl > yr ? yl - yr : 0;
+            *usec = (int64_t)yl - yr;
             return 0;
         }
 
@@ -618,12 +619,13 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
         }
 
         case PA_SOURCE_MESSAGE_GET_LATENCY: {
-            pa_usec_t yr, yl, *usec = data;
+            pa_usec_t yr, yl;
+            int64_t *usec = data;
 
             yl = pa_bytes_to_usec((uint64_t) u->counter, &PA_SOURCE(o)->sample_spec);
             yr = pa_smoother_get(u->smoother, pa_rtclock_now());
 
-            *usec = yr > yl ? yr - yl : 0;
+            *usec = (int64_t)yr - yl;
             return 0;
         }
 
diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c
index bb41a96..3d7064f 100644
--- a/src/modules/module-udev-detect.c
+++ b/src/modules/module-udev-detect.c
@@ -177,10 +177,8 @@ static bool is_card_busy(const char *id) {
     char *card_path = NULL, *pcm_path = NULL, *sub_status = NULL;
     DIR *card_dir = NULL, *pcm_dir = NULL;
     FILE *status_file = NULL;
-    size_t len;
-    struct dirent *space = NULL, *de;
+    struct dirent *de;
     bool busy = false;
-    int r;
 
     pa_assert(id);
 
@@ -194,14 +192,11 @@ static bool is_card_busy(const char *id) {
         goto fail;
     }
 
-    len = offsetof(struct dirent, d_name) + fpathconf(dirfd(card_dir), _PC_NAME_MAX) + 1;
-    space = pa_xmalloc(len);
-
     for (;;) {
-        de = NULL;
-
-        if ((r = readdir_r(card_dir, space, &de)) != 0) {
-            pa_log_warn("readdir_r() failed: %s", pa_cstrerror(r));
+        errno = 0;
+        de = readdir(card_dir);
+        if (!de && errno) {
+            pa_log_warn("readdir() failed: %s", pa_cstrerror(errno));
             goto fail;
         }
 
@@ -228,8 +223,10 @@ static bool is_card_busy(const char *id) {
         for (;;) {
             char line[32];
 
-            if ((r = readdir_r(pcm_dir, space, &de)) != 0) {
-                pa_log_warn("readdir_r() failed: %s", pa_cstrerror(r));
+            errno = 0;
+            de = readdir(pcm_dir);
+            if (!de && errno) {
+                pa_log_warn("readdir() failed: %s", pa_cstrerror(errno));
                 goto fail;
             }
 
@@ -267,7 +264,6 @@ fail:
     pa_xfree(card_path);
     pa_xfree(pcm_path);
     pa_xfree(sub_status);
-    pa_xfree(space);
 
     if (card_dir)
         closedir(card_dir);
diff --git a/src/modules/module-virtual-sink.c b/src/modules/module-virtual-sink.c
index 02cc1ac..faa5524 100644
--- a/src/modules/module-virtual-sink.c
+++ b/src/modules/module-virtual-sink.c
@@ -95,19 +95,31 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
              * sink input is first shut down, the sink second. */
             if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
                 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) =
+            *((int64_t*) data) =
 
                 /* Get the latency of the master sink */
-                pa_sink_get_latency_within_thread(u->sink_input->sink) +
+                pa_sink_get_latency_within_thread(u->sink_input->sink, true) +
 
                 /* Add the latency internal to our sink input on top */
                 pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
 
             return 0;
+
+        case PA_SINK_MESSAGE_SET_STATE: {
+            pa_sink_state_t new_state = (pa_sink_state_t) PA_PTR_TO_UINT(data);
+
+            /* When set to running or idle for the first time, request a rewind
+             * of the master sink to make sure we are heard immediately */
+            if ((new_state == PA_SINK_IDLE || new_state == PA_SINK_RUNNING) && u->sink->thread_info.state == PA_SINK_INIT) {
+                pa_log_debug("Requesting rewind due to state change.");
+                pa_sink_input_request_rewind(u->sink_input, 0, false, true, true);
+            }
+            break;
+        }
     }
 
     return pa_sink_process_msg(o, code, data, offset, chunk);
@@ -203,6 +215,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     pa_assert(chunk);
     pa_assert_se(u = i->userdata);
 
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return -1;
+
     /* Hmm, process any rewind request that might be queued up */
     pa_sink_process_rewind(u->sink, 0);
 
@@ -255,7 +270,7 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     /* (4) IF YOU NEED THE LATENCY FOR SOMETHING ACQUIRE IT LIKE THIS: */
     current_latency =
         /* Get the latency of the master sink */
-        pa_sink_get_latency_within_thread(i->sink) +
+        pa_sink_get_latency_within_thread(i->sink, false) +
 
         /* Add the latency internal to our sink input on top */
         pa_bytes_to_usec(pa_memblockq_get_length(i->thread_info.render_memblockq), &i->sink->sample_spec);
@@ -271,6 +286,10 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
+    /* If the sink is not yet linked, there is nothing to rewind */
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return;
+
     if (u->sink->thread_info.rewind_nbytes > 0) {
         size_t max_rewrite;
 
@@ -346,7 +365,8 @@ static void sink_input_detach_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    pa_sink_detach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_detach_within_thread(u->sink);
 
     pa_sink_set_rtpoll(u->sink, NULL);
 }
@@ -374,7 +394,8 @@ static void sink_input_attach_cb(pa_sink_input *i) {
      * https://bugs.freedesktop.org/show_bug.cgi?id=53709 */
     pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
 
-    pa_sink_attach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_attach_within_thread(u->sink);
 }
 
 /* Called from main context */
@@ -384,11 +405,12 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    /* The order here matters! We first kill the sink input, followed
-     * by the sink. That means the sink callbacks must be protected
-     * against an unconnected sink input! */
-    pa_sink_input_unlink(u->sink_input);
+    /* The order here matters! We first kill the sink so that streams
+     * can properly be moved away while the sink input is still connected
+     * to the master. */
+    pa_sink_input_cork(u->sink_input, true);
     pa_sink_unlink(u->sink);
+    pa_sink_input_unlink(u->sink_input);
 
     pa_sink_input_unref(u->sink_input);
     u->sink_input = NULL;
@@ -399,22 +421,6 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_module_unload_request(u->module, true);
 }
 
-/* Called from IO thread context */
-static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
-    struct userdata *u;
-
-    pa_sink_input_assert_ref(i);
-    pa_assert_se(u = i->userdata);
-
-    /* If we are added for the first time, ask for a rewinding so that
-     * we are heard right-away. */
-    if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT) {
-        pa_log_debug("Requesting rewind due to state change.");
-        pa_sink_input_request_rewind(i, 0, false, true, true);
-    }
-}
-
 /* Called from main context */
 static void sink_input_moving_cb(pa_sink_input *i, pa_sink *dest) {
     struct userdata *u;
@@ -576,6 +582,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_sink_input_new_data_set_sample_spec(&sink_input_data, &ss);
     pa_sink_input_new_data_set_channel_map(&sink_input_data, &map);
+    sink_input_data.flags |= PA_SINK_INPUT_START_CORKED;
 
     pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
     pa_sink_input_new_data_done(&sink_input_data);
@@ -592,7 +599,6 @@ int pa__init(pa_module*m) {
     u->sink_input->kill = sink_input_kill_cb;
     u->sink_input->attach = sink_input_attach_cb;
     u->sink_input->detach = sink_input_detach_cb;
-    u->sink_input->state_change = sink_input_state_change_cb;
     u->sink_input->moving = sink_input_moving_cb;
     u->sink_input->volume_changed = use_volume_sharing ? NULL : sink_input_volume_changed_cb;
     u->sink_input->mute_changed = sink_input_mute_changed_cb;
@@ -606,8 +612,12 @@ int pa__init(pa_module*m) {
 
     /* (9) INITIALIZE ANYTHING ELSE YOU NEED HERE */
 
-    pa_sink_put(u->sink);
+    /* The order here is important. The input must be put first,
+     * otherwise streams might attach to the sink before the sink
+     * input is attached to the master. */
     pa_sink_input_put(u->sink_input);
+    pa_sink_put(u->sink);
+    pa_sink_input_cork(u->sink_input, false);
 
     pa_modargs_free(ma);
 
@@ -643,13 +653,15 @@ void pa__done(pa_module*m) {
      * destruction order! */
 
     if (u->sink_input)
-        pa_sink_input_unlink(u->sink_input);
+        pa_sink_input_cork(u->sink_input, true);
 
     if (u->sink)
         pa_sink_unlink(u->sink);
 
-    if (u->sink_input)
+    if (u->sink_input) {
+        pa_sink_input_unlink(u->sink_input);
         pa_sink_input_unref(u->sink_input);
+    }
 
     if (u->sink)
         pa_sink_unref(u->sink);
diff --git a/src/modules/module-virtual-source.c b/src/modules/module-virtual-source.c
index 36edf78..94907df 100644
--- a/src/modules/module-virtual-source.c
+++ b/src/modules/module-virtual-source.c
@@ -104,7 +104,7 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
         case PA_SINK_MESSAGE_GET_LATENCY:
 
             /* there's no real latency here */
-            *((pa_usec_t*) data) = 0;
+            *((int64_t*) data) = 0;
 
             return 0;
     }
@@ -183,7 +183,7 @@ static int source_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t
             *((pa_usec_t*) data) =
 
                 /* Get the latency of the master source */
-                pa_source_get_latency_within_thread(u->source_output->source) +
+                pa_source_get_latency_within_thread(u->source_output->source, true) +
 
                 /* Add the latency internal to our source output on top */
                 /* FIXME, no idea what I am doing here */
@@ -263,6 +263,9 @@ static void source_output_push_cb(pa_source_output *o, const pa_memchunk *chunk)
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
+    if (!PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        return;
+
     if (!PA_SOURCE_OUTPUT_IS_LINKED(pa_source_output_get_state(u->source_output))) {
         pa_log("push when no link?");
         return;
@@ -356,6 +359,10 @@ static void source_output_process_rewind_cb(pa_source_output *o, size_t nbytes)
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
+    /* If the source is not yet linked, there is nothing to rewind */
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_process_rewind(u->source, nbytes);
+
     /* FIXME, no idea what I am doing here */
 #if 0
     pa_asyncmsgq_post(u->asyncmsgq, PA_MSGOBJECT(u->sink_input), SINK_INPUT_MESSAGE_REWIND, NULL, (int64_t) nbytes, NULL, NULL);
@@ -376,7 +383,8 @@ static void source_output_attach_cb(pa_source_output *o) {
     pa_source_set_fixed_latency_within_thread(u->source, o->source->thread_info.fixed_latency);
     pa_source_set_max_rewind_within_thread(u->source, pa_source_output_get_max_rewind(o));
 
-    pa_source_attach_within_thread(u->source);
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_attach_within_thread(u->source);
 }
 
 /* Called from output thread context */
@@ -387,23 +395,23 @@ static void source_output_detach_cb(pa_source_output *o) {
     pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
-    pa_source_detach_within_thread(u->source);
+    if (PA_SOURCE_IS_LINKED(u->source->thread_info.state))
+        pa_source_detach_within_thread(u->source);
     pa_source_set_rtpoll(u->source, NULL);
 }
 
-/* Called from output thread context */
+/* Called from output thread context except when cork() is called without valid source.*/
 static void source_output_state_change_cb(pa_source_output *o, pa_source_output_state_t state) {
     struct userdata *u;
 
     pa_source_output_assert_ref(o);
-    pa_source_output_assert_io_context(o);
     pa_assert_se(u = o->userdata);
 
     /* FIXME */
 #if 0
-    if (PA_SOURCE_OUTPUT_IS_LINKED(state) && o->thread_info.state == PA_SOURCE_OUTPUT_INIT) {
+    if (PA_SOURCE_OUTPUT_IS_LINKED(state) && o->thread_info.state == PA_SOURCE_OUTPUT_INIT && o->source) {
 
-        u->skip = pa_usec_to_bytes(PA_CLIP_SUB(pa_source_get_latency_within_thread(o->source),
+        u->skip = pa_usec_to_bytes(PA_CLIP_SUB(pa_source_get_latency_within_thread(o->source, false),
                                                u->latency),
                                    &o->sample_spec);
 
@@ -420,11 +428,12 @@ static void source_output_kill_cb(pa_source_output *o) {
     pa_assert_ctl_context();
     pa_assert_se(u = o->userdata);
 
-    /* The order here matters! We first kill the source output, followed
-     * by the source. That means the source callbacks must be protected
-     * against an unconnected source output! */
-    pa_source_output_unlink(u->source_output);
+    /* The order here matters! We first kill the source so that streams
+     * can properly be moved away while the source output is still connected
+     * to the master. */
+    pa_source_output_cork(u->source_output, true);
     pa_source_unlink(u->source);
+    pa_source_output_unlink(u->source_output);
 
     pa_source_output_unref(u->source_output);
     u->source_output = NULL;
@@ -586,6 +595,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(source_output_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_source_output_new_data_set_sample_spec(&source_output_data, &ss);
     pa_source_output_new_data_set_channel_map(&source_output_data, &map);
+    source_output_data.flags |= PA_SOURCE_OUTPUT_START_CORKED;
 
     pa_source_output_new(&u->source_output, m->core, &source_output_data);
     pa_source_output_new_data_done(&source_output_data);
@@ -604,8 +614,12 @@ int pa__init(pa_module*m) {
 
     u->source->output_from_master = u->source_output;
 
-    pa_source_put(u->source);
+    /* The order here is important. The output must be put first,
+     * otherwise streams might attach to the source before the
+     * source output is attached to the master. */
     pa_source_output_put(u->source_output);
+    pa_source_put(u->source);
+    pa_source_output_cork(u->source_output, false);
 
     /* Create optional uplink sink */
     pa_sink_new_data_init(&sink_data);
@@ -695,13 +709,15 @@ void pa__done(pa_module*m) {
      * destruction order! */
 
     if (u->source_output)
-        pa_source_output_unlink(u->source_output);
+        pa_source_output_cork(u->source_output, true);
 
     if (u->source)
         pa_source_unlink(u->source);
 
-    if (u->source_output)
+    if (u->source_output) {
+        pa_source_output_unlink(u->source_output);
         pa_source_output_unref(u->source_output);
+    }
 
     if (u->source)
         pa_source_unref(u->source);
diff --git a/src/modules/module-virtual-surround-sink.c b/src/modules/module-virtual-surround-sink.c
index 6c7120a..09c5e6d 100644
--- a/src/modules/module-virtual-surround-sink.c
+++ b/src/modules/module-virtual-surround-sink.c
@@ -51,6 +51,7 @@ PA_MODULE_USAGE(
         _("sink_name=<name for the sink> "
           "sink_properties=<properties for the sink> "
           "master=<name of sink to filter> "
+          "sink_master=<name of sink to filter> "
           "format=<sample format> "
           "rate=<sample rate> "
           "channels=<number of channels> "
@@ -58,9 +59,11 @@ PA_MODULE_USAGE(
           "use_volume_sharing=<yes or no> "
           "force_flat_volume=<yes or no> "
           "hrir=/path/to/left_hrir.wav "
+          "autoloaded=<set if this module is being loaded automatically> "
         ));
 
 #define MEMBLOCKQ_MAXLENGTH (16*1024*1024)
+#define DEFAULT_AUTOLOADED false
 
 struct userdata {
     pa_module *module;
@@ -87,12 +90,15 @@ struct userdata {
 
     float *input_buffer;
     int input_buffer_offset;
+
+    bool autoloaded;
 };
 
 static const char* const valid_modargs[] = {
     "sink_name",
     "sink_properties",
-    "master",
+    "master",  /* Will be deprecated. */
+    "sink_master",
     "format",
     "rate",
     "channels",
@@ -100,6 +106,7 @@ static const char* const valid_modargs[] = {
     "use_volume_sharing",
     "force_flat_volume",
     "hrir",
+    "autoloaded",
     NULL
 };
 
@@ -116,19 +123,31 @@ static int sink_process_msg_cb(pa_msgobject *o, int code, void *data, int64_t of
              * sink input is first shut down, the sink second. */
             if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
                 !PA_SINK_INPUT_IS_LINKED(u->sink_input->thread_info.state)) {
-                *((pa_usec_t*) data) = 0;
+                *((int64_t*) data) = 0;
                 return 0;
             }
 
-            *((pa_usec_t*) data) =
+            *((int64_t*) data) =
 
                 /* Get the latency of the master sink */
-                pa_sink_get_latency_within_thread(u->sink_input->sink) +
+                pa_sink_get_latency_within_thread(u->sink_input->sink, true) +
 
                 /* Add the latency internal to our sink input on top */
                 pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
 
             return 0;
+
+        case PA_SINK_MESSAGE_SET_STATE: {
+            pa_sink_state_t new_state = (pa_sink_state_t) PA_PTR_TO_UINT(data);
+
+            /* When set to running or idle for the first time, request a rewind
+             * of the master sink to make sure we are heard immediately */
+            if ((new_state == PA_SINK_IDLE || new_state == PA_SINK_RUNNING) && u->sink->thread_info.state == PA_SINK_INIT) {
+                pa_log_debug("Requesting rewind due to state change.");
+                pa_sink_input_request_rewind(u->sink_input, 0, false, true, true);
+            }
+            break;
+        }
     }
 
     return pa_sink_process_msg(o, code, data, offset, chunk);
@@ -226,6 +245,9 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
     pa_assert(chunk);
     pa_assert_se(u = i->userdata);
 
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return -1;
+
     /* Hmm, process any rewind request that might be queued up */
     pa_sink_process_rewind(u->sink, 0);
 
@@ -293,6 +315,10 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
+    /* If the sink is not yet linked, there is nothing to rewind */
+    if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        return;
+
     if (u->sink->thread_info.rewind_nbytes > 0) {
         size_t max_rewrite;
 
@@ -363,7 +389,8 @@ static void sink_input_detach_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    pa_sink_detach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_detach_within_thread(u->sink);
 
     pa_sink_set_rtpoll(u->sink, NULL);
 }
@@ -386,7 +413,8 @@ static void sink_input_attach_cb(pa_sink_input *i) {
      * https://bugs.freedesktop.org/show_bug.cgi?id=53709 */
     pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i) * u->sink_fs / u->fs);
 
-    pa_sink_attach_within_thread(u->sink);
+    if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
+        pa_sink_attach_within_thread(u->sink);
 }
 
 /* Called from main context */
@@ -396,11 +424,12 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    /* The order here matters! We first kill the sink input, followed
-     * by the sink. That means the sink callbacks must be protected
-     * against an unconnected sink input! */
-    pa_sink_input_unlink(u->sink_input);
+    /* The order here matters! We first kill the sink so that streams
+     * can properly be moved away while the sink input is still connected
+     * to the master. */
+    pa_sink_input_cork(u->sink_input, true);
     pa_sink_unlink(u->sink);
+    pa_sink_input_unlink(u->sink_input);
 
     pa_sink_input_unref(u->sink_input);
     u->sink_input = NULL;
@@ -411,20 +440,17 @@ static void sink_input_kill_cb(pa_sink_input *i) {
     pa_module_unload_request(u->module, true);
 }
 
-/* Called from IO thread context */
-static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) {
+/* Called from main context */
+static bool sink_input_may_move_to_cb(pa_sink_input *i, pa_sink *dest) {
     struct userdata *u;
 
     pa_sink_input_assert_ref(i);
     pa_assert_se(u = i->userdata);
 
-    /* If we are added for the first time, ask for a rewinding so that
-     * we are heard right-away. */
-    if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT) {
-        pa_log_debug("Requesting rewind due to state change.");
-        pa_sink_input_request_rewind(i, 0, false, true, true);
-    }
+    if (u->autoloaded)
+        return false;
+
+    return u->sink != dest;
 }
 
 /* Called from main context */
@@ -561,7 +587,8 @@ int pa__init(pa_module*m) {
     pa_sample_spec ss, sink_input_ss;
     pa_channel_map map, sink_input_map;
     pa_modargs *ma;
-    pa_sink *master=NULL;
+    const char *master_name;
+    pa_sink *master = NULL;
     pa_sink_input_new_data sink_input_data;
     pa_sink_new_data sink_data;
     bool use_volume_sharing = true;
@@ -591,8 +618,17 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
-    if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SINK))) {
-        pa_log("Master sink not found");
+    master_name = pa_modargs_get_value(ma, "sink_master", NULL);
+    if (!master_name) {
+        master_name = pa_modargs_get_value(ma, "master", NULL);
+        if (master_name)
+            pa_log_warn("The 'master' module argument is deprecated and may be removed in the future, "
+                        "please use the 'sink_master' argument instead.");
+    }
+
+    master = pa_namereg_get(m->core, master_name, PA_NAMEREG_SINK);
+    if (!master) {
+        pa_log("Master sink not found.");
         goto fail;
     }
 
@@ -672,6 +708,12 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
+    u->autoloaded = DEFAULT_AUTOLOADED;
+    if (pa_modargs_get_value_boolean(ma, "autoloaded", &u->autoloaded) < 0) {
+        pa_log("Failed to parse autoloaded value");
+        goto fail;
+    }
+
     if ((u->auto_desc = !pa_proplist_contains(sink_data.proplist, PA_PROP_DEVICE_DESCRIPTION))) {
         const char *z;
 
@@ -714,6 +756,7 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(sink_input_data.proplist, PA_PROP_MEDIA_ROLE, "filter");
     pa_sink_input_new_data_set_sample_spec(&sink_input_data, &sink_input_ss);
     pa_sink_input_new_data_set_channel_map(&sink_input_data, &sink_input_map);
+    sink_input_data.flags |= PA_SINK_INPUT_START_CORKED;
 
     pa_sink_input_new(&u->sink_input, m->core, &sink_input_data);
     pa_sink_input_new_data_done(&sink_input_data);
@@ -730,7 +773,7 @@ int pa__init(pa_module*m) {
     u->sink_input->kill = sink_input_kill_cb;
     u->sink_input->attach = sink_input_attach_cb;
     u->sink_input->detach = sink_input_detach_cb;
-    u->sink_input->state_change = sink_input_state_change_cb;
+    u->sink_input->may_move_to = sink_input_may_move_to_cb;
     u->sink_input->moving = sink_input_moving_cb;
     u->sink_input->volume_changed = use_volume_sharing ? NULL : sink_input_volume_changed_cb;
     u->sink_input->mute_changed = sink_input_mute_changed_cb;
@@ -828,8 +871,12 @@ int pa__init(pa_module*m) {
     u->input_buffer = pa_xmalloc0(u->hrir_samples * u->sink_fs);
     u->input_buffer_offset = 0;
 
-    pa_sink_put(u->sink);
+    /* The order here is important. The input must be put first,
+     * otherwise streams might attach to the sink before the sink
+     * input is attached to the master. */
     pa_sink_input_put(u->sink_input);
+    pa_sink_put(u->sink);
+    pa_sink_input_cork(u->sink_input, false);
 
     pa_modargs_free(ma);
     return 0;
@@ -870,13 +917,15 @@ void pa__done(pa_module*m) {
      * destruction order! */
 
     if (u->sink_input)
-        pa_sink_input_unlink(u->sink_input);
+        pa_sink_input_cork(u->sink_input, true);
 
     if (u->sink)
         pa_sink_unlink(u->sink);
 
-    if (u->sink_input)
+    if (u->sink_input) {
+        pa_sink_input_unlink(u->sink_input);
         pa_sink_input_unref(u->sink_input);
+    }
 
     if (u->sink)
         pa_sink_unref(u->sink);
diff --git a/src/modules/module-waveout.c b/src/modules/module-waveout.c
index 0b219f1..8d32e7b 100644
--- a/src/modules/module-waveout.c
+++ b/src/modules/module-waveout.c
@@ -24,6 +24,7 @@
 
 #include <windows.h>
 #include <mmsystem.h>
+#include <string.h>
 
 #include <pulse/xmalloc.h>
 #include <pulse/timeval.h>
@@ -46,8 +47,10 @@ PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_USAGE(
     "sink_name=<name for the sink> "
     "source_name=<name for the source> "
-    "device=<device number> "
-    "device_name=<name of the device> "
+    "output_device=<device number for the sink> "
+    "output_device_name=<name of the output device> "
+    "input_device=<device number for the source> "
+    "input_device_name=<name of the input device> "
     "record=<enable source?> "
     "playback=<enable sink?> "
     "format=<sample format> "
@@ -55,7 +58,9 @@ PA_MODULE_USAGE(
     "channels=<number of channels> "
     "channel_map=<channel map> "
     "fragments=<number of fragments> "
-    "fragment_size=<fragment size>");
+    "fragment_size=<fragment size>"
+    "device=<device number - deprecated>"
+    "device_name=<name of the device - deprecated>");
 
 #define DEFAULT_SINK_NAME "wave_output"
 #define DEFAULT_SOURCE_NAME "wave_input"
@@ -92,8 +97,10 @@ struct userdata {
 static const char* const valid_modargs[] = {
     "sink_name",
     "source_name",
-    "device",
-    "device_name",
+    "output_device",
+    "output_device_name",
+    "input_device",
+    "input_device_name",
     "record",
     "playback",
     "fragments",
@@ -102,6 +109,8 @@ static const char* const valid_modargs[] = {
     "rate",
     "channels",
     "channel_map",
+    "device",
+    "device_name",
     NULL
 };
 
@@ -369,7 +378,7 @@ static int process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa
                 pa_usec_t r = 0;
                 if (u->hwo)
                     r = sink_get_latency(u);
-                *((pa_usec_t*) data) = r;
+                *((int64_t*) data) = (int64_t)r;
                 return 0;
             }
 
@@ -387,7 +396,7 @@ static int process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa
                 pa_usec_t r = 0;
                 if (u->hwi)
                     r = source_get_latency(u);
-                *((pa_usec_t*) data) = r;
+                *((int64_t*) data) = (int64_t)r;
                 return 0;
             }
 
@@ -495,14 +504,17 @@ int pa__init(pa_module *m) {
     HWAVEIN hwi = INVALID_HANDLE_VALUE;
     WAVEFORMATEX wf;
     WAVEOUTCAPS pwoc;
+    WAVEINCAPS pwic;
     MMRESULT result;
     int nfrags, frag_size;
     bool record = true, playback = true;
-    unsigned int device;
+    unsigned int input_device;
+    unsigned int output_device;
     pa_sample_spec ss;
     pa_channel_map map;
     pa_modargs *ma = NULL;
-    const char *device_name = NULL;
+    const char *input_device_name = NULL;
+    const char *output_device_name = NULL;
     unsigned int i;
 
     pa_assert(m);
@@ -513,6 +525,12 @@ int pa__init(pa_module *m) {
         goto fail;
     }
 
+    /* Check whether deprecated arguments have been used. */
+    if (pa_modargs_get_value(ma, "device", NULL) != NULL || pa_modargs_get_value(ma, "device_name", NULL) != NULL) {
+        pa_log("device and device_name are no longer supported. Please use input_device, input_device_name, output_device and output_device_name.");
+        goto fail;
+    }
+
     if (pa_modargs_get_value_boolean(ma, "record", &record) < 0 || pa_modargs_get_value_boolean(ma, "playback", &playback) < 0) {
         pa_log("record= and playback= expect boolean argument.");
         goto fail;
@@ -523,31 +541,58 @@ int pa__init(pa_module *m) {
         goto fail;
     }
 
-    /* Set the device to be opened.  If set device_name is used,
-     * else device if set and lastly WAVE_MAPPER is the default */
-    device = WAVE_MAPPER;
-    if (pa_modargs_get_value_u32(ma, "device", &device) < 0) {
-        pa_log("failed to parse device argument");
+    /* Set the output_device to be opened. If set output_device_name is used,
+     * else output_device if set and lastly WAVE_MAPPER is the default */
+    output_device = WAVE_MAPPER;
+    if (pa_modargs_get_value_u32(ma, "output_device", &output_device) < 0) {
+        pa_log("failed to parse output_device argument");
         goto fail;
     }
-    if ((device_name = pa_modargs_get_value(ma, "device_name", NULL)) != NULL) {
-        unsigned int num_devices = waveOutGetNumDevs();
-        for (i = 0; i < num_devices; i++) {
+    if ((output_device_name = pa_modargs_get_value(ma, "output_device_name", NULL)) != NULL) {
+        unsigned int num_output_devices = waveOutGetNumDevs();
+        for (i = 0; i < num_output_devices; i++) {
             if (waveOutGetDevCaps(i, &pwoc, sizeof(pwoc)) == MMSYSERR_NOERROR)
-                if (_stricmp(device_name, pwoc.szPname) == 0)
+                if (strcmp(output_device_name, pwoc.szPname) == 0)
+                    break;
+        }
+        if (i < num_output_devices)
+            output_device = i;
+        else {
+            pa_log("output_device not found: %s", output_device_name);
+            goto fail;
+        }
+    }
+    if (waveOutGetDevCaps(output_device, &pwoc, sizeof(pwoc)) == MMSYSERR_NOERROR)
+        output_device_name = pwoc.szPname;
+    else
+        output_device_name = "unknown";
+
+    /* Set the input_device to be opened. If set input_device_name is used,
+     * else input_device if set and lastly WAVE_MAPPER is the default */
+    input_device = WAVE_MAPPER;
+    if (pa_modargs_get_value_u32(ma, "input_device", &input_device) < 0) {
+        pa_log("failed to parse input_device argument");
+        goto fail;
+    }
+    if ((input_device_name = pa_modargs_get_value(ma, "input_device_name", NULL)) != NULL) {
+        unsigned int num_input_devices = waveInGetNumDevs();
+        for (i = 0; i < num_input_devices; i++) {
+            if (waveInGetDevCaps(i, &pwic, sizeof(pwic)) == MMSYSERR_NOERROR)
+                if (strcmp(input_device_name, pwic.szPname) == 0)
                     break;
         }
-        if (i < num_devices)
-            device = i;
+        if (i < num_input_devices)
+            input_device = i;
         else {
-            pa_log("device not found: %s", device_name);
+            pa_log("input_device not found: %s", input_device_name);
             goto fail;
         }
     }
-    if (waveOutGetDevCaps(device, &pwoc, sizeof(pwoc)) == MMSYSERR_NOERROR)
-        device_name = pwoc.szPname;
+    if (waveInGetDevCaps(input_device, &pwic, sizeof(pwic)) == MMSYSERR_NOERROR)
+        input_device_name = pwic.szPname;
     else
-        device_name = "unknown";
+        input_device_name = "unknown";
+
 
     nfrags = 5;
     frag_size = 8192;
@@ -568,12 +613,12 @@ int pa__init(pa_module *m) {
     u = pa_xmalloc(sizeof(struct userdata));
 
     if (record) {
-        result = waveInOpen(&hwi, device, &wf, 0, 0, WAVE_FORMAT_DIRECT | WAVE_FORMAT_QUERY);
+        result = waveInOpen(&hwi, input_device, &wf, 0, 0, WAVE_FORMAT_DIRECT | WAVE_FORMAT_QUERY);
         if (result != MMSYSERR_NOERROR) {
             pa_log_warn("Sample spec not supported by WaveIn, falling back to default sample rate.");
             ss.rate = wf.nSamplesPerSec = m->core->default_sample_spec.rate;
         }
-        result = waveInOpen(&hwi, device, &wf, (DWORD_PTR) chunk_ready_cb, (DWORD_PTR) u, CALLBACK_FUNCTION);
+        result = waveInOpen(&hwi, input_device, &wf, (DWORD_PTR) chunk_ready_cb, (DWORD_PTR) u, CALLBACK_FUNCTION);
         if (result != MMSYSERR_NOERROR) {
             char errortext[MAXERRORLENGTH];
             pa_log("Failed to open WaveIn.");
@@ -588,12 +633,12 @@ int pa__init(pa_module *m) {
     }
 
     if (playback) {
-        result = waveOutOpen(&hwo, device, &wf, 0, 0, WAVE_FORMAT_DIRECT | WAVE_FORMAT_QUERY);
+        result = waveOutOpen(&hwo, output_device, &wf, 0, 0, WAVE_FORMAT_DIRECT | WAVE_FORMAT_QUERY);
         if (result != MMSYSERR_NOERROR) {
             pa_log_warn("Sample spec not supported by WaveOut, falling back to default sample rate.");
             ss.rate = wf.nSamplesPerSec = m->core->default_sample_spec.rate;
         }
-        result = waveOutOpen(&hwo, device, &wf, (DWORD_PTR) chunk_done_cb, (DWORD_PTR) u, CALLBACK_FUNCTION);
+        result = waveOutOpen(&hwo, output_device, &wf, (DWORD_PTR) chunk_done_cb, (DWORD_PTR) u, CALLBACK_FUNCTION);
         if (result != MMSYSERR_NOERROR) {
             char errortext[MAXERRORLENGTH];
             pa_log("Failed to open WaveOut.");
@@ -613,7 +658,7 @@ int pa__init(pa_module *m) {
         pa_source_new_data_set_sample_spec(&data, &ss);
         pa_source_new_data_set_channel_map(&data, &map);
         pa_source_new_data_set_name(&data, pa_modargs_get_value(ma, "source_name", DEFAULT_SOURCE_NAME));
-        pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "WaveIn on %s", device_name);
+        pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "WaveIn on %s", input_device_name);
         u->source = pa_source_new(m->core, &data, PA_SOURCE_HARDWARE|PA_SOURCE_LATENCY);
         pa_source_new_data_done(&data);
 
@@ -631,7 +676,7 @@ int pa__init(pa_module *m) {
         pa_sink_new_data_set_sample_spec(&data, &ss);
         pa_sink_new_data_set_channel_map(&data, &map);
         pa_sink_new_data_set_name(&data, pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME));
-        pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "WaveOut on %s", device_name);
+        pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "WaveOut on %s", output_device_name);
         u->sink = pa_sink_new(m->core, &data, PA_SINK_HARDWARE|PA_SINK_LATENCY);
         pa_sink_new_data_done(&data);
 
diff --git a/src/modules/oss/module-oss.c b/src/modules/oss/module-oss.c
index 8a5a692..4631ff3 100644
--- a/src/modules/oss/module-oss.c
+++ b/src/modules/oss/module-oss.c
@@ -659,7 +659,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
                     r = io_sink_get_latency(u);
             }
 
-            *((pa_usec_t*) data) = r;
+            *((int64_t*) data) = (int64_t)r;
 
             return 0;
         }
@@ -744,7 +744,7 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
                     r = io_source_get_latency(u);
             }
 
-            *((pa_usec_t*) data) = r;
+            *((int64_t*) data) = (int64_t)r;
             return 0;
         }
 
@@ -1195,7 +1195,7 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
-    mode = (playback && record) ? O_RDWR : (playback ? O_WRONLY : (record ? O_RDONLY : 0));
+    mode = (playback && record) ? O_RDWR : (playback ? O_WRONLY : O_RDONLY);
 
     ss = m->core->default_sample_spec;
     map = m->core->default_channel_map;
diff --git a/src/modules/raop/base64.c b/src/modules/raop/base64.c
deleted file mode 100644
index 1e09740..0000000
--- a/src/modules/raop/base64.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/***
-  This file is part of PulseAudio.
-
-  Copyright 2008 Colin Guthrie
-
-  PulseAudio is free software; you can redistribute it and/or modify
-  it under the terms of the GNU Lesser General Public License as published
-  by the Free Software Foundation; either version 2.1 of the License,
-  or (at your option) any later version.
-
-  PulseAudio 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 Lesser General Public License
-  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-***/
-
-/*
-  This file was originally inspired by a file developed by
-  Kungliga Tekniska högskolan
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <pulse/xmalloc.h>
-
-#include "base64.h"
-
-static const char base64_chars[] =
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-static int pos(char c) {
-    if (c >= 'A' && c <= 'Z') return c - 'A' + 0;
-    if (c >= 'a' && c <= 'z') return c - 'a' + 26;
-    if (c >= '0' && c <= '9') return c - '0' + 52;
-    if (c == '+') return 62;
-    if (c == '/') return 63;
-    return -1;
-}
-
-int pa_base64_encode(const void *data, int size, char **str) {
-    char *s, *p;
-    int i;
-    int c;
-    const unsigned char *q;
-
-    p = s = pa_xnew(char, size * 4 / 3 + 4);
-    q = (const unsigned char *) data;
-    for (i = 0; i < size;) {
-        c = q[i++];
-        c *= 256;
-        if (i < size)
-            c += q[i];
-        i++;
-        c *= 256;
-        if (i < size)
-            c += q[i];
-        i++;
-        p[0] = base64_chars[(c & 0x00fc0000) >> 18];
-        p[1] = base64_chars[(c & 0x0003f000) >> 12];
-        p[2] = base64_chars[(c & 0x00000fc0) >> 6];
-        p[3] = base64_chars[(c & 0x0000003f) >> 0];
-        if (i > size)
-            p[3] = '=';
-        if (i > size + 1)
-            p[2] = '=';
-        p += 4;
-    }
-    *p = 0;
-    *str = s;
-    return strlen(s);
-}
-
-#define DECODE_ERROR 0xffffffff
-
-static unsigned int token_decode(const char *token) {
-    int i;
-    unsigned int val = 0;
-    int marker = 0;
-    if (strlen(token) < 4)
-        return DECODE_ERROR;
-    for (i = 0; i < 4; i++) {
-        val *= 64;
-        if (token[i] == '=')
-            marker++;
-        else if (marker > 0)
-            return DECODE_ERROR;
-        else {
-            int lpos = pos(token[i]);
-            if (lpos < 0)
-                return DECODE_ERROR;
-            val += lpos;
-        }
-    }
-    if (marker > 2)
-        return DECODE_ERROR;
-    return (marker << 24) | val;
-}
-
-int pa_base64_decode(const char *str, void *data) {
-    const char *p;
-    unsigned char *q;
-
-    q = data;
-    for (p = str; *p && (*p == '=' || strchr(base64_chars, *p)); p += 4) {
-        unsigned int val = token_decode(p);
-        unsigned int marker = (val >> 24) & 0xff;
-        if (val == DECODE_ERROR)
-            return -1;
-        *q++ = (val >> 16) & 0xff;
-        if (marker < 2)
-            *q++ = (val >> 8) & 0xff;
-        if (marker < 1)
-            *q++ = val & 0xff;
-    }
-    return q - (unsigned char *) data;
-}
diff --git a/src/modules/raop/module-raop-discover.c b/src/modules/raop/module-raop-discover.c
index f083044..9c7ac3c 100644
--- a/src/modules/raop/module-raop-discover.c
+++ b/src/modules/raop/module-raop-discover.c
@@ -52,6 +52,17 @@ PA_MODULE_LOAD_ONCE(true);
 
 #define SERVICE_TYPE_SINK "_raop._tcp"
 
+struct userdata {
+    pa_core *core;
+    pa_module *module;
+
+    AvahiPoll *avahi_poll;
+    AvahiClient *client;
+    AvahiServiceBrowser *sink_browser;
+
+    pa_hashmap *tunnels;
+};
+
 static const char* const valid_modargs[] = {
     NULL
 };
@@ -63,16 +74,6 @@ struct tunnel {
     uint32_t module_index;
 };
 
-struct userdata {
-    pa_core *core;
-    pa_module *module;
-    AvahiPoll *avahi_poll;
-    AvahiClient *client;
-    AvahiServiceBrowser *sink_browser;
-
-    pa_hashmap *tunnels;
-};
-
 static unsigned tunnel_hash(const void *p) {
     const struct tunnel *t = p;
 
@@ -102,11 +103,11 @@ static int tunnel_compare(const void *a, const void *b) {
     return 0;
 }
 
-static struct tunnel *tunnel_new(
+static struct tunnel* tunnel_new(
         AvahiIfIndex interface, AvahiProtocol protocol,
         const char *name, const char *type, const char *domain) {
-
     struct tunnel *t;
+
     t = pa_xnew(struct tunnel, 1);
     t->interface = interface;
     t->protocol = protocol;
@@ -114,6 +115,7 @@ static struct tunnel *tunnel_new(
     t->type = pa_xstrdup(type);
     t->domain = pa_xstrdup(domain);
     t->module_index = PA_IDXSET_INVALID;
+
     return t;
 }
 
@@ -134,88 +136,190 @@ static void resolver_cb(
         AvahiStringList *txt,
         AvahiLookupResultFlags flags,
         void *userdata) {
-
     struct userdata *u = userdata;
     struct tunnel *tnl;
+    char *device = NULL, *nicename, *dname, *vname, *args;
+    char *tp = NULL, *et = NULL, *cn = NULL;
+    char *ch = NULL, *ss = NULL, *sr = NULL;
+    char *t = NULL;
+    char at[AVAHI_ADDRESS_STR_MAX];
+    AvahiStringList *l;
+    pa_module *m;
 
     pa_assert(u);
 
     tnl = tunnel_new(interface, protocol, name, type, domain);
 
-    if (event != AVAHI_RESOLVER_FOUND)
+    if (event != AVAHI_RESOLVER_FOUND) {
         pa_log("Resolving of '%s' failed: %s", name, avahi_strerror(avahi_client_errno(u->client)));
-    else {
-        char *device = NULL, *nicename, *dname, *vname, *args;
-        char at[AVAHI_ADDRESS_STR_MAX];
-        AvahiStringList *l;
-        pa_module *m;
-
-        if ((nicename = strstr(name, "@"))) {
-            ++nicename;
-            if (strlen(nicename) > 0) {
-                pa_log_debug("Found RAOP: %s", nicename);
-                nicename = pa_escape(nicename, "\"'");
-            } else
-                nicename = NULL;
-        }
+        goto finish;
+    }
 
-        for (l = txt; l; l = l->next) {
-            char *key, *value;
-            pa_assert_se(avahi_string_list_get_pair(l, &key, &value, NULL) == 0);
+    if ((nicename = strstr(name, "@"))) {
+        ++nicename;
+        if (strlen(nicename) > 0) {
+            pa_log_debug("Found RAOP: %s", nicename);
+            nicename = pa_escape(nicename, "\"'");
+        } else
+            nicename = NULL;
+    }
 
-            pa_log_debug("Found key: '%s' with value: '%s'", key, value);
-            if (pa_streq(key, "device")) {
-                pa_xfree(device);
-                device = value;
-                value = NULL;
-            }
-            avahi_free(key);
-            avahi_free(value);
+    for (l = txt; l; l = l->next) {
+        char *key, *value;
+        pa_assert_se(avahi_string_list_get_pair(l, &key, &value, NULL) == 0);
+
+        pa_log_debug("Found key: '%s' with value: '%s'", key, value);
+        if (pa_streq(key, "device")) {
+            device = value;
+            value = NULL;
+        } else if (pa_streq(key, "tp")) {
+            /* Transport protocol:
+             *  - TCP = only TCP,
+             *  - UDP = only UDP,
+             *  - TCP,UDP = both supported (UDP should be prefered) */
+            pa_xfree(tp);
+            if (pa_str_in_list(value, ",", "UDP"))
+                tp = pa_xstrdup("UDP");
+            else if (pa_str_in_list(value, ",", "TCP"))
+                tp = pa_xstrdup("TCP");
+            else
+                tp = pa_xstrdup(value);
+        } else if (pa_streq(key, "et")) {
+            /* Supported encryption types:
+             *  - 0 = none,
+             *  - 1 = RSA,
+             *  - 2 = FairPlay,
+             *  - 3 = MFiSAP,
+             *  - 4 = FairPlay SAPv2.5. */
+            pa_xfree(et);
+            if (pa_str_in_list(value, ",", "1"))
+                et = pa_xstrdup("RSA");
+            else
+                et = pa_xstrdup("none");
+        } else if (pa_streq(key, "cn")) {
+            /* Suported audio codecs:
+             *  - 0 = PCM,
+             *  - 1 = ALAC,
+             *  - 2 = AAC,
+             *  - 3 = AAC ELD. */
+            pa_xfree(cn);
+            if (pa_str_in_list(value, ",", "1"))
+                cn = pa_xstrdup("ALAC");
+            else
+                cn = pa_xstrdup("PCM");
+        } else if (pa_streq(key, "md")) {
+            /* Supported metadata types:
+             *  - 0 = text,
+             *  - 1 = artwork,
+             *  - 2 = progress. */
+        } else if (pa_streq(key, "pw")) {
+            /* Requires password ? (true/false) */
+        } else if (pa_streq(key, "ch")) {
+            /* Number of channels */
+            pa_xfree(ch);
+            ch = pa_xstrdup(value);
+        } else if (pa_streq(key, "ss")) {
+            /* Sample size */
+            pa_xfree(ss);
+            ss = pa_xstrdup(value);
+        } else if (pa_streq(key, "sr")) {
+            /* Sample rate */
+            pa_xfree(sr);
+            sr = pa_xstrdup(value);
         }
 
-        if (device)
-            dname = pa_sprintf_malloc("raop.%s.%s", host_name, device);
-        else
-            dname = pa_sprintf_malloc("raop.%s", host_name);
+        avahi_free(key);
+        avahi_free(value);
+    }
 
-        if (!(vname = pa_namereg_make_valid_name(dname))) {
-            pa_log("Cannot construct valid device name from '%s'.", dname);
-            avahi_free(device);
-            pa_xfree(dname);
-            goto finish;
-        }
+    if (device)
+        dname = pa_sprintf_malloc("raop_output.%s.%s", host_name, device);
+    else
+        dname = pa_sprintf_malloc("raop_output.%s", host_name);
+
+    if (!(vname = pa_namereg_make_valid_name(dname))) {
+        pa_log("Cannot construct valid device name from '%s'.", dname);
+        avahi_free(device);
         pa_xfree(dname);
+        pa_xfree(tp);
+        pa_xfree(et);
+        pa_xfree(cn);
+        pa_xfree(ch);
+        pa_xfree(ss);
+        pa_xfree(sr);
+        goto finish;
+    }
 
-        if (nicename) {
-            args = pa_sprintf_malloc("server=[%s]:%u "
-                                     "sink_name=%s "
-                                     "sink_properties='device.description=\"%s\"'",
-                                     avahi_address_snprint(at, sizeof(at), a), port,
-                                     vname,
-                                     nicename);
-            pa_xfree(nicename);
-        } else {
-            args = pa_sprintf_malloc("server=[%s]:%u "
-                                     "sink_name=%s",
-                                     avahi_address_snprint(at, sizeof(at), a), port,
-                                     vname);
-        }
+    avahi_free(device);
+    pa_xfree(dname);
+
+    avahi_address_snprint(at, sizeof(at), a);
+    if (nicename) {
+        args = pa_sprintf_malloc("server=[%s]:%u "
+                                 "sink_name=%s "
+                                 "sink_properties='device.description=\"%s (%s:%u)\"'",
+                                 at, port,
+                                 vname,
+                                 nicename, at, port);
+        pa_xfree(nicename);
+    } else {
+        args = pa_sprintf_malloc("server=[%s]:%u "
+                                 "sink_name=%s"
+                                 "sink_properties='device.description=\"%s:%u\"'",
+                                 at, port,
+                                 vname,
+                                 at, port);
+    }
 
-        pa_log_debug("Loading module-raop-sink with arguments '%s'", args);
+    if (tp != NULL) {
+        t = args;
+        args = pa_sprintf_malloc("%s protocol=%s", args, tp);
+        pa_xfree(tp);
+        pa_xfree(t);
+    }
+    if (et != NULL) {
+        t = args;
+        args = pa_sprintf_malloc("%s encryption=%s", args, et);
+        pa_xfree(et);
+        pa_xfree(t);
+    }
+    if (cn != NULL) {
+        t = args;
+        args = pa_sprintf_malloc("%s codec=%s", args, cn);
+        pa_xfree(cn);
+        pa_xfree(t);
+    }
+    if (ch != NULL) {
+        t = args;
+        args = pa_sprintf_malloc("%s channels=%s", args, ch);
+        pa_xfree(ch);
+        pa_xfree(t);
+    }
+    if (ss != NULL) {
+        t = args;
+        args = pa_sprintf_malloc("%s format=%s", args, ss);
+        pa_xfree(ss);
+        pa_xfree(t);
+    }
+    if (sr != NULL) {
+        t = args;
+        args = pa_sprintf_malloc("%s rate=%s", args, sr);
+        pa_xfree(sr);
+        pa_xfree(t);
+    }
 
-        if ((m = pa_module_load(u->core, "module-raop-sink", args))) {
-            tnl->module_index = m->index;
-            pa_hashmap_put(u->tunnels, tnl, tnl);
-            tnl = NULL;
-        }
+    pa_log_debug("Loading module-raop-sink with arguments '%s'", args);
 
-        pa_xfree(vname);
-        pa_xfree(args);
-        avahi_free(device);
+    if ((m = pa_module_load(u->core, "module-raop-sink", args))) {
+        tnl->module_index = m->index;
+        pa_hashmap_put(u->tunnels, tnl, tnl);
+        tnl = NULL;
     }
 
-finish:
+    pa_xfree(vname);
+    pa_xfree(args);
 
+finish:
     avahi_service_resolver_free(r);
 
     if (tnl)
@@ -229,7 +333,6 @@ static void browser_cb(
         const char *name, const char *type, const char *domain,
         AvahiLookupResultFlags flags,
         void *userdata) {
-
     struct userdata *u = userdata;
     struct tunnel *t;
 
@@ -248,7 +351,7 @@ static void browser_cb(
 
         /* We ignore the returned resolver object here, since the we don't
          * need to attach any special data to it, and we can still destroy
-         * it from the callback */
+         * it from the callback. */
 
     } else if (event == AVAHI_BROWSER_REMOVE) {
         struct tunnel *t2;
@@ -275,9 +378,7 @@ static void client_callback(AvahiClient *c, AvahiClientState state, void *userda
         case AVAHI_CLIENT_S_REGISTERING:
         case AVAHI_CLIENT_S_RUNNING:
         case AVAHI_CLIENT_S_COLLISION:
-
             if (!u->sink_browser) {
-
                 if (!(u->sink_browser = avahi_service_browser_new(
                               c,
                               AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC,
@@ -299,16 +400,16 @@ static void client_callback(AvahiClient *c, AvahiClientState state, void *userda
 
                 pa_log_debug("Avahi daemon disconnected.");
 
+                /* Try to reconnect. */
                 if (!(u->client = avahi_client_new(u->avahi_poll, AVAHI_CLIENT_NO_FAIL, client_callback, u, &error))) {
                     pa_log("avahi_client_new() failed: %s", avahi_strerror(error));
                     pa_module_unload_request(u->module, true);
                 }
             }
 
-            /* Fall through */
+            /* Fall through. */
 
         case AVAHI_CLIENT_CONNECTING:
-
             if (u->sink_browser) {
                 avahi_service_browser_free(u->sink_browser);
                 u->sink_browser = NULL;
@@ -316,12 +417,12 @@ static void client_callback(AvahiClient *c, AvahiClientState state, void *userda
 
             break;
 
-        default: ;
+        default:
+            break;
     }
 }
 
-int pa__init(pa_module*m) {
-
+int pa__init(pa_module *m) {
     struct userdata *u;
     pa_modargs *ma = NULL;
     int error;
@@ -358,8 +459,9 @@ fail:
     return -1;
 }
 
-void pa__done(pa_module*m) {
-    struct userdata*u;
+void pa__done(pa_module *m) {
+    struct userdata *u;
+
     pa_assert(m);
 
     if (!(u = m->userdata))
diff --git a/src/modules/raop/module-raop-sink.c b/src/modules/raop/module-raop-sink.c
index 7a97e83..82fa48d 100644
--- a/src/modules/raop/module-raop-sink.c
+++ b/src/modules/raop/module-raop-sink.c
@@ -22,612 +22,67 @@
 #include <config.h>
 #endif
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/ioctl.h>
-
-#ifdef HAVE_LINUX_SOCKIOS_H
-#include <linux/sockios.h>
-#endif
-
-#include <pulse/rtclock.h>
-#include <pulse/timeval.h>
-#include <pulse/xmalloc.h>
-
-#include <pulsecore/core-error.h>
-#include <pulsecore/sink.h>
 #include <pulsecore/module.h>
-#include <pulsecore/core-util.h>
+#include <pulsecore/sink.h>
 #include <pulsecore/modargs.h>
-#include <pulsecore/log.h>
-#include <pulsecore/socket-client.h>
-#include <pulsecore/thread-mq.h>
-#include <pulsecore/thread.h>
-#include <pulsecore/time-smoother.h>
-#include <pulsecore/poll.h>
+
+#include "raop-sink.h"
 
 #include "module-raop-sink-symdef.h"
-#include "rtp.h"
-#include "sdp.h"
-#include "sap.h"
-#include "raop_client.h"
 
 PA_MODULE_AUTHOR("Colin Guthrie");
 PA_MODULE_DESCRIPTION("RAOP Sink");
 PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_LOAD_ONCE(false);
 PA_MODULE_USAGE(
+        "name=<name of the sink, to be prefixed> "
         "sink_name=<name for the sink> "
         "sink_properties=<properties for the sink> "
-        "server=<address>  "
+        "server=<address> "
+        "protocol=<transport protocol> "
+        "encryption=<encryption type> "
+        "codec=<audio codec> "
         "format=<sample format> "
         "rate=<sample rate> "
-        "channels=<number of channels>");
-
-#define DEFAULT_SINK_NAME "raop"
-
-struct userdata {
-    pa_core *core;
-    pa_module *module;
-    pa_sink *sink;
-
-    pa_thread_mq thread_mq;
-    pa_rtpoll *rtpoll;
-    pa_rtpoll_item *rtpoll_item;
-    pa_thread *thread;
-
-    pa_memchunk raw_memchunk;
-    pa_memchunk encoded_memchunk;
-
-    void *write_data;
-    size_t write_length, write_index;
-
-    void *read_data;
-    size_t read_length, read_index;
-
-    pa_usec_t latency;
-
-    /*esd_format_t format;*/
-    int32_t rate;
-
-    pa_smoother *smoother;
-    int fd;
-
-    int64_t offset;
-    int64_t encoding_overhead;
-    int32_t next_encoding_overhead;
-    double encoding_ratio;
-
-    pa_raop_client *raop;
-
-    size_t block_size;
-};
+        "channels=<number of channels> "
+        "username=<authentication user name, default: \"iTunes\"> "
+        "password=<authentication password>");
 
 static const char* const valid_modargs[] = {
+    "name",
     "sink_name",
     "sink_properties",
     "server",
+    "protocol",
+    "encryption",
+    "codec",
     "format",
     "rate",
     "channels",
+    "username",
+    "password",
     NULL
 };
 
-enum {
-    SINK_MESSAGE_PASS_SOCKET = PA_SINK_MESSAGE_MAX,
-    SINK_MESSAGE_RIP_SOCKET
-};
-
-/* Forward declaration */
-static void sink_set_volume_cb(pa_sink *);
-
-static void on_connection(int fd, void*userdata) {
-    int so_sndbuf = 0;
-    socklen_t sl = sizeof(int);
-    struct userdata *u = userdata;
-    pa_assert(u);
-
-    pa_assert(u->fd < 0);
-    u->fd = fd;
-
-    if (getsockopt(u->fd, SOL_SOCKET, SO_SNDBUF, &so_sndbuf, &sl) < 0)
-        pa_log_warn("getsockopt(SO_SNDBUF) failed: %s", pa_cstrerror(errno));
-    else {
-        pa_log_debug("SO_SNDBUF is %zu.", (size_t) so_sndbuf);
-        pa_sink_set_max_request(u->sink, PA_MAX((size_t) so_sndbuf, u->block_size));
-    }
-
-    /* Set the initial volume */
-    sink_set_volume_cb(u->sink);
-
-    pa_log_debug("Connection authenticated, handing fd to IO thread...");
-
-    pa_asyncmsgq_post(u->thread_mq.inq, PA_MSGOBJECT(u->sink), SINK_MESSAGE_PASS_SOCKET, NULL, 0, NULL, NULL);
-}
-
-static void on_close(void*userdata) {
-    struct userdata *u = userdata;
-    pa_assert(u);
-
-    pa_log_debug("Connection closed, informing IO thread...");
-
-    pa_asyncmsgq_post(u->thread_mq.inq, PA_MSGOBJECT(u->sink), SINK_MESSAGE_RIP_SOCKET, NULL, 0, NULL, NULL);
-}
-
-static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
-    struct userdata *u = PA_SINK(o)->userdata;
-
-    switch (code) {
-
-        case PA_SINK_MESSAGE_SET_STATE:
-
-            switch ((pa_sink_state_t) PA_PTR_TO_UINT(data)) {
-
-                case PA_SINK_SUSPENDED:
-                    pa_assert(PA_SINK_IS_OPENED(u->sink->thread_info.state));
-
-                    pa_smoother_pause(u->smoother, pa_rtclock_now());
-
-                    /* Issue a FLUSH if we are connected */
-                    if (u->fd >= 0) {
-                        pa_raop_flush(u->raop);
-                    }
-                    break;
-
-                case PA_SINK_IDLE:
-                case PA_SINK_RUNNING:
-
-                    if (u->sink->thread_info.state == PA_SINK_SUSPENDED) {
-                        pa_smoother_resume(u->smoother, pa_rtclock_now(), true);
-
-                        /* The connection can be closed when idle, so check to
-                           see if we need to reestablish it */
-                        if (u->fd < 0)
-                            pa_raop_connect(u->raop);
-                        else
-                            pa_raop_flush(u->raop);
-                    }
-
-                    break;
-
-                case PA_SINK_UNLINKED:
-                case PA_SINK_INIT:
-                case PA_SINK_INVALID_STATE:
-                    ;
-            }
-
-            break;
-
-        case PA_SINK_MESSAGE_GET_LATENCY: {
-            pa_usec_t w, r;
-
-            r = pa_smoother_get(u->smoother, pa_rtclock_now());
-            w = pa_bytes_to_usec((u->offset - u->encoding_overhead + (u->encoded_memchunk.length / u->encoding_ratio)), &u->sink->sample_spec);
-
-            *((pa_usec_t*) data) = w > r ? w - r : 0;
-            return 0;
-        }
-
-        case SINK_MESSAGE_PASS_SOCKET: {
-            struct pollfd *pollfd;
-
-            pa_assert(!u->rtpoll_item);
-
-            u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
-            pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
-            pollfd->fd = u->fd;
-            pollfd->events = POLLOUT;
-            /*pollfd->events = */pollfd->revents = 0;
-
-            if (u->sink->thread_info.state == PA_SINK_SUSPENDED) {
-                /* Our stream has been suspended so we just flush it.... */
-                pa_raop_flush(u->raop);
-            }
-            return 0;
-        }
-
-        case SINK_MESSAGE_RIP_SOCKET: {
-            if (u->fd >= 0) {
-                pa_close(u->fd);
-                u->fd = -1;
-            } else
-                /* FIXME */
-                pa_log("We should not get to this state. Cannot rip socket if not connected.");
-
-            if (u->sink->thread_info.state == PA_SINK_SUSPENDED) {
-
-                pa_log_debug("RTSP control connection closed, but we're suspended so let's not worry about it... we'll open it again later");
-
-                if (u->rtpoll_item)
-                    pa_rtpoll_item_free(u->rtpoll_item);
-                u->rtpoll_item = NULL;
-            } else {
-                /* Question: is this valid here: or should we do some sort of:
-                   return pa_sink_process_msg(PA_MSGOBJECT(u->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL);
-                   ?? */
-                pa_module_unload_request(u->module, true);
-            }
-            return 0;
-        }
-    }
-
-    return pa_sink_process_msg(o, code, data, offset, chunk);
-}
-
-static void sink_set_volume_cb(pa_sink *s) {
-    struct userdata *u = s->userdata;
-    pa_cvolume hw;
-    pa_volume_t v;
-    char t[PA_CVOLUME_SNPRINT_VERBOSE_MAX];
-
-    pa_assert(u);
-
-    /* If we're muted we don't need to do anything */
-    if (s->muted)
-        return;
-
-    /* Calculate the max volume of all channels.
-       We'll use this as our (single) volume on the APEX device and emulate
-       any variation in channel volumes in software */
-    v = pa_cvolume_max(&s->real_volume);
-
-    /* Create a pa_cvolume version of our single value */
-    pa_cvolume_set(&hw, s->sample_spec.channels, v);
-
-    /* Perform any software manipulation of the volume needed */
-    pa_sw_cvolume_divide(&s->soft_volume, &s->real_volume, &hw);
-
-    pa_log_debug("Requested volume: %s", pa_cvolume_snprint_verbose(t, sizeof(t), &s->real_volume, &s->channel_map, false));
-    pa_log_debug("Got hardware volume: %s", pa_cvolume_snprint_verbose(t, sizeof(t), &hw, &s->channel_map, false));
-    pa_log_debug("Calculated software volume: %s",
-                 pa_cvolume_snprint_verbose(t, sizeof(t), &s->soft_volume, &s->channel_map, true));
-
-    /* Any necessary software volume manipulation is done so set
-       our hw volume (or v as a single value) on the device */
-    pa_raop_client_set_volume(u->raop, v);
-}
-
-static void sink_set_mute_cb(pa_sink *s) {
-    struct userdata *u = s->userdata;
-
-    pa_assert(u);
-
-    if (s->muted) {
-        pa_raop_client_set_volume(u->raop, PA_VOLUME_MUTED);
-    } else {
-        sink_set_volume_cb(s);
-    }
-}
-
-static void thread_func(void *userdata) {
-    struct userdata *u = userdata;
-    int write_type = 0;
-    pa_memchunk silence;
-    uint32_t silence_overhead = 0;
-    double silence_ratio = 0;
-
-    pa_assert(u);
-
-    pa_log_debug("Thread starting up");
-
-    pa_thread_mq_install(&u->thread_mq);
-
-    pa_smoother_set_time_offset(u->smoother, pa_rtclock_now());
-
-    /* Create a chunk of memory that is our encoded silence sample. */
-    pa_memchunk_reset(&silence);
-
-    for (;;) {
-        int ret;
-
-        if (PA_UNLIKELY(u->sink->thread_info.rewind_requested))
-            pa_sink_process_rewind(u->sink, 0);
-
-        if (u->rtpoll_item) {
-            struct pollfd *pollfd;
-            pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
-
-            /* Render some data and write it to the fifo */
-            if (/*PA_SINK_IS_OPENED(u->sink->thread_info.state) && */pollfd->revents) {
-                pa_usec_t usec;
-                int64_t n;
-                void *p;
-
-                if (!silence.memblock) {
-                    pa_memchunk silence_tmp;
-
-                    pa_memchunk_reset(&silence_tmp);
-                    silence_tmp.memblock = pa_memblock_new(u->core->mempool, 4096);
-                    silence_tmp.length = 4096;
-                    p = pa_memblock_acquire(silence_tmp.memblock);
-                      memset(p, 0, 4096);
-                    pa_memblock_release(silence_tmp.memblock);
-                    pa_raop_client_encode_sample(u->raop, &silence_tmp, &silence);
-                    pa_assert(0 == silence_tmp.length);
-                    silence_overhead = silence_tmp.length - 4096;
-                    silence_ratio = silence_tmp.length / 4096;
-                    pa_memblock_unref(silence_tmp.memblock);
-                }
-
-                for (;;) {
-                    ssize_t l;
-
-                    if (u->encoded_memchunk.length <= 0) {
-                        if (u->encoded_memchunk.memblock)
-                            pa_memblock_unref(u->encoded_memchunk.memblock);
-                        if (PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
-                            size_t rl;
-
-                            /* We render real data */
-                            if (u->raw_memchunk.length <= 0) {
-                                if (u->raw_memchunk.memblock)
-                                    pa_memblock_unref(u->raw_memchunk.memblock);
-                                pa_memchunk_reset(&u->raw_memchunk);
-
-                                /* Grab unencoded data */
-                                pa_sink_render(u->sink, u->block_size, &u->raw_memchunk);
-                            }
-                            pa_assert(u->raw_memchunk.length > 0);
-
-                            /* Encode it */
-                            rl = u->raw_memchunk.length;
-                            u->encoding_overhead += u->next_encoding_overhead;
-                            pa_raop_client_encode_sample(u->raop, &u->raw_memchunk, &u->encoded_memchunk);
-                            u->next_encoding_overhead = (u->encoded_memchunk.length - (rl - u->raw_memchunk.length));
-                            u->encoding_ratio = u->encoded_memchunk.length / (rl - u->raw_memchunk.length);
-                        } else {
-                            /* We render some silence into our memchunk */
-                            memcpy(&u->encoded_memchunk, &silence, sizeof(pa_memchunk));
-                            pa_memblock_ref(silence.memblock);
-
-                            /* Calculate/store some values to be used with the smoother */
-                            u->next_encoding_overhead = silence_overhead;
-                            u->encoding_ratio = silence_ratio;
-                        }
-                    }
-                    pa_assert(u->encoded_memchunk.length > 0);
-
-                    p = pa_memblock_acquire(u->encoded_memchunk.memblock);
-                    l = pa_write(u->fd, (uint8_t*) p + u->encoded_memchunk.index, u->encoded_memchunk.length, &write_type);
-                    pa_memblock_release(u->encoded_memchunk.memblock);
-
-                    pa_assert(l != 0);
-
-                    if (l < 0) {
-
-                        if (errno == EINTR)
-                            continue;
-                        else if (errno == EAGAIN) {
-
-                            /* OK, we filled all socket buffers up
-                             * now. */
-                            goto filled_up;
-
-                        } else {
-                            pa_log("Failed to write data to FIFO: %s", pa_cstrerror(errno));
-                            goto fail;
-                        }
-
-                    } else {
-                        u->offset += l;
-
-                        u->encoded_memchunk.index += l;
-                        u->encoded_memchunk.length -= l;
-
-                        pollfd->revents = 0;
-
-                        if (u->encoded_memchunk.length > 0) {
-                            /* we've completely written the encoded data, so update our overhead */
-                            u->encoding_overhead += u->next_encoding_overhead;
-
-                            /* OK, we wrote less that we asked for,
-                             * hence we can assume that the socket
-                             * buffers are full now */
-                            goto filled_up;
-                        }
-                    }
-                }
-
-            filled_up:
-
-                /* At this spot we know that the socket buffers are
-                 * fully filled up. This is the best time to estimate
-                 * the playback position of the server */
-
-                n = u->offset - u->encoding_overhead;
-
-#ifdef SIOCOUTQ
-                {
-                    int l;
-                    if (ioctl(u->fd, SIOCOUTQ, &l) >= 0 && l > 0)
-                        n -= (l / u->encoding_ratio);
-                }
-#endif
-
-                usec = pa_bytes_to_usec(n, &u->sink->sample_spec);
-
-                if (usec > u->latency)
-                    usec -= u->latency;
-                else
-                    usec = 0;
-
-                pa_smoother_put(u->smoother, pa_rtclock_now(), usec);
-            }
-
-            /* Hmm, nothing to do. Let's sleep */
-            pollfd->events = POLLOUT; /*PA_SINK_IS_OPENED(u->sink->thread_info.state)  ? POLLOUT : 0;*/
-        }
-
-        if ((ret = pa_rtpoll_run(u->rtpoll)) < 0)
-            goto fail;
-
-        if (ret == 0)
-            goto finish;
-
-        if (u->rtpoll_item) {
-            struct pollfd* pollfd;
-
-            pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
-
-            if (pollfd->revents & ~POLLOUT) {
-                if (u->sink->thread_info.state != PA_SINK_SUSPENDED) {
-                    pa_log("FIFO shutdown.");
-                    goto fail;
-                }
-
-                /* We expect this to happen on occasion if we are not sending data.
-                   It's perfectly natural and normal and natural */
-                if (u->rtpoll_item)
-                    pa_rtpoll_item_free(u->rtpoll_item);
-                u->rtpoll_item = NULL;
-            }
-        }
-    }
-
-fail:
-    /* If this was no regular exit from the loop we have to continue
-     * processing messages until we received PA_MESSAGE_SHUTDOWN */
-    pa_asyncmsgq_post(u->thread_mq.outq, PA_MSGOBJECT(u->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
-    pa_asyncmsgq_wait_for(u->thread_mq.inq, PA_MESSAGE_SHUTDOWN);
-
-finish:
-    if (silence.memblock)
-        pa_memblock_unref(silence.memblock);
-    pa_log_debug("Thread shutting down");
-}
-
-int pa__init(pa_module*m) {
-    struct userdata *u = NULL;
-    pa_sample_spec ss;
+int pa__init(pa_module *m) {
     pa_modargs *ma = NULL;
-    const char *server;
-    pa_sink_new_data data;
 
     pa_assert(m);
 
     if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
-        pa_log("failed to parse module arguments");
+        pa_log("Failed to parse module arguments");
         goto fail;
     }
 
-    ss.format = PA_SAMPLE_S16NE;
-    ss.channels = 2;
-    ss.rate = m->core->default_sample_spec.rate;
-    if (pa_modargs_get_sample_spec(ma, &ss) < 0) {
-        pa_log("invalid sample format specification");
+    if (!(m->userdata = pa_raop_sink_new(m, ma, __FILE__)))
         goto fail;
-    }
-
-    if ((ss.format != PA_SAMPLE_S16NE) ||
-        (ss.channels > 2)) {
-        pa_log("sample type support is limited to mono/stereo and S16NE sample data");
-        goto fail;
-    }
-
-    u = pa_xnew0(struct userdata, 1);
-    u->core = m->core;
-    u->module = m;
-    m->userdata = u;
-    u->fd = -1;
-    u->smoother = pa_smoother_new(
-            PA_USEC_PER_SEC,
-            PA_USEC_PER_SEC*2,
-            true,
-            true,
-            10,
-            0,
-            false);
-    pa_memchunk_reset(&u->raw_memchunk);
-    pa_memchunk_reset(&u->encoded_memchunk);
-    u->offset = 0;
-    u->encoding_overhead = 0;
-    u->next_encoding_overhead = 0;
-    u->encoding_ratio = 1.0;
-
-    u->rtpoll = pa_rtpoll_new();
-
-    if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
-        pa_log("pa_thread_mq_init() failed.");
-        goto fail;
-    }
-
-    u->rtpoll_item = NULL;
-
-    /*u->format =
-        (ss.format == PA_SAMPLE_U8 ? ESD_BITS8 : ESD_BITS16) |
-        (ss.channels == 2 ? ESD_STEREO : ESD_MONO);*/
-    u->rate = ss.rate;
-    u->block_size = pa_usec_to_bytes(PA_USEC_PER_SEC/20, &ss);
-
-    u->read_data = u->write_data = NULL;
-    u->read_index = u->write_index = u->read_length = u->write_length = 0;
-
-    /*u->state = STATE_AUTH;*/
-    u->latency = 0;
-
-    if (!(server = pa_modargs_get_value(ma, "server", NULL))) {
-        pa_log("No server argument given.");
-        goto fail;
-    }
-
-    pa_sink_new_data_init(&data);
-    data.driver = __FILE__;
-    data.module = m;
-    pa_sink_new_data_set_name(&data, pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME));
-    pa_sink_new_data_set_sample_spec(&data, &ss);
-    pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, server);
-    pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "music");
-    pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "RAOP sink '%s'", server);
-
-    if (pa_modargs_get_proplist(ma, "sink_properties", data.proplist, PA_UPDATE_REPLACE) < 0) {
-        pa_log("Invalid properties");
-        pa_sink_new_data_done(&data);
-        goto fail;
-    }
-
-    u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY|PA_SINK_NETWORK);
-    pa_sink_new_data_done(&data);
-
-    if (!u->sink) {
-        pa_log("Failed to create sink.");
-        goto fail;
-    }
-
-    u->sink->parent.process_msg = sink_process_msg;
-    u->sink->userdata = u;
-    pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
-    pa_sink_set_set_mute_callback(u->sink, sink_set_mute_cb);
-    u->sink->flags = PA_SINK_LATENCY|PA_SINK_NETWORK;
-
-    pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
-    pa_sink_set_rtpoll(u->sink, u->rtpoll);
-
-    if (!(u->raop = pa_raop_client_new(u->core, server))) {
-        pa_log("Failed to connect to server.");
-        goto fail;
-    }
-
-    pa_raop_client_set_callback(u->raop, on_connection, u);
-    pa_raop_client_set_closed_callback(u->raop, on_close, u);
-
-    if (!(u->thread = pa_thread_new("raop-sink", thread_func, u))) {
-        pa_log("Failed to create thread.");
-        goto fail;
-    }
-
-    pa_sink_put(u->sink);
 
     pa_modargs_free(ma);
 
     return 0;
 
 fail:
+
     if (ma)
         pa_modargs_free(ma);
 
@@ -637,57 +92,19 @@ fail:
 }
 
 int pa__get_n_used(pa_module *m) {
-    struct userdata *u;
+    pa_sink *sink;
 
     pa_assert(m);
-    pa_assert_se(u = m->userdata);
+    pa_assert_se(sink = m->userdata);
 
-    return pa_sink_linked_by(u->sink);
+    return pa_sink_linked_by(sink);
 }
 
-void pa__done(pa_module*m) {
-    struct userdata *u;
-    pa_assert(m);
-
-    if (!(u = m->userdata))
-        return;
-
-    if (u->sink)
-        pa_sink_unlink(u->sink);
-
-    if (u->thread) {
-        pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
-        pa_thread_free(u->thread);
-    }
-
-    pa_thread_mq_done(&u->thread_mq);
-
-    if (u->sink)
-        pa_sink_unref(u->sink);
-
-    if (u->rtpoll_item)
-        pa_rtpoll_item_free(u->rtpoll_item);
-
-    if (u->rtpoll)
-        pa_rtpoll_free(u->rtpoll);
-
-    if (u->raw_memchunk.memblock)
-        pa_memblock_unref(u->raw_memchunk.memblock);
-
-    if (u->encoded_memchunk.memblock)
-        pa_memblock_unref(u->encoded_memchunk.memblock);
-
-    if (u->raop)
-        pa_raop_client_free(u->raop);
-
-    pa_xfree(u->read_data);
-    pa_xfree(u->write_data);
-
-    if (u->smoother)
-        pa_smoother_free(u->smoother);
+void pa__done(pa_module *m) {
+    pa_sink *sink;
 
-    if (u->fd >= 0)
-        pa_close(u->fd);
+    pa_assert(m);
 
-    pa_xfree(u);
+    if ((sink = m->userdata))
+        pa_raop_sink_free(sink);
 }
diff --git a/src/modules/raop/raop-client.c b/src/modules/raop/raop-client.c
new file mode 100644
index 0000000..ae950f7
--- /dev/null
+++ b/src/modules/raop/raop-client.c
@@ -0,0 +1,1785 @@
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2008 Colin Guthrie
+  Copyright 2013 Hajime Fujita
+  Copyright 2013 Martin Blanchard
+
+  PulseAudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License,
+  or (at your option) any later version.
+
+  PulseAudio 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 Lesser General Public License
+  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <math.h>
+
+#ifdef HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif
+
+#include <pulse/xmalloc.h>
+#include <pulse/timeval.h>
+#include <pulse/sample.h>
+
+#include <pulsecore/core.h>
+#include <pulsecore/core-error.h>
+#include <pulsecore/core-rtclock.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/iochannel.h>
+#include <pulsecore/arpa-inet.h>
+#include <pulsecore/socket-client.h>
+#include <pulsecore/socket-util.h>
+#include <pulsecore/log.h>
+#include <pulsecore/parseaddr.h>
+#include <pulsecore/macro.h>
+#include <pulsecore/memchunk.h>
+#include <pulsecore/random.h>
+#include <pulsecore/poll.h>
+
+#include "raop-client.h"
+#include "raop-packet-buffer.h"
+#include "raop-crypto.h"
+#include "raop-util.h"
+
+#include "rtsp_client.h"
+
+#define DEFAULT_RAOP_PORT 5000
+
+#define FRAMES_PER_TCP_PACKET 4096
+#define FRAMES_PER_UDP_PACKET 352
+
+#define RTX_BUFFERING_SECONDS 4
+
+#define DEFAULT_TCP_AUDIO_PORT   6000
+#define DEFAULT_UDP_AUDIO_PORT   6000
+#define DEFAULT_UDP_CONTROL_PORT 6001
+#define DEFAULT_UDP_TIMING_PORT  6002
+
+#define DEFAULT_USER_AGENT "iTunes/11.0.4 (Windows; N)"
+#define DEFAULT_USER_NAME  "iTunes"
+
+#define JACK_STATUS_DISCONNECTED 0
+#define JACK_STATUS_CONNECTED    1
+#define JACK_TYPE_ANALOG         0
+#define JACK_TYPE_DIGITAL        1
+
+#define VOLUME_MAX  0.0
+#define VOLUME_DEF -30.0
+#define VOLUME_MIN -144.0
+
+#define UDP_DEFAULT_PKT_BUF_SIZE 1000
+#define APPLE_CHALLENGE_LENGTH 16
+
+struct pa_raop_client {
+    pa_core *core;
+    char *host;
+    uint16_t port;
+    pa_rtsp_client *rtsp;
+    char *sci, *sid;
+    char *password;
+
+    pa_raop_protocol_t protocol;
+    pa_raop_encryption_t encryption;
+    pa_raop_codec_t codec;
+
+    pa_raop_secret *secret;
+
+    int tcp_sfd;
+
+    int udp_sfd;
+    int udp_cfd;
+    int udp_tfd;
+
+    pa_raop_packet_buffer *pbuf;
+
+    uint16_t seq;
+    uint32_t rtptime;
+    bool is_recording;
+    uint32_t ssrc;
+
+    bool is_first_packet;
+    uint32_t sync_interval;
+    uint32_t sync_count;
+
+    uint8_t jack_type;
+    uint8_t jack_status;
+
+    pa_raop_client_state_cb_t state_callback;
+    void *state_userdata;
+};
+
+/* Audio TCP packet header [16x8] (cf. rfc4571):
+ *  [0,1]   Frame marker; seems always 0x2400
+ *  [2,3]   RTP packet size (following): 0x0000 (to be set)
+ *   [4,5]   RTP v2: 0x80
+ *   [5]     Payload type: 0x60 | Marker bit: 0x80 (always set)
+ *   [6,7]   Sequence number: 0x0000 (to be set)
+ *   [8,11]  Timestamp: 0x00000000 (to be set)
+ *   [12,15] SSRC: 0x00000000 (to be set) */
+#define PAYLOAD_TCP_AUDIO_DATA 0x60
+static const uint8_t tcp_audio_header[16] = {
+    0x24, 0x00, 0x00, 0x00,
+    0x80, 0xe0, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00
+};
+
+/* Audio UDP packet header [12x8] (cf. rfc3550):
+ *  [0]    RTP v2: 0x80
+ *  [1]    Payload type: 0x60
+ *  [2,3]  Sequence number: 0x0000 (to be set)
+ *  [4,7]  Timestamp: 0x00000000 (to be set)
+ *  [8,12] SSRC: 0x00000000 (to be set) */
+#define PAYLOAD_UDP_AUDIO_DATA 0x60
+static const uint8_t udp_audio_header[12] = {
+    0x80, 0x60, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00
+};
+
+/* Audio retransmission UDP packet header [4x8]:
+ *  [0] RTP v2: 0x80
+ *  [1] Payload type: 0x56 | Marker bit: 0x80 (always set)
+ *  [2] Unknown; seems always 0x01
+ *  [3] Unknown; seems some random number around 0x20~0x40 */
+#define PAYLOAD_RETRANSMIT_REQUEST 0x55
+#define PAYLOAD_RETRANSMIT_REPLY   0x56
+static const uint8_t udp_audio_retrans_header[4] = {
+    0x80, 0xd6, 0x00, 0x00
+};
+
+/* Sync packet header [8x8] (cf. rfc3550):
+ *  [0]   RTP v2: 0x80
+ *  [1]   Payload type: 0x54 | Marker bit: 0x80 (always set)
+ *  [2,3] Sequence number: 0x0007
+ *  [4,7] Timestamp: 0x00000000 (to be set) */
+static const uint8_t udp_sync_header[8] = {
+    0x80, 0xd4, 0x00, 0x07,
+    0x00, 0x00, 0x00, 0x00
+};
+
+/* Timing packet header [8x8] (cf. rfc3550):
+ *  [0]   RTP v2: 0x80
+ *  [1]   Payload type: 0x53 | Marker bit: 0x80 (always set)
+ *  [2,3] Sequence number: 0x0007
+ *  [4,7] Timestamp: 0x00000000 (unused) */
+#define PAYLOAD_TIMING_REQUEST  0x52
+#define PAYLOAD_TIMING_REPLY    0x53
+static const uint8_t udp_timing_header[8] = {
+    0x80, 0xd3, 0x00, 0x07,
+    0x00, 0x00, 0x00, 0x00
+};
+
+/**
+ * Function to trim a given character at the end of a string (no realloc).
+ * @param str Pointer to string
+ * @param rc Character to trim
+ */
+static inline void rtrim_char(char *str, char rc) {
+    char *sp = str + strlen(str) - 1;
+    while (sp >= str && *sp == rc) {
+        *sp = '\0';
+        sp -= 1;
+    }
+}
+
+/**
+ * Function to convert a timeval to ntp timestamp.
+ * @param tv Pointer to the timeval structure
+ * @return The NTP timestamp
+ */
+static inline uint64_t timeval_to_ntp(struct timeval *tv) {
+    uint64_t ntp = 0;
+
+    /* Converting micro seconds to a fraction. */
+    ntp = (uint64_t) tv->tv_usec * UINT32_MAX / PA_USEC_PER_SEC;
+    /* Moving reference from  1 Jan 1970 to 1 Jan 1900 (seconds). */
+    ntp |= (uint64_t) (tv->tv_sec + 0x83aa7e80) << 32;
+
+    return ntp;
+}
+
+/**
+ * Function to write bits into a buffer.
+ * @param buffer Handle to the buffer. It will be incremented if new data requires it.
+ * @param bit_pos A pointer to a position buffer to keep track the current write location (0 for MSB, 7 for LSB)
+ * @param size A pointer to the byte size currently written. This allows the calling function to do simple buffer overflow checks
+ * @param data The data to write
+ * @param data_bit_len The number of bits from data to write
+ */
+static inline void bit_writer(uint8_t **buffer, uint8_t *bit_pos, size_t *size, uint8_t data, uint8_t data_bit_len) {
+    int bits_left, bit_overflow;
+    uint8_t bit_data;
+
+    if (!data_bit_len)
+        return;
+
+    /* If bit pos is zero, we will definately use at least one bit from the current byte so size increments. */
+    if (!*bit_pos)
+        *size += 1;
+
+    /* Calc the number of bits left in the current byte of buffer. */
+    bits_left = 7 - *bit_pos  + 1;
+    /* Calc the overflow of bits in relation to how much space we have left... */
+    bit_overflow = bits_left - data_bit_len;
+    if (bit_overflow >= 0) {
+        /* We can fit the new data in our current byte.
+         * As we write from MSB->LSB we need to left shift by the overflow amount. */
+        bit_data = data << bit_overflow;
+        if (*bit_pos)
+            **buffer |= bit_data;
+        else
+            **buffer = bit_data;
+        /* If our data fits exactly into the current byte, we need to increment our pointer. */
+        if (0 == bit_overflow) {
+            /* Do not increment size as it will be incremented on next call as bit_pos is zero. */
+            *buffer += 1;
+            *bit_pos = 0;
+        } else {
+            *bit_pos += data_bit_len;
+        }
+    } else {
+        /* bit_overflow is negative, there for we will need a new byte from our buffer
+         * Firstly fill up what's left in the current byte. */
+        bit_data = data >> -bit_overflow;
+        **buffer |= bit_data;
+        /* Increment our buffer pointer and size counter. */
+        *buffer += 1;
+        *size += 1;
+        **buffer = data << (8 + bit_overflow);
+        *bit_pos = -bit_overflow;
+    }
+}
+
+static size_t write_ALAC_data(uint8_t *packet, const size_t max, uint8_t *raw, size_t *length, bool compress) {
+    uint32_t nbs = (*length / 2) / 2;
+    uint8_t *ibp, *maxibp;
+    uint8_t *bp, bpos;
+    size_t size = 0;
+
+    bp = packet;
+    pa_memzero(packet, max);
+    size = bpos = 0;
+
+    bit_writer(&bp, &bpos, &size, 1, 3); /* channel=1, stereo */
+    bit_writer(&bp, &bpos, &size, 0, 4); /* Unknown */
+    bit_writer(&bp, &bpos, &size, 0, 8); /* Unknown */
+    bit_writer(&bp, &bpos, &size, 0, 4); /* Unknown */
+    bit_writer(&bp, &bpos, &size, 1, 1); /* Hassize */
+    bit_writer(&bp, &bpos, &size, 0, 2); /* Unused */
+    bit_writer(&bp, &bpos, &size, 1, 1); /* Is-not-compressed */
+    /* Size of data, integer, big endian. */
+    bit_writer(&bp, &bpos, &size, (nbs >> 24) & 0xff, 8);
+    bit_writer(&bp, &bpos, &size, (nbs >> 16) & 0xff, 8);
+    bit_writer(&bp, &bpos, &size, (nbs >> 8)  & 0xff, 8);
+    bit_writer(&bp, &bpos, &size, (nbs)       & 0xff, 8);
+
+    ibp = raw;
+    maxibp = raw + (4 * nbs) - 4;
+    while (ibp <= maxibp) {
+        /* Byte swap stereo data. */
+        bit_writer(&bp, &bpos, &size, *(ibp + 1), 8);
+        bit_writer(&bp, &bpos, &size, *(ibp + 0), 8);
+        bit_writer(&bp, &bpos, &size, *(ibp + 3), 8);
+        bit_writer(&bp, &bpos, &size, *(ibp + 2), 8);
+        ibp += 4;
+    }
+
+    *length = (ibp - raw);
+    return size;
+}
+
+static size_t build_tcp_audio_packet(pa_raop_client *c, pa_memchunk *block, pa_memchunk *packet) {
+    const size_t head = sizeof(tcp_audio_header);
+    uint32_t *buffer = NULL;
+    uint8_t *raw = NULL;
+    size_t length, size;
+
+    raw = pa_memblock_acquire(block->memblock);
+    buffer = pa_memblock_acquire(packet->memblock);
+    buffer += packet->index / sizeof(uint32_t);
+    raw += block->index;
+
+    /* Wrap sequence number to 0 then UINT16_MAX is reached */
+    if (c->seq == UINT16_MAX)
+        c->seq = 0;
+    else
+        c->seq++;
+
+    memcpy(buffer, tcp_audio_header, sizeof(tcp_audio_header));
+    buffer[1] |= htonl((uint32_t) c->seq);
+    buffer[2] = htonl(c->rtptime);
+    buffer[3] = htonl(c->ssrc);
+
+    length = block->length;
+    size = sizeof(tcp_audio_header);
+    if (c->codec == PA_RAOP_CODEC_ALAC)
+        size += write_ALAC_data(((uint8_t *) buffer + head), packet->length - head, raw, &length, false);
+    else {
+        pa_log_debug("Only ALAC encoding is supported, sending zeros...");
+        pa_memzero(((uint8_t *) buffer + head), packet->length - head);
+        size += length;
+    }
+
+    c->rtptime += length / 4;
+
+    pa_memblock_release(block->memblock);
+
+    buffer[0] |= htonl((uint32_t) size - 4);
+    if (c->encryption == PA_RAOP_ENCRYPTION_RSA)
+        pa_raop_aes_encrypt(c->secret, (uint8_t *) buffer + head, size - head);
+
+    pa_memblock_release(packet->memblock);
+    packet->length = size;
+
+    return size;
+}
+
+static ssize_t send_tcp_audio_packet(pa_raop_client *c, pa_memchunk *block, size_t offset) {
+    static int write_type = 0;
+    const size_t max = sizeof(tcp_audio_header) + 8 + 16384;
+    pa_memchunk *packet = NULL;
+    uint8_t *buffer = NULL;
+    double progress = 0.0;
+    ssize_t written = -1;
+    size_t done = 0;
+
+    if (!(packet = pa_raop_packet_buffer_retrieve(c->pbuf, c->seq)))
+        return -1;
+
+    if (packet->length <= 0) {
+        pa_assert(block->index == offset);
+
+        if (!(packet = pa_raop_packet_buffer_prepare(c->pbuf, c->seq + 1, max)))
+            return -1;
+
+        packet->index = 0;
+        packet->length = max;
+        if (!build_tcp_audio_packet(c, block, packet))
+            return -1;
+    }
+
+    buffer = pa_memblock_acquire(packet->memblock);
+
+    pa_assert(buffer);
+
+    buffer += packet->index;
+    if (buffer && packet->length > 0)
+        written = pa_write(c->tcp_sfd, buffer, packet->length, &write_type);
+    if (written > 0) {
+        progress = (double) written / (double) packet->length;
+        packet->length -= written;
+        packet->index += written;
+
+        done = block->length * progress;
+        block->length -= done;
+        block->index += done;
+    }
+
+    pa_memblock_release(packet->memblock);
+
+    return written;
+}
+
+static size_t build_udp_audio_packet(pa_raop_client *c, pa_memchunk *block, pa_memchunk *packet) {
+    const size_t head = sizeof(udp_audio_header);
+    uint32_t *buffer = NULL;
+    uint8_t *raw = NULL;
+    size_t length, size;
+
+    raw = pa_memblock_acquire(block->memblock);
+    buffer = pa_memblock_acquire(packet->memblock);
+    buffer += packet->index / sizeof(uint32_t);
+    raw += block->index;
+
+    memcpy(buffer, udp_audio_header, sizeof(udp_audio_header));
+    if (c->is_first_packet)
+        buffer[0] |= htonl((uint32_t) 0x80 << 16);
+    buffer[0] |= htonl((uint32_t) c->seq);
+    buffer[1] = htonl(c->rtptime);
+    buffer[2] = htonl(c->ssrc);
+
+    length = block->length;
+    size = sizeof(udp_audio_header);
+    if (c->codec == PA_RAOP_CODEC_ALAC)
+        size += write_ALAC_data(((uint8_t *) buffer + head), packet->length - head, raw, &length, false);
+    else {
+        pa_log_debug("Only ALAC encoding is supported, sending zeros...");
+        pa_memzero(((uint8_t *) buffer + head), packet->length - head);
+        size += length;
+    }
+
+    c->rtptime += length / 4;
+
+    /* Wrap sequence number to 0 then UINT16_MAX is reached */
+    if (c->seq == UINT16_MAX)
+        c->seq = 0;
+    else
+        c->seq++;
+
+    pa_memblock_release(block->memblock);
+
+    if (c->encryption == PA_RAOP_ENCRYPTION_RSA)
+        pa_raop_aes_encrypt(c->secret, (uint8_t *) buffer + head, size - head);
+
+    pa_memblock_release(packet->memblock);
+    packet->length = size;
+
+    return size;
+}
+
+static ssize_t send_udp_audio_packet(pa_raop_client *c, pa_memchunk *block, size_t offset) {
+    const size_t max = sizeof(udp_audio_retrans_header) + sizeof(udp_audio_header) + 8 + 1408;
+    pa_memchunk *packet = NULL;
+    uint8_t *buffer = NULL;
+    ssize_t written = -1;
+
+    /* UDP packet has to be sent at once ! */
+    pa_assert(block->index == offset);
+
+    if (!(packet = pa_raop_packet_buffer_prepare(c->pbuf, c->seq, max)))
+        return -1;
+
+    packet->index = sizeof(udp_audio_retrans_header);
+    packet->length = max - sizeof(udp_audio_retrans_header);
+    if (!build_udp_audio_packet(c, block, packet))
+        return -1;
+
+    buffer = pa_memblock_acquire(packet->memblock);
+
+    pa_assert(buffer);
+
+    buffer += packet->index;
+    if (buffer && packet->length > 0)
+        written = pa_write(c->udp_sfd, buffer, packet->length, NULL);
+    if (written < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+        pa_log_debug("Discarding UDP (audio, seq=%d) packet due to EAGAIN (%s)", c->seq, pa_cstrerror(errno));
+        written = packet->length;
+    }
+
+    pa_memblock_release(packet->memblock);
+    /* It is meaningless to preseve the partial data */
+    block->index += block->length;
+    block->length = 0;
+
+    return written;
+}
+
+static size_t rebuild_udp_audio_packet(pa_raop_client *c, uint16_t seq, pa_memchunk *packet) {
+    size_t size = sizeof(udp_audio_retrans_header);
+    uint32_t *buffer = NULL;
+
+    buffer = pa_memblock_acquire(packet->memblock);
+
+    memcpy(buffer, udp_audio_retrans_header, sizeof(udp_audio_retrans_header));
+    buffer[0] |= htonl((uint32_t) seq);
+    size += packet->length;
+
+    pa_memblock_release(packet->memblock);
+    packet->length += sizeof(udp_audio_retrans_header);
+    packet->index -= sizeof(udp_audio_retrans_header);
+
+    return size;
+}
+
+static ssize_t resend_udp_audio_packets(pa_raop_client *c, uint16_t seq, uint16_t nbp) {
+    ssize_t total = 0;
+    int i = 0;
+
+    for (i = 0; i < nbp; i++) {
+        pa_memchunk *packet = NULL;
+        uint8_t *buffer = NULL;
+        ssize_t written = -1;
+
+        if (!(packet = pa_raop_packet_buffer_retrieve(c->pbuf, seq + i)))
+            continue;
+
+        if (packet->index > 0) {
+            if (!rebuild_udp_audio_packet(c, seq + i, packet))
+                continue;
+        }
+
+        pa_assert(packet->index == 0);
+
+        buffer = pa_memblock_acquire(packet->memblock);
+
+        pa_assert(buffer);
+
+        if (buffer && packet->length > 0)
+            written = pa_write(c->udp_cfd, buffer, packet->length, NULL);
+        if (written < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+            pa_log_debug("Discarding UDP (audio-restransmitted, seq=%d) packet due to EAGAIN", seq + i);
+            pa_memblock_release(packet->memblock);
+            continue;
+        }
+
+        pa_memblock_release(packet->memblock);
+        total +=  written;
+    }
+
+    return total;
+}
+
+/* Caller has to free the allocated memory region for packet */
+static size_t build_udp_sync_packet(pa_raop_client *c, uint32_t stamp, uint32_t **packet) {
+    const size_t size = sizeof(udp_sync_header) + 12;
+    const uint32_t delay = 88200;
+    uint32_t *buffer = NULL;
+    uint64_t transmitted = 0;
+    struct timeval tv;
+
+    *packet = NULL;
+    if (!(buffer = pa_xmalloc0(size)))
+        return 0;
+
+    memcpy(buffer, udp_sync_header, sizeof(udp_sync_header));
+    if (c->is_first_packet)
+        buffer[0] |= 0x10;
+    stamp -= delay;
+    buffer[1] = htonl(stamp);
+    /* Set the transmited timestamp to current time. */
+    transmitted = timeval_to_ntp(pa_rtclock_get(&tv));
+    buffer[2] = htonl(transmitted >> 32);
+    buffer[3] = htonl(transmitted & 0xffffffff);
+    stamp += delay;
+    buffer[4] = htonl(stamp);
+
+    *packet = buffer;
+    return size;
+}
+
+static ssize_t send_udp_sync_packet(pa_raop_client *c, uint32_t stamp) {
+    uint32_t * packet = NULL;
+    ssize_t written = 0;
+    size_t size = 0;
+
+    size = build_udp_sync_packet(c, stamp, &packet);
+    if (packet != NULL && size > 0) {
+        written = pa_loop_write(c->udp_cfd, packet, size, NULL);
+        pa_xfree(packet);
+    }
+
+    return written;
+}
+
+static size_t handle_udp_control_packet(pa_raop_client *c, const uint8_t packet[], ssize_t size) {
+    uint8_t payload = 0;
+    uint16_t seq, nbp = 0;
+    ssize_t written = 0;
+
+    /* Control packets are 8 bytes long:  */
+    if (size != 8 || packet[0] != 0x80)
+        return 1;
+
+    seq = ntohs((uint16_t) (packet[4] | packet[5] << 8));
+    nbp = ntohs((uint16_t) (packet[6] | packet[7] << 8));
+    if (nbp <= 0)
+        return 1;
+
+    /* The marker bit is always set (see rfc3550 for packet structure) ! */
+    payload = packet[1] ^ 0x80;
+    switch (payload) {
+        case PAYLOAD_RETRANSMIT_REQUEST:
+            pa_log_debug("Resending %u packets starting at %u", nbp, seq);
+            written = resend_udp_audio_packets(c, seq, nbp);
+            break;
+        case PAYLOAD_RETRANSMIT_REPLY:
+        default:
+            pa_log_debug("Got an unexpected payload type on control channel (%u) !", payload);
+            break;
+    }
+
+    return written;
+}
+
+/* Caller has to free the allocated memory region for packet */
+static size_t build_udp_timing_packet(pa_raop_client *c, const uint32_t data[6], uint64_t received, uint32_t **packet) {
+    const size_t size = sizeof(udp_timing_header) + 24;
+    uint32_t *buffer = NULL;
+    uint64_t transmitted = 0;
+    struct timeval tv;
+
+    *packet = NULL;
+    if (!(buffer = pa_xmalloc0(size)))
+        return 0;
+
+    memcpy(buffer, udp_timing_header, sizeof(udp_timing_header));
+    /* Copying originate timestamp from the incoming request packet. */
+    buffer[2] = data[4];
+    buffer[3] = data[5];
+    /* Set the receive timestamp to reception time. */
+    buffer[4] = htonl(received >> 32);
+    buffer[5] = htonl(received & 0xffffffff);
+    /* Set the transmit timestamp to current time. */
+    transmitted = timeval_to_ntp(pa_rtclock_get(&tv));
+    buffer[6] = htonl(transmitted >> 32);
+    buffer[7] = htonl(transmitted & 0xffffffff);
+
+    *packet = buffer;
+    return size;
+}
+
+static ssize_t send_udp_timing_packet(pa_raop_client *c, const uint32_t data[6], uint64_t received) {
+    uint32_t * packet = NULL;
+    ssize_t written = 0;
+    size_t size = 0;
+
+    size = build_udp_timing_packet(c, data, received, &packet);
+    if (packet != NULL && size > 0) {
+        written = pa_loop_write(c->udp_tfd, packet, size, NULL);
+        pa_xfree(packet);
+    }
+
+    return written;
+}
+
+static size_t handle_udp_timing_packet(pa_raop_client *c, const uint8_t packet[], ssize_t size) {
+    const uint32_t * data = NULL;
+    uint8_t payload = 0;
+    struct timeval tv;
+    size_t written = 0;
+    uint64_t rci = 0;
+
+    /* Timing packets are 32 bytes long: 1 x 8 RTP header (no ssrc) + 3 x 8 NTP timestamps */
+    if (size != 32 || packet[0] != 0x80)
+        return 0;
+
+    rci = timeval_to_ntp(pa_rtclock_get(&tv));
+    data = (uint32_t *) (packet + sizeof(udp_timing_header));
+
+    /* The marker bit is always set (see rfc3550 for packet structure) ! */
+    payload = packet[1] ^ 0x80;
+    switch (payload) {
+        case PAYLOAD_TIMING_REQUEST:
+            pa_log_debug("Sending timing packet at %lu", rci);
+            written = send_udp_timing_packet(c, data, rci);
+            break;
+        case PAYLOAD_TIMING_REPLY:
+        default:
+            pa_log_debug("Got an unexpected payload type on timing channel (%u) !", payload);
+            break;
+    }
+
+    return written;
+}
+
+static int connect_udp_socket(pa_raop_client *c, int fd, uint16_t port) {
+    struct sockaddr_in sa4;
+#ifdef HAVE_IPV6
+    struct sockaddr_in6 sa6;
+#endif
+    struct sockaddr *sa;
+    socklen_t salen;
+    sa_family_t af;
+
+    pa_zero(sa4);
+#ifdef HAVE_IPV6
+    pa_zero(sa6);
+#endif
+    if (inet_pton(AF_INET, c->host, &sa4.sin_addr) > 0) {
+        sa4.sin_family = af = AF_INET;
+        sa4.sin_port = htons(port);
+        sa = (struct sockaddr *) &sa4;
+        salen = sizeof(sa4);
+#ifdef HAVE_IPV6
+    } else if (inet_pton(AF_INET6, c->host, &sa6.sin6_addr) > 0) {
+        sa6.sin6_family = af = AF_INET6;
+        sa6.sin6_port = htons(port);
+        sa = (struct sockaddr *) &sa6;
+        salen = sizeof(sa6);
+#endif
+    } else {
+        pa_log("Invalid destination '%s'", c->host);
+        goto fail;
+    }
+
+    if (fd < 0 && (fd = pa_socket_cloexec(af, SOCK_DGRAM, 0)) < 0) {
+        pa_log("socket() failed: %s", pa_cstrerror(errno));
+        goto fail;
+    }
+
+    /* If the socket queue is full, let's drop packets */
+    pa_make_udp_socket_low_delay(fd);
+    pa_make_fd_nonblock(fd);
+
+    if (connect(fd, sa, salen) < 0) {
+        pa_log("connect() failed: %s", pa_cstrerror(errno));
+        goto fail;
+    }
+
+    pa_log_debug("Connected to %s on port %d (SOCK_DGRAM)", c->host, port);
+    return fd;
+
+fail:
+    if (fd >= 0)
+        pa_close(fd);
+
+    return -1;
+}
+
+static int open_bind_udp_socket(pa_raop_client *c, uint16_t *actual_port) {
+    int fd = -1;
+    uint16_t port;
+    struct sockaddr_in sa4;
+#ifdef HAVE_IPV6
+    struct sockaddr_in6 sa6;
+#endif
+    struct sockaddr *sa;
+    uint16_t *sa_port;
+    socklen_t salen;
+    sa_family_t af;
+    int one = 1;
+
+    pa_assert(actual_port);
+
+    port = *actual_port;
+
+    pa_zero(sa4);
+#ifdef HAVE_IPV6
+    pa_zero(sa6);
+#endif
+    if (inet_pton(AF_INET, pa_rtsp_localip(c->rtsp), &sa4.sin_addr) > 0) {
+        sa4.sin_family = af = AF_INET;
+        sa4.sin_port = htons(port);
+        sa4.sin_addr.s_addr = INADDR_ANY;
+        sa = (struct sockaddr *) &sa4;
+        salen = sizeof(sa4);
+        sa_port = &sa4.sin_port;
+#ifdef HAVE_IPV6
+    } else if (inet_pton(AF_INET6, pa_rtsp_localip(c->rtsp), &sa6.sin6_addr) > 0) {
+        sa6.sin6_family = af = AF_INET6;
+        sa6.sin6_port = htons(port);
+        sa6.sin6_addr = in6addr_any;
+        sa = (struct sockaddr *) &sa6;
+        salen = sizeof(sa6);
+        sa_port = &sa6.sin6_port;
+#endif
+    } else {
+        pa_log("Could not determine which address family to use");
+        goto fail;
+    }
+
+    if ((fd = pa_socket_cloexec(af, SOCK_DGRAM, 0)) < 0) {
+        pa_log("socket() failed: %s", pa_cstrerror(errno));
+        goto fail;
+    }
+
+#ifdef SO_TIMESTAMP
+    if (setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &one, sizeof(one)) < 0) {
+        pa_log("setsockopt(SO_TIMESTAMP) failed: %s", pa_cstrerror(errno));
+        goto fail;
+    }
+#else
+    pa_log("SO_TIMESTAMP unsupported on this platform");
+    goto fail;
+#endif
+
+    one = 1;
+    if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0) {
+        pa_log("setsockopt(SO_REUSEADDR) failed: %s", pa_cstrerror(errno));
+        goto fail;
+    }
+
+    do {
+        int ret;
+
+        *sa_port = htons(port);
+        ret = bind(fd, sa, salen);
+        if (!ret)
+            break;
+        if (ret < 0 && errno != EADDRINUSE) {
+            pa_log("bind() failed: %s", pa_cstrerror(errno));
+            goto fail;
+        }
+    } while (++port > 0);
+
+    if (!port) {
+        pa_log("Could not bind port");
+        goto fail;
+    }
+
+    pa_log_debug("Socket bound to port %d (SOCK_DGRAM)", port);
+    *actual_port = port;
+
+    return fd;
+
+fail:
+    if (fd >= 0)
+        pa_close(fd);
+
+    return -1;
+}
+
+static void tcp_connection_cb(pa_socket_client *sc, pa_iochannel *io, void *userdata) {
+    pa_raop_client *c = userdata;
+
+    pa_assert(sc);
+    pa_assert(c);
+
+    pa_socket_client_unref(sc);
+
+    if (!io) {
+        pa_log("Connection failed: %s", pa_cstrerror(errno));
+        return;
+    }
+
+    c->tcp_sfd = pa_iochannel_get_send_fd(io);
+    pa_iochannel_set_noclose(io, true);
+    pa_make_tcp_socket_low_delay(c->tcp_sfd);
+
+    pa_iochannel_free(io);
+
+    pa_log_debug("Connection established (TCP)");
+
+    if (c->state_callback)
+        c->state_callback(PA_RAOP_CONNECTED, c->state_userdata);
+}
+
+static void rtsp_stream_cb(pa_rtsp_client *rtsp, pa_rtsp_state_t state, pa_rtsp_status_t status, pa_headerlist *headers, void *userdata) {
+    pa_raop_client *c = userdata;
+
+    pa_assert(c);
+    pa_assert(rtsp);
+    pa_assert(rtsp == c->rtsp);
+
+    switch (state) {
+        case STATE_CONNECT: {
+            char *key, *iv, *sdp = NULL;
+            int frames = 0;
+            const char *ip;
+            char *url;
+            int ipv;
+
+            pa_log_debug("RAOP: CONNECTED");
+
+            ip = pa_rtsp_localip(c->rtsp);
+            if (pa_is_ip6_address(ip)) {
+                ipv = 6;
+                url = pa_sprintf_malloc("rtsp://[%s]/%s", ip, c->sid);
+            } else {
+                ipv = 4;
+                url = pa_sprintf_malloc("rtsp://%s/%s", ip, c->sid);
+            }
+            pa_rtsp_set_url(c->rtsp, url);
+
+            if (c->protocol == PA_RAOP_PROTOCOL_TCP)
+                frames = FRAMES_PER_TCP_PACKET;
+            else if (c->protocol == PA_RAOP_PROTOCOL_UDP)
+                frames = FRAMES_PER_UDP_PACKET;
+
+            switch(c->encryption) {
+                case PA_RAOP_ENCRYPTION_NONE: {
+                    sdp = pa_sprintf_malloc(
+                        "v=0\r\n"
+                        "o=iTunes %s 0 IN IP%d %s\r\n"
+                        "s=iTunes\r\n"
+                        "c=IN IP%d %s\r\n"
+                        "t=0 0\r\n"
+                        "m=audio 0 RTP/AVP 96\r\n"
+                        "a=rtpmap:96 AppleLossless\r\n"
+                        "a=fmtp:96 %d 0 16 40 10 14 2 255 0 0 44100\r\n",
+                        c->sid, ipv, ip, ipv, c->host, frames);
+
+                    break;
+                }
+
+                case PA_RAOP_ENCRYPTION_RSA:
+                case PA_RAOP_ENCRYPTION_FAIRPLAY:
+                case PA_RAOP_ENCRYPTION_MFISAP:
+                case PA_RAOP_ENCRYPTION_FAIRPLAY_SAP25: {
+                    key = pa_raop_secret_get_key(c->secret);
+                    iv = pa_raop_secret_get_iv(c->secret);
+
+                    sdp = pa_sprintf_malloc(
+                        "v=0\r\n"
+                        "o=iTunes %s 0 IN IP%d %s\r\n"
+                        "s=iTunes\r\n"
+                        "c=IN IP%d %s\r\n"
+                        "t=0 0\r\n"
+                        "m=audio 0 RTP/AVP 96\r\n"
+                        "a=rtpmap:96 AppleLossless\r\n"
+                        "a=fmtp:96 %d 0 16 40 10 14 2 255 0 0 44100\r\n"
+                        "a=rsaaeskey:%s\r\n"
+                        "a=aesiv:%s\r\n",
+                        c->sid, ipv, ip, ipv, c->host, frames, key, iv);
+
+                    pa_xfree(key);
+                    pa_xfree(iv);
+                    break;
+                }
+            }
+
+            pa_rtsp_announce(c->rtsp, sdp);
+
+            pa_xfree(sdp);
+            pa_xfree(url);
+            break;
+        }
+
+        case STATE_OPTIONS: {
+            pa_log_debug("RAOP: OPTIONS (stream cb)");
+
+            break;
+        }
+
+        case STATE_ANNOUNCE: {
+            uint16_t cport = DEFAULT_UDP_CONTROL_PORT;
+            uint16_t tport = DEFAULT_UDP_TIMING_PORT;
+            char *trs = NULL;
+
+            pa_log_debug("RAOP: ANNOUNCE");
+
+            if (c->protocol == PA_RAOP_PROTOCOL_TCP) {
+                trs = pa_sprintf_malloc(
+                    "RTP/AVP/TCP;unicast;interleaved=0-1;mode=record");
+            } else if (c->protocol == PA_RAOP_PROTOCOL_UDP) {
+                c->udp_cfd = open_bind_udp_socket(c, &cport);
+                c->udp_tfd  = open_bind_udp_socket(c, &tport);
+                if (c->udp_cfd < 0 || c->udp_tfd < 0)
+                    goto annonce_error;
+
+                trs = pa_sprintf_malloc(
+                    "RTP/AVP/UDP;unicast;interleaved=0-1;mode=record;"
+                    "control_port=%d;timing_port=%d",
+                    cport, tport);
+            }
+
+            pa_rtsp_setup(c->rtsp, trs);
+
+            pa_xfree(trs);
+            break;
+
+        annonce_error:
+            if (c->udp_cfd >= 0)
+                pa_close(c->udp_cfd);
+            c->udp_cfd = -1;
+            if (c->udp_tfd >= 0)
+                pa_close(c->udp_tfd);
+            c->udp_tfd = -1;
+
+            pa_rtsp_client_free(c->rtsp);
+
+            pa_log_error("Aborting RTSP announce, failed creating required sockets");
+
+            c->rtsp = NULL;
+            pa_xfree(trs);
+            break;
+        }
+
+        case STATE_SETUP: {
+            pa_socket_client *sc = NULL;
+            uint32_t sport = DEFAULT_UDP_AUDIO_PORT;
+            uint32_t cport =0, tport = 0;
+            char *ajs, *token, *pc, *trs;
+            const char *token_state = NULL;
+            char delimiters[] = ";";
+
+            pa_log_debug("RAOP: SETUP");
+
+            ajs = pa_xstrdup(pa_headerlist_gets(headers, "Audio-Jack-Status"));
+
+            if (ajs) {
+                c->jack_type = JACK_TYPE_ANALOG;
+                c->jack_status = JACK_STATUS_DISCONNECTED;
+
+                while ((token = pa_split(ajs, delimiters, &token_state))) {
+                    if ((pc = strstr(token, "="))) {
+                      *pc = 0;
+                      if (pa_streq(token, "type") && pa_streq(pc + 1, "digital"))
+                          c->jack_type = JACK_TYPE_DIGITAL;
+                    } else {
+                        if (pa_streq(token, "connected"))
+                            c->jack_status = JACK_STATUS_CONNECTED;
+                    }
+                    pa_xfree(token);
+                }
+
+            } else {
+                pa_log_warn("\"Audio-Jack-Status\" missing in RTSP setup response");
+            }
+
+            sport = pa_rtsp_serverport(c->rtsp);
+            if (sport <= 0)
+                goto setup_error;
+
+            token_state = NULL;
+            if (c->protocol == PA_RAOP_PROTOCOL_TCP) {
+                if (!(sc = pa_socket_client_new_string(c->core->mainloop, true, c->host, sport)))
+                    goto setup_error;
+
+                pa_socket_client_ref(sc);
+                pa_socket_client_set_callback(sc, tcp_connection_cb, c);
+
+                pa_socket_client_unref(sc);
+                sc = NULL;
+            } else if (c->protocol == PA_RAOP_PROTOCOL_UDP) {
+                trs = pa_xstrdup(pa_headerlist_gets(headers, "Transport"));
+
+                if (trs) {
+                    /* Now parse out the server port component of the response. */
+                    while ((token = pa_split(trs, delimiters, &token_state))) {
+                        if ((pc = strstr(token, "="))) {
+                            *pc = 0;
+                            if (pa_streq(token, "control_port")) {
+                                if (pa_atou(pc + 1, &cport) < 0)
+                                    goto setup_error_parse;
+                            }
+                            if (pa_streq(token, "timing_port")) {
+                                if (pa_atou(pc + 1, &tport) < 0)
+                                    goto setup_error_parse;
+                            }
+                            *pc = '=';
+                        }
+                        pa_xfree(token);
+                    }
+                    pa_xfree(trs);
+                } else {
+                    pa_log_warn("\"Transport\" missing in RTSP setup response");
+                }
+
+                if (cport <= 0 || tport <= 0)
+                    goto setup_error;
+
+                if ((c->udp_sfd = connect_udp_socket(c, -1, sport)) <= 0)
+                    goto setup_error;
+                if ((c->udp_cfd = connect_udp_socket(c, c->udp_cfd, cport)) <= 0)
+                    goto setup_error;
+                if ((c->udp_tfd = connect_udp_socket(c, c->udp_tfd, tport)) <= 0)
+                    goto setup_error;
+
+                pa_log_debug("Connection established (UDP;control_port=%d;timing_port=%d)", cport, tport);
+
+                if (c->state_callback)
+                    c->state_callback(PA_RAOP_CONNECTED, c->state_userdata);
+            }
+
+            pa_rtsp_record(c->rtsp, &c->seq, &c->rtptime);
+
+            pa_xfree(ajs);
+            break;
+
+        setup_error_parse:
+            pa_log("Failed parsing server port components");
+            pa_xfree(token);
+            pa_xfree(trs);
+            /* fall-thru */
+        setup_error:
+            if (c->tcp_sfd >= 0)
+                pa_close(c->tcp_sfd);
+            c->tcp_sfd = -1;
+
+            if (c->udp_sfd >= 0)
+                pa_close(c->udp_sfd);
+            c->udp_sfd = -1;
+
+            c->udp_cfd = c->udp_tfd = -1;
+
+            pa_rtsp_client_free(c->rtsp);
+
+            pa_log_error("aborting RTSP setup, failed creating required sockets");
+
+            if (c->state_callback)
+                c->state_callback(PA_RAOP_DISCONNECTED, c->state_userdata);
+
+            c->rtsp = NULL;
+            break;
+        }
+
+        case STATE_RECORD: {
+            int32_t latency = 0;
+            uint32_t ssrc;
+            char *alt;
+
+            pa_log_debug("RAOP: RECORD");
+
+            alt = pa_xstrdup(pa_headerlist_gets(headers, "Audio-Latency"));
+            if (alt) {
+                if (pa_atoi(alt, &latency) < 0)
+                    pa_log("Failed to parse audio latency");
+            }
+
+            pa_raop_packet_buffer_reset(c->pbuf, c->seq);
+
+            pa_random(&ssrc, sizeof(ssrc));
+            c->is_first_packet = true;
+            c->is_recording = true;
+            c->sync_count = 0;
+            c->ssrc = ssrc;
+
+            if (c->state_callback)
+                c->state_callback((int) PA_RAOP_RECORDING, c->state_userdata);
+
+            pa_xfree(alt);
+            break;
+        }
+
+        case STATE_SET_PARAMETER: {
+            pa_log_debug("RAOP: SET_PARAMETER");
+
+            break;
+        }
+
+        case STATE_FLUSH: {
+            pa_log_debug("RAOP: FLUSHED");
+
+            break;
+        }
+
+        case STATE_TEARDOWN: {
+            pa_log_debug("RAOP: TEARDOWN");
+
+            if (c->tcp_sfd >= 0)
+                pa_close(c->tcp_sfd);
+            c->tcp_sfd = -1;
+
+            if (c->udp_sfd >= 0)
+                pa_close(c->udp_sfd);
+            c->udp_sfd = -1;
+
+            /* Polling sockets will be closed by sink */
+            c->udp_cfd = c->udp_tfd = -1;
+            c->tcp_sfd = -1;
+
+            pa_rtsp_client_free(c->rtsp);
+            pa_xfree(c->sid);
+            c->rtsp = NULL;
+            c->sid = NULL;
+
+            if (c->state_callback)
+                c->state_callback(PA_RAOP_DISCONNECTED, c->state_userdata);
+
+            break;
+        }
+
+        case STATE_DISCONNECTED: {
+            pa_log_debug("RAOP: DISCONNECTED");
+
+            c->is_recording = false;
+
+            if (c->tcp_sfd >= 0)
+                pa_close(c->tcp_sfd);
+            c->tcp_sfd = -1;
+
+            if (c->udp_sfd >= 0)
+                pa_close(c->udp_sfd);
+            c->udp_sfd = -1;
+
+            /* Polling sockets will be closed by sink */
+            c->udp_cfd = c->udp_tfd = -1;
+            c->tcp_sfd = -1;
+
+            pa_log_error("RTSP control channel closed (disconnected)");
+
+            pa_rtsp_client_free(c->rtsp);
+            pa_xfree(c->sid);
+            c->rtsp = NULL;
+            c->sid = NULL;
+
+            if (c->state_callback)
+                c->state_callback((int) PA_RAOP_DISCONNECTED, c->state_userdata);
+
+            break;
+        }
+    }
+}
+
+static void rtsp_auth_cb(pa_rtsp_client *rtsp, pa_rtsp_state_t state, pa_rtsp_status_t status, pa_headerlist *headers, void *userdata) {
+    pa_raop_client *c = userdata;
+
+    pa_assert(c);
+    pa_assert(rtsp);
+    pa_assert(rtsp == c->rtsp);
+
+    switch (state) {
+        case STATE_CONNECT: {
+            char *sci = NULL, *sac = NULL;
+            uint8_t rac[APPLE_CHALLENGE_LENGTH];
+            struct {
+                uint32_t ci1;
+                uint32_t ci2;
+            } rci;
+
+            pa_random(&rci, sizeof(rci));
+            /* Generate a random Client-Instance number */
+            sci = pa_sprintf_malloc("%08x%08x",rci.ci1, rci.ci2);
+            pa_rtsp_add_header(c->rtsp, "Client-Instance", sci);
+
+            pa_random(rac, APPLE_CHALLENGE_LENGTH);
+            /* Generate a random Apple-Challenge key */
+            pa_raop_base64_encode(rac, APPLE_CHALLENGE_LENGTH, &sac);
+            rtrim_char(sac, '=');
+            pa_rtsp_add_header(c->rtsp, "Apple-Challenge", sac);
+
+            pa_rtsp_options(c->rtsp);
+
+            pa_xfree(sac);
+            pa_xfree(sci);
+            break;
+        }
+
+        case STATE_OPTIONS: {
+            static bool waiting = false;
+            const char *current = NULL;
+            char space[] = " ";
+            char *token, *ath = NULL;
+            char *publ, *wath, *mth = NULL, *val;
+            char *realm = NULL, *nonce = NULL, *response = NULL;
+            char comma[] = ",";
+
+            pa_log_debug("RAOP: OPTIONS (auth cb)");
+            /* We do not consider the Apple-Response */
+            pa_rtsp_remove_header(c->rtsp, "Apple-Challenge");
+
+            if (STATUS_UNAUTHORIZED == status) {
+                wath = pa_xstrdup(pa_headerlist_gets(headers, "WWW-Authenticate"));
+                if (true == waiting) {
+                    pa_xfree(wath);
+                    goto fail;
+                }
+
+                if (wath) {
+                    mth = pa_split(wath, space, &current);
+                    while ((token = pa_split(wath, comma, &current))) {
+                        if ((val = strstr(token, "="))) {
+                            if (NULL == realm && val > strstr(token, "realm"))
+                                realm = pa_xstrdup(val + 2);
+                            else if (NULL == nonce && val > strstr(token, "nonce"))
+                                nonce = pa_xstrdup(val + 2);
+                        }
+
+                        pa_xfree(token);
+                    }
+                }
+
+                if (pa_safe_streq(mth, "Basic") && realm) {
+                    rtrim_char(realm, '\"');
+
+                    pa_raop_basic_response(DEFAULT_USER_NAME, c->password, &response);
+                    ath = pa_sprintf_malloc("Basic %s",
+                        response);
+                } else if (pa_safe_streq(mth, "Digest") && realm && nonce) {
+                    rtrim_char(realm, '\"');
+                    rtrim_char(nonce, '\"');
+
+                    pa_raop_digest_response(DEFAULT_USER_NAME, realm, c->password, nonce, "*", &response);
+                    ath = pa_sprintf_malloc("Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"*\", response=\"%s\"",
+                        DEFAULT_USER_NAME, realm, nonce,
+                        response);
+                } else {
+                    pa_log_error("unsupported authentication method: %s", mth);
+                    pa_xfree(realm);
+                    pa_xfree(nonce);
+                    pa_xfree(wath);
+                    pa_xfree(mth);
+                    goto error;
+                }
+
+                pa_xfree(response);
+                pa_xfree(realm);
+                pa_xfree(nonce);
+                pa_xfree(wath);
+                pa_xfree(mth);
+
+                pa_rtsp_add_header(c->rtsp, "Authorization", ath);
+                pa_xfree(ath);
+
+                waiting = true;
+                pa_rtsp_options(c->rtsp);
+                break;
+            }
+
+            if (STATUS_OK == status) {
+                publ = pa_xstrdup(pa_headerlist_gets(headers, "Public"));
+                c->sci = pa_xstrdup(pa_rtsp_get_header(c->rtsp, "Client-Instance"));
+
+                if (c->password)
+                    pa_xfree(c->password);
+                pa_xfree(publ);
+                c->password = NULL;
+            }
+
+            if (c->state_callback)
+                c->state_callback((int) PA_RAOP_AUTHENTICATED, c->state_userdata);
+            pa_rtsp_client_free(c->rtsp);
+            c->rtsp = NULL;
+
+            waiting = false;
+            break;
+
+        fail:
+            if (c->state_callback)
+                c->state_callback((int) PA_RAOP_DISCONNECTED, c->state_userdata);
+            pa_rtsp_client_free(c->rtsp);
+            c->rtsp = NULL;
+
+            pa_log_error("aborting authentication, wrong password");
+
+            waiting = false;
+            break;
+
+        error:
+            if (c->state_callback)
+                c->state_callback((int) PA_RAOP_DISCONNECTED, c->state_userdata);
+            pa_rtsp_client_free(c->rtsp);
+            c->rtsp = NULL;
+
+            pa_log_error("aborting authentication, unexpected failure");
+
+            waiting = false;
+            break;
+        }
+
+        case STATE_ANNOUNCE:
+        case STATE_SETUP:
+        case STATE_RECORD:
+        case STATE_SET_PARAMETER:
+        case STATE_FLUSH:
+        case STATE_TEARDOWN:
+        case STATE_DISCONNECTED:
+        default: {
+            if (c->state_callback)
+                c->state_callback((int) PA_RAOP_DISCONNECTED, c->state_userdata);
+            pa_rtsp_client_free(c->rtsp);
+            c->rtsp = NULL;
+
+            if (c->sci)
+                pa_xfree(c->sci);
+            c->sci = NULL;
+
+            break;
+        }
+    }
+}
+
+pa_raop_client* pa_raop_client_new(pa_core *core, const char *host, pa_raop_protocol_t protocol,
+                                   pa_raop_encryption_t encryption, pa_raop_codec_t codec) {
+    pa_raop_client *c;
+
+    pa_parsed_address a;
+    pa_sample_spec ss;
+    size_t size = 2;
+
+    pa_assert(core);
+    pa_assert(host);
+
+    if (pa_parse_address(host, &a) < 0)
+        return NULL;
+
+    if (a.type == PA_PARSED_ADDRESS_UNIX) {
+        pa_xfree(a.path_or_host);
+        return NULL;
+    }
+
+    c = pa_xnew0(pa_raop_client, 1);
+    c->core = core;
+    c->host = a.path_or_host; /* Will eventually be freed on destruction of c */
+    if (a.port > 0)
+        c->port = a.port;
+    else
+        c->port = DEFAULT_RAOP_PORT;
+    c->rtsp = NULL;
+    c->sci = c->sid = NULL;
+    c->password = NULL;
+
+    c->protocol = protocol;
+    c->encryption = encryption;
+    c->codec = codec;
+
+    c->tcp_sfd = -1;
+
+    c->udp_sfd = -1;
+    c->udp_cfd = -1;
+    c->udp_tfd = -1;
+
+    c->secret = NULL;
+    if (c->encryption != PA_RAOP_ENCRYPTION_NONE)
+        c->secret = pa_raop_secret_new();
+
+    ss = core->default_sample_spec;
+    if (c->protocol == PA_RAOP_PROTOCOL_UDP)
+        size = RTX_BUFFERING_SECONDS * ss.rate / FRAMES_PER_UDP_PACKET;
+
+    c->is_recording = false;
+    c->is_first_packet = true;
+    /* Packet sync interval should be around 1s (UDP only) */
+    c->sync_interval = ss.rate / FRAMES_PER_UDP_PACKET;
+    c->sync_count = 0;
+
+    c->pbuf = pa_raop_packet_buffer_new(c->core->mempool, size);
+
+    return c;
+}
+
+void pa_raop_client_free(pa_raop_client *c) {
+    pa_assert(c);
+
+    pa_raop_packet_buffer_free(c->pbuf);
+
+    pa_xfree(c->sid);
+    pa_xfree(c->sci);
+    if (c->secret)
+        pa_raop_secret_free(c->secret);
+    pa_xfree(c->password);
+    c->sci = c->sid = NULL;
+    c->password = NULL;
+    c->secret = NULL;
+
+    if (c->rtsp)
+        pa_rtsp_client_free(c->rtsp);
+    c->rtsp = NULL;
+
+    pa_xfree(c->host);
+    pa_xfree(c);
+}
+
+int pa_raop_client_authenticate (pa_raop_client *c, const char *password) {
+    int rv = 0;
+
+    pa_assert(c);
+
+    if (c->rtsp || c->password) {
+        pa_log_debug("Authentication/Connection already in progress...");
+        return 0;
+    }
+
+    c->password = NULL;
+    if (password)
+        c->password = pa_xstrdup(password);
+    c->rtsp = pa_rtsp_client_new(c->core->mainloop, c->host, c->port, DEFAULT_USER_AGENT);
+
+    pa_assert(c->rtsp);
+
+    pa_rtsp_set_callback(c->rtsp, rtsp_auth_cb, c);
+    rv = pa_rtsp_connect(c->rtsp);
+    return rv;
+}
+
+bool pa_raop_client_is_authenticated(pa_raop_client *c) {
+    pa_assert(c);
+
+    return (c->sci != NULL);
+}
+
+int pa_raop_client_announce(pa_raop_client *c) {
+    uint32_t sid;
+    int rv = 0;
+
+    pa_assert(c);
+
+    if (c->rtsp) {
+        pa_log_debug("Connection already in progress...");
+        return 0;
+    } else if (!c->sci) {
+        pa_log_debug("ANNOUNCE requires a preliminary authentication");
+        return 1;
+    }
+
+    c->rtsp = pa_rtsp_client_new(c->core->mainloop, c->host, c->port, DEFAULT_USER_AGENT);
+
+    pa_assert(c->rtsp);
+
+    c->sync_count = 0;
+    c->is_recording = false;
+    c->is_first_packet = true;
+    pa_random(&sid, sizeof(sid));
+    c->sid = pa_sprintf_malloc("%u", sid);
+    pa_rtsp_set_callback(c->rtsp, rtsp_stream_cb, c);
+
+    rv = pa_rtsp_connect(c->rtsp);
+    return rv;
+}
+
+bool pa_raop_client_is_alive(pa_raop_client *c) {
+    pa_assert(c);
+
+    if (!c->rtsp || !c->sci) {
+        pa_log_debug("Not alive, connection not established yet...");
+        return false;
+    }
+
+    switch (c->protocol) {
+        case PA_RAOP_PROTOCOL_TCP:
+            if (c->tcp_sfd >= 0)
+                return true;
+            break;
+        case PA_RAOP_PROTOCOL_UDP:
+            if (c->udp_sfd >= 0)
+                return true;
+            break;
+        default:
+            break;
+    }
+
+    return false;
+}
+
+bool pa_raop_client_can_stream(pa_raop_client *c) {
+    pa_assert(c);
+
+    if (!c->rtsp || !c->sci) {
+        pa_log_debug("Can't stream, connection not established yet...");
+        return false;
+    }
+
+    switch (c->protocol) {
+        case PA_RAOP_PROTOCOL_TCP:
+            if (c->tcp_sfd >= 0 && c->is_recording)
+                return true;
+            break;
+        case PA_RAOP_PROTOCOL_UDP:
+            if (c->udp_sfd >= 0 && c->is_recording)
+                return true;
+            break;
+        default:
+            break;
+    }
+
+    return false;
+}
+
+int pa_raop_client_stream(pa_raop_client *c) {
+    int rv = 0;
+
+    pa_assert(c);
+
+    if (!c->rtsp || !c->sci) {
+        pa_log_debug("Streaming's impossible, connection not established yet...");
+        return 0;
+    }
+
+    switch (c->protocol) {
+        case PA_RAOP_PROTOCOL_TCP:
+            if (c->tcp_sfd >= 0 && !c->is_recording) {
+                c->is_recording = true;
+                c->is_first_packet = true;
+                c->sync_count = 0;
+            }
+            break;
+        case PA_RAOP_PROTOCOL_UDP:
+            if (c->udp_sfd >= 0 && !c->is_recording) {
+                c->is_recording = true;
+                c->is_first_packet = true;
+                c->sync_count = 0;
+            }
+            break;
+        default:
+            rv = 1;
+            break;
+    }
+
+    return rv;
+}
+
+int pa_raop_client_set_volume(pa_raop_client *c, pa_volume_t volume) {
+    char *param;
+    int rv = 0;
+    double db;
+
+    pa_assert(c);
+
+    if (!c->rtsp) {
+        pa_log_debug("Cannot SET_PARAMETER, connection not established yet...");
+        return 0;
+    } else if (!c->sci) {
+        pa_log_debug("SET_PARAMETER requires a preliminary authentication");
+        return 1;
+    }
+
+    db = pa_sw_volume_to_dB(volume);
+    if (db < VOLUME_MIN)
+        db = VOLUME_MIN;
+    else if (db > VOLUME_MAX)
+        db = VOLUME_MAX;
+
+    pa_log_debug("volume=%u db=%.6f", volume, db);
+
+    param = pa_sprintf_malloc("volume: %0.6f\r\n", db);
+    /* We just hit and hope, cannot wait for the callback. */
+    if (c->rtsp != NULL && pa_rtsp_exec_ready(c->rtsp))
+        rv = pa_rtsp_setparameter(c->rtsp, param);
+
+    pa_xfree(param);
+    return rv;
+}
+
+int pa_raop_client_flush(pa_raop_client *c) {
+    int rv = 0;
+
+    pa_assert(c);
+
+    if (!c->rtsp || !pa_rtsp_exec_ready(c->rtsp)) {
+        pa_log_debug("Cannot FLUSH, connection not established yet...)");
+        return 0;
+    } else if (!c->sci) {
+        pa_log_debug("FLUSH requires a preliminary authentication");
+        return 1;
+    }
+
+    c->is_recording = false;
+
+    rv = pa_rtsp_flush(c->rtsp, c->seq, c->rtptime);
+    return rv;
+}
+
+int pa_raop_client_teardown(pa_raop_client *c) {
+    int rv = 0;
+
+    pa_assert(c);
+
+    if (!c->rtsp) {
+        pa_log_debug("Cannot TEARDOWN, connection not established yet...");
+        return 0;
+    } else if (!c->sci) {
+        pa_log_debug("TEARDOWN requires a preliminary authentication");
+        return 1;
+    }
+
+    c->is_recording = false;
+
+    rv = pa_rtsp_teardown(c->rtsp);
+    return rv;
+}
+
+void pa_raop_client_get_frames_per_block(pa_raop_client *c, size_t *frames) {
+    pa_assert(c);
+    pa_assert(frames);
+
+    switch (c->protocol) {
+        case PA_RAOP_PROTOCOL_TCP:
+            *frames = FRAMES_PER_TCP_PACKET;
+            break;
+        case PA_RAOP_PROTOCOL_UDP:
+            *frames = FRAMES_PER_UDP_PACKET;
+            break;
+        default:
+            *frames = 0;
+            break;
+    }
+}
+
+bool pa_raop_client_register_pollfd(pa_raop_client *c, pa_rtpoll *poll, pa_rtpoll_item **poll_item) {
+    struct pollfd *pollfd = NULL;
+    pa_rtpoll_item *item = NULL;
+    bool oob = true;
+
+    pa_assert(c);
+    pa_assert(poll);
+    pa_assert(poll_item);
+
+    switch (c->protocol) {
+        case PA_RAOP_PROTOCOL_TCP:
+            item = pa_rtpoll_item_new(poll, PA_RTPOLL_NEVER, 1);
+            pollfd = pa_rtpoll_item_get_pollfd(item, NULL);
+            pollfd->fd = c->tcp_sfd;
+            pollfd->events = POLLOUT;
+            pollfd->revents = 0;
+            *poll_item = item;
+            oob = false;
+            break;
+        case PA_RAOP_PROTOCOL_UDP:
+            item = pa_rtpoll_item_new(poll, PA_RTPOLL_NEVER, 2);
+            pollfd = pa_rtpoll_item_get_pollfd(item, NULL);
+            pollfd->fd = c->udp_cfd;
+            pollfd->events = POLLIN | POLLPRI;
+            pollfd->revents = 0;
+            pollfd++;
+            pollfd->fd = c->udp_tfd;
+            pollfd->events = POLLIN | POLLPRI;
+            pollfd->revents = 0;
+            *poll_item = item;
+            oob = true;
+            break;
+        default:
+            *poll_item = NULL;
+            break;
+    }
+
+    return oob;
+}
+
+pa_volume_t pa_raop_client_adjust_volume(pa_raop_client *c, pa_volume_t volume) {
+    double minv, maxv;
+
+    pa_assert(c);
+
+    if (c->protocol != PA_RAOP_PROTOCOL_UDP)
+        return volume;
+
+    maxv = pa_sw_volume_from_dB(0.0);
+    minv = maxv * pow(10.0, VOLUME_DEF / 60.0);
+
+    /* Adjust volume so that it fits into VOLUME_DEF <= v <= 0 dB */
+    return volume - volume * (minv / maxv) + minv;
+}
+
+void pa_raop_client_handle_oob_packet(pa_raop_client *c, const int fd, const uint8_t packet[], ssize_t size) {
+    pa_assert(c);
+    pa_assert(fd >= 0);
+    pa_assert(packet);
+
+    if (c->protocol == PA_RAOP_PROTOCOL_UDP) {
+        if (fd == c->udp_cfd) {
+            pa_log_debug("Received UDP control packet...");
+            handle_udp_control_packet(c, packet, size);
+        } else if (fd == c->udp_tfd) {
+            pa_log_debug("Received UDP timing packet...");
+            handle_udp_timing_packet(c, packet, size);
+        }
+    }
+}
+
+ssize_t pa_raop_client_send_audio_packet(pa_raop_client *c, pa_memchunk *block, size_t offset) {
+    ssize_t written = 0;
+
+    pa_assert(c);
+    pa_assert(block);
+
+    /* Sync RTP & NTP timestamp if required (UDP). */
+    if (c->protocol == PA_RAOP_PROTOCOL_UDP) {
+        c->sync_count++;
+        if (c->is_first_packet || c->sync_count >= c->sync_interval) {
+            send_udp_sync_packet(c, c->rtptime);
+            c->sync_count = 0;
+        }
+    }
+
+    switch (c->protocol) {
+        case PA_RAOP_PROTOCOL_TCP:
+            written = send_tcp_audio_packet(c, block, offset);
+            break;
+        case PA_RAOP_PROTOCOL_UDP:
+            written = send_udp_audio_packet(c, block, offset);
+            break;
+        default:
+            written = -1;
+            break;
+    }
+
+    c->is_first_packet = false;
+    return written;
+}
+
+void pa_raop_client_set_state_callback(pa_raop_client *c, pa_raop_client_state_cb_t callback, void *userdata) {
+    pa_assert(c);
+
+    c->state_callback = callback;
+    c->state_userdata = userdata;
+}
diff --git a/src/modules/raop/raop-client.h b/src/modules/raop/raop-client.h
new file mode 100644
index 0000000..72e6018
--- /dev/null
+++ b/src/modules/raop/raop-client.h
@@ -0,0 +1,83 @@
+#ifndef fooraopclientfoo
+#define fooraopclientfoo
+
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2008 Colin Guthrie
+
+  PulseAudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License,
+  or (at your option) any later version.
+
+  PulseAudio 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 Lesser General Public License
+  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <pulse/volume.h>
+
+#include <pulsecore/core.h>
+#include <pulsecore/memchunk.h>
+#include <pulsecore/rtpoll.h>
+
+typedef enum pa_raop_protocol {
+    PA_RAOP_PROTOCOL_TCP,
+    PA_RAOP_PROTOCOL_UDP
+} pa_raop_protocol_t;
+
+typedef enum pa_raop_encryption {
+    PA_RAOP_ENCRYPTION_NONE,
+    PA_RAOP_ENCRYPTION_RSA,
+    PA_RAOP_ENCRYPTION_FAIRPLAY,
+    PA_RAOP_ENCRYPTION_MFISAP,
+    PA_RAOP_ENCRYPTION_FAIRPLAY_SAP25
+} pa_raop_encryption_t;
+
+typedef enum pa_raop_codec {
+    PA_RAOP_CODEC_PCM,
+    PA_RAOP_CODEC_ALAC,
+    PA_RAOP_CODEC_AAC,
+    PA_RAOP_CODEC_AAC_ELD
+} pa_raop_codec_t;
+
+typedef struct pa_raop_client pa_raop_client;
+
+typedef enum pa_raop_state {
+    PA_RAOP_INVALID_STATE,
+    PA_RAOP_AUTHENTICATED,
+    PA_RAOP_CONNECTED,
+    PA_RAOP_RECORDING,
+    PA_RAOP_DISCONNECTED
+} pa_raop_state_t;
+
+pa_raop_client* pa_raop_client_new(pa_core *core, const char *host, pa_raop_protocol_t protocol,
+                                   pa_raop_encryption_t encryption, pa_raop_codec_t codec);
+void pa_raop_client_free(pa_raop_client *c);
+
+int pa_raop_client_authenticate(pa_raop_client *c, const char *password);
+bool pa_raop_client_is_authenticated(pa_raop_client *c);
+
+int pa_raop_client_announce(pa_raop_client *c);
+bool pa_raop_client_is_alive(pa_raop_client *c);
+bool pa_raop_client_can_stream(pa_raop_client *c);
+int pa_raop_client_stream(pa_raop_client *c);
+int pa_raop_client_set_volume(pa_raop_client *c, pa_volume_t volume);
+int pa_raop_client_flush(pa_raop_client *c);
+int pa_raop_client_teardown(pa_raop_client *c);
+
+void pa_raop_client_get_frames_per_block(pa_raop_client *c, size_t *size);
+bool pa_raop_client_register_pollfd(pa_raop_client *c, pa_rtpoll *poll, pa_rtpoll_item **poll_item);
+pa_volume_t pa_raop_client_adjust_volume(pa_raop_client *c, pa_volume_t volume);
+void pa_raop_client_handle_oob_packet(pa_raop_client *c, const int fd, const uint8_t packet[], ssize_t size);
+ssize_t pa_raop_client_send_audio_packet(pa_raop_client *c, pa_memchunk *block, size_t offset);
+
+typedef void (*pa_raop_client_state_cb_t)(pa_raop_state_t state, void *userdata);
+void pa_raop_client_set_state_callback(pa_raop_client *c, pa_raop_client_state_cb_t callback, void *userdata);
+
+#endif
diff --git a/src/modules/raop/raop-crypto.c b/src/modules/raop/raop-crypto.c
new file mode 100644
index 0000000..0dd6463
--- /dev/null
+++ b/src/modules/raop/raop-crypto.c
@@ -0,0 +1,164 @@
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2013 Martin Blanchard
+
+  PulseAudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License,
+  or (at your option) any later version.
+
+  PulseAudio 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 Lesser General Public License
+  along with PulseAudio; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#include <openssl/err.h>
+#include <openssl/aes.h>
+#include <openssl/rsa.h>
+
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/macro.h>
+#include <pulsecore/random.h>
+
+#include "raop-crypto.h"
+#include "raop-util.h"
+
+#define AES_CHUNK_SIZE 16
+
+/* Openssl 1.1.0 broke compatibility. Before 1.1.0 we had to set RSA->n and
+ * RSA->e manually, but after 1.1.0 the RSA struct is opaque and we have to use
+ * RSA_set0_key(). RSA_set0_key() is a new function added in 1.1.0. We could
+ * depend on openssl 1.1.0, but it may take some time before distributions will
+ * be able to upgrade to the new openssl version. To insulate ourselves from
+ * such transition problems, let's implement RSA_set0_key() ourselves if it's
+ * not available. */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+static int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) {
+    r->n = n;
+    r->e = e;
+    return 1;
+}
+#endif
+
+struct pa_raop_secret {
+    uint8_t key[AES_CHUNK_SIZE]; /* Key for aes-cbc */
+    uint8_t iv[AES_CHUNK_SIZE];  /* Initialization vector for cbc */
+    AES_KEY aes;                 /* AES encryption */
+};
+
+static const char rsa_modulus[] =
+    "59dE8qLieItsH1WgjrcFRKj6eUWqi+bGLOX1HL3U3GhC/j0Qg90u3sG/1CUtwC"
+    "5vOYvfDmFI6oSFXi5ELabWJmT2dKHzBJKa3k9ok+8t9ucRqMd6DZHJ2YCCLlDR"
+    "KSKv6kDqnw4UwPdpOMXziC/AMj3Z/lUVX1G7WSHCAWKf1zNS1eLvqr+boEjXuB"
+    "OitnZ/bDzPHrTOZz0Dew0uowxf/+sG+NCK3eQJVxqcaJ/vEHKIVd2M+5qL71yJ"
+    "Q+87X6oV3eaYvt3zWZYD6z5vYTcrtij2VZ9Zmni/UAaHqn9JdsBWLUEpVviYnh"
+    "imNVvYFZeCXg/IdTQ+x4IRdiXNv5hEew==";
+
+static const char rsa_exponent[] =
+    "AQAB";
+
+static int rsa_encrypt(uint8_t *data, int len, uint8_t *str) {
+    uint8_t modules[256];
+    uint8_t exponent[8];
+    int size;
+    RSA *rsa;
+    BIGNUM *n_bn;
+    BIGNUM *e_bn;
+
+    pa_assert(data);
+    pa_assert(str);
+
+    rsa = RSA_new();
+    size = pa_raop_base64_decode(rsa_modulus, modules);
+    n_bn = BN_bin2bn(modules, size, NULL);
+    size = pa_raop_base64_decode(rsa_exponent, exponent);
+    e_bn = BN_bin2bn(exponent, size, NULL);
+    RSA_set0_key(rsa, n_bn, e_bn, NULL);
+
+    size = RSA_public_encrypt(len, data, str, rsa, RSA_PKCS1_OAEP_PADDING);
+
+    RSA_free(rsa);
+    return size;
+}
+
+pa_raop_secret* pa_raop_secret_new(void) {
+    pa_raop_secret *s = pa_xnew0(pa_raop_secret, 1);
+
+    pa_assert(s);
+
+    pa_random(s->key, sizeof(s->key));
+    AES_set_encrypt_key(s->key, 128, &s->aes);
+    pa_random(s->iv, sizeof(s->iv));
+
+    return s;
+}
+
+void pa_raop_secret_free(pa_raop_secret *s) {
+    pa_assert(s);
+
+    pa_xfree(s);
+}
+
+char* pa_raop_secret_get_iv(pa_raop_secret *s) {
+    char *base64_iv = NULL;
+
+    pa_assert(s);
+
+    pa_raop_base64_encode(s->iv, AES_CHUNK_SIZE, &base64_iv);
+
+    return base64_iv;
+}
+
+char* pa_raop_secret_get_key(pa_raop_secret *s) {
+    char *base64_key = NULL;
+    uint8_t rsa_key[512];
+    int size = 0;
+
+    pa_assert(s);
+
+    /* Encrypt our AES public key to send to the device */
+    size = rsa_encrypt(s->key, AES_CHUNK_SIZE, rsa_key);
+    pa_raop_base64_encode(rsa_key, size, &base64_key);
+
+    return base64_key;
+}
+
+int pa_raop_aes_encrypt(pa_raop_secret *s, uint8_t *data, int len) {
+    static uint8_t nv[AES_CHUNK_SIZE];
+    uint8_t *buffer;
+    int i = 0, j;
+
+    pa_assert(s);
+    pa_assert(data);
+
+    memcpy(nv, s->iv, AES_CHUNK_SIZE);
+
+    while (i + AES_CHUNK_SIZE <= len) {
+        buffer = data + i;
+        for (j = 0; j < AES_CHUNK_SIZE; ++j)
+            buffer[j] ^= nv[j];
+
+        AES_encrypt(buffer, buffer, &s->aes);
+
+        memcpy(nv, buffer, AES_CHUNK_SIZE);
+        i += AES_CHUNK_SIZE;
+    }
+
+    return i;
+}
diff --git a/src/modules/raop/base64.h b/src/modules/raop/raop-crypto.h
similarity index 54%
copy from src/modules/raop/base64.h
copy to src/modules/raop/raop-crypto.h
index 59160c9..65f7577 100644
--- a/src/modules/raop/base64.h
+++ b/src/modules/raop/raop-crypto.h
@@ -1,11 +1,10 @@
-#ifndef foobase64hfoo
-#define foobase64hfoo
+#ifndef fooraopcryptofoo
+#define fooraopcryptofoo
 
 /***
   This file is part of PulseAudio.
 
-  Copyright 2008 Colin Guthrie
-  Copyright Kungliga Tekniska högskolan
+  Copyright 2013 Martin Blanchard
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
@@ -18,15 +17,19 @@
   General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
+  along with PulseAudio; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
 ***/
 
-/*
-  This file was originally inspired by a file developed by
-  Kungliga Tekniska högskolan
-*/
+typedef struct pa_raop_secret pa_raop_secret;
 
-int pa_base64_encode(const void *data, int size, char **str);
-int pa_base64_decode(const char *str, void *data);
+pa_raop_secret* pa_raop_secret_new(void);
+void pa_raop_secret_free(pa_raop_secret *s);
+
+char* pa_raop_secret_get_iv(pa_raop_secret *s);
+char* pa_raop_secret_get_key(pa_raop_secret *s);
+
+int pa_raop_aes_encrypt(pa_raop_secret *s, uint8_t *data, int len);
 
 #endif
diff --git a/src/modules/raop/raop-packet-buffer.c b/src/modules/raop/raop-packet-buffer.c
new file mode 100644
index 0000000..72fd729
--- /dev/null
+++ b/src/modules/raop/raop-packet-buffer.c
@@ -0,0 +1,161 @@
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2013 Matthias Wabersich
+  Copyright 2013 Hajime Fujita
+
+  PulseAudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License,
+  or (at your option) any later version.
+
+  PulseAudio 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 Lesser General Public License
+  along with PulseAudio; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
+
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/core-error.h>
+#include <pulsecore/macro.h>
+
+#include "raop-packet-buffer.h"
+
+struct pa_raop_packet_buffer {
+    pa_memchunk *packets;
+    pa_mempool *mempool;
+
+    size_t size;
+    size_t count;
+
+    uint16_t seq;
+    size_t pos;
+};
+
+pa_raop_packet_buffer *pa_raop_packet_buffer_new(pa_mempool *mempool, const size_t size) {
+    pa_raop_packet_buffer *pb = pa_xnew0(pa_raop_packet_buffer, 1);
+
+    pa_assert(mempool);
+    pa_assert(size > 0);
+
+    pb->count = 0;
+    pb->size = size;
+    pb->mempool = mempool;
+    pb->packets = pa_xnew0(pa_memchunk, size);
+    pb->seq = pb->pos = 0;
+
+    return pb;
+}
+
+void pa_raop_packet_buffer_free(pa_raop_packet_buffer *pb) {
+    size_t i;
+
+    pa_assert(pb);
+
+    for (i = 0; pb->packets && i < pb->size; i++) {
+        if (pb->packets[i].memblock)
+            pa_memblock_unref(pb->packets[i].memblock);
+        pa_memchunk_reset(&pb->packets[i]);
+    }
+
+    pa_xfree(pb->packets);
+    pb->packets = NULL;
+    pa_xfree(pb);
+}
+
+void pa_raop_packet_buffer_reset(pa_raop_packet_buffer *pb, uint16_t seq) {
+    size_t i;
+
+    pa_assert(pb);
+    pa_assert(pb->packets);
+
+    pb->pos = 0;
+    pb->count = 0;
+    pb->seq = (!seq) ? UINT16_MAX : seq - 1;
+    for (i = 0; i < pb->size; i++) {
+        if (pb->packets[i].memblock)
+            pa_memblock_unref(pb->packets[i].memblock);
+        pa_memchunk_reset(&pb->packets[i]);
+    }
+}
+
+pa_memchunk *pa_raop_packet_buffer_prepare(pa_raop_packet_buffer *pb, uint16_t seq, const size_t size) {
+    pa_memchunk *packet = NULL;
+    size_t i;
+
+    pa_assert(pb);
+    pa_assert(pb->packets);
+
+    if (seq == 0) {
+        /* 0 means seq reached UINT16_MAX and has been wrapped... */
+        pa_assert(pb->seq == UINT16_MAX);
+        pb->seq = 0;
+    } else {
+        /* ...otherwise, seq MUST have be increased! */
+        pa_assert(seq == pb->seq + 1);
+        pb->seq++;
+    }
+
+    i = (pb->pos + 1) % pb->size;
+
+    if (pb->packets[i].memblock)
+        pa_memblock_unref(pb->packets[i].memblock);
+    pa_memchunk_reset(&pb->packets[i]);
+
+    pb->packets[i].memblock = pa_memblock_new(pb->mempool, size);
+    pb->packets[i].length = size;
+    pb->packets[i].index = 0;
+
+    packet = &pb->packets[i];
+
+    if (pb->count < pb->size)
+        pb->count++;
+    pb->pos = i;
+
+    return packet;
+}
+
+pa_memchunk *pa_raop_packet_buffer_retrieve(pa_raop_packet_buffer *pb, uint16_t seq) {
+    pa_memchunk *packet = NULL;
+    size_t delta, i;
+
+    pa_assert(pb);
+    pa_assert(pb->packets);
+
+    if (seq == pb->seq)
+        packet = &pb->packets[pb->pos];
+    else {
+        if (seq < pb->seq) {
+            /* Regular case: pb->seq did not wrapped since seq. */
+            delta = pb->seq - seq;
+        } else {
+            /* Tricky case: pb->seq wrapped since seq! */
+            delta = pb->seq + (UINT16_MAX - seq);
+        }
+
+        /* If the requested packet is too old, do nothing and return */
+        if (delta > pb->count)
+            return NULL;
+
+        i = (pb->size + pb->pos - delta) % pb->size;
+
+        if (delta < pb->size && pb->packets[i].memblock)
+            packet = &pb->packets[i];
+    }
+
+    return packet;
+}
diff --git a/src/modules/raop/raop-packet-buffer.h b/src/modules/raop/raop-packet-buffer.h
new file mode 100644
index 0000000..c410298
--- /dev/null
+++ b/src/modules/raop/raop-packet-buffer.h
@@ -0,0 +1,40 @@
+#ifndef fooraoppacketbufferfoo
+#define fooraoppacketbufferfoo
+
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2013 Matthias Wabersich
+  Copyright 2013 Hajime Fujita
+
+  PulseAudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License,
+  or (at your option) any later version.
+
+  PulseAudio 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 Lesser General Public License
+  along with PulseAudio; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#include <pulsecore/memblock.h>
+#include <pulsecore/memchunk.h>
+
+typedef struct pa_raop_packet_buffer pa_raop_packet_buffer;
+
+/* Allocates a new circular packet buffer, size: Maximum number of packets to store */
+pa_raop_packet_buffer *pa_raop_packet_buffer_new(pa_mempool *mempool, const size_t size);
+void pa_raop_packet_buffer_free(pa_raop_packet_buffer *pb);
+
+void pa_raop_packet_buffer_reset(pa_raop_packet_buffer *pb, uint16_t seq);
+
+pa_memchunk *pa_raop_packet_buffer_prepare(pa_raop_packet_buffer *pb, uint16_t seq, const size_t size);
+pa_memchunk *pa_raop_packet_buffer_retrieve(pa_raop_packet_buffer *pb, uint16_t seq);
+
+#endif
diff --git a/src/modules/raop/raop-sink.c b/src/modules/raop/raop-sink.c
new file mode 100644
index 0000000..e5d219e
--- /dev/null
+++ b/src/modules/raop/raop-sink.c
@@ -0,0 +1,675 @@
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2004-2006 Lennart Poettering
+  Copyright 2008 Colin Guthrie
+  Copyright 2013 Hajime Fujita
+  Copyright 2013 Martin Blanchard
+
+  PulseAudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License,
+  or (at your option) any later version.
+
+  PulseAudio 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 Lesser General Public License
+  along with PulseAudio; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <sys/ioctl.h>
+
+#ifdef HAVE_LINUX_SOCKIOS_H
+#include <linux/sockios.h>
+#endif
+
+#include <pulse/rtclock.h>
+#include <pulse/timeval.h>
+#include <pulse/volume.h>
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/core.h>
+#include <pulsecore/i18n.h>
+#include <pulsecore/module.h>
+#include <pulsecore/memchunk.h>
+#include <pulsecore/sink.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/core-error.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/log.h>
+#include <pulsecore/macro.h>
+#include <pulsecore/thread.h>
+#include <pulsecore/thread-mq.h>
+#include <pulsecore/poll.h>
+#include <pulsecore/rtpoll.h>
+#include <pulsecore/time-smoother.h>
+
+#include "raop-sink.h"
+#include "raop-client.h"
+
+struct userdata {
+    pa_core *core;
+    pa_module *module;
+    pa_sink *sink;
+
+    pa_thread *thread;
+    pa_thread_mq thread_mq;
+    pa_rtpoll *rtpoll;
+    pa_rtpoll_item *rtpoll_item;
+    bool oob;
+
+    pa_raop_client *raop;
+    pa_raop_protocol_t protocol;
+    pa_raop_encryption_t encryption;
+    pa_raop_codec_t codec;
+
+    size_t block_size;
+    pa_memchunk memchunk;
+
+    pa_usec_t delay;
+    pa_usec_t start;
+    pa_smoother *smoother;
+    uint64_t write_count;
+};
+
+enum {
+    PA_SINK_MESSAGE_SET_RAOP_STATE = PA_SINK_MESSAGE_MAX
+};
+
+static void userdata_free(struct userdata *u);
+
+static void sink_set_volume_cb(pa_sink *s);
+
+static void raop_state_cb(pa_raop_state_t state, void *userdata) {
+    struct userdata *u = userdata;
+
+    pa_assert(u);
+
+    pa_log_debug("State change recieved, informing IO thread...");
+
+    pa_asyncmsgq_post(u->thread_mq.inq, PA_MSGOBJECT(u->sink), PA_SINK_MESSAGE_SET_RAOP_STATE, PA_INT_TO_PTR(state), 0, NULL, NULL);
+}
+
+static int64_t sink_get_latency(const struct userdata *u) {
+    pa_usec_t now;
+    int64_t latency;
+
+    pa_assert(u);
+    pa_assert(u->smoother);
+
+    now = pa_rtclock_now();
+    now = pa_smoother_get(u->smoother, now);
+
+    latency = pa_bytes_to_usec(u->write_count, &u->sink->sample_spec) - (int64_t) now;
+
+    return latency;
+}
+
+static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
+    struct userdata *u = PA_SINK(o)->userdata;
+
+    pa_assert(u);
+    pa_assert(u->raop);
+
+    switch (code) {
+        case PA_SINK_MESSAGE_SET_STATE: {
+            switch ((pa_sink_state_t) PA_PTR_TO_UINT(data)) {
+                case PA_SINK_SUSPENDED: {
+                    pa_log_debug("RAOP: SUSPENDED");
+
+                    pa_assert(PA_SINK_IS_OPENED(u->sink->thread_info.state));
+
+                    pa_smoother_pause(u->smoother, pa_rtclock_now());
+                    /* Issue a TEARDOWN if we are still connected */
+                    if (pa_raop_client_is_alive(u->raop)) {
+                        pa_raop_client_teardown(u->raop);
+                    }
+
+                    break;
+                }
+
+                case PA_SINK_IDLE: {
+                    pa_log_debug("RAOP: IDLE");
+
+                    /* Issue a FLUSH if we're comming from running state */
+                    if (u->sink->thread_info.state == PA_SINK_RUNNING) {
+                        pa_rtpoll_set_timer_disabled(u->rtpoll);
+                        pa_raop_client_flush(u->raop);
+                    }
+
+                    break;
+                }
+
+                case PA_SINK_RUNNING: {
+                    pa_usec_t now;
+
+                    pa_log_debug("RAOP: RUNNING");
+
+                    now = pa_rtclock_now();
+                    pa_smoother_resume(u->smoother, now, true);
+
+                    if (!pa_raop_client_is_alive(u->raop)) {
+                        /* Connecting will trigger a RECORD and start steaming */
+                        pa_raop_client_announce(u->raop);
+                    } else if (!pa_raop_client_can_stream(u->raop)) {
+                        /* RECORD alredy sent, simply start streaming */
+                        pa_raop_client_stream(u->raop);
+                        pa_rtpoll_set_timer_absolute(u->rtpoll, now);
+                        u->write_count = 0;
+                        u->start = now;
+                    }
+
+                    break;
+                }
+
+                case PA_SINK_UNLINKED:
+                case PA_SINK_INIT:
+                case PA_SINK_INVALID_STATE:
+                    break;
+            }
+
+            break;
+        }
+
+        case PA_SINK_MESSAGE_GET_LATENCY: {
+            int64_t r = 0;
+
+            if (pa_raop_client_can_stream(u->raop))
+                r = sink_get_latency(u);
+
+            *((int64_t*) data) = r;
+
+            return 0;
+        }
+
+        case PA_SINK_MESSAGE_SET_RAOP_STATE: {
+            switch ((pa_raop_state_t) PA_PTR_TO_UINT(data)) {
+                case PA_RAOP_AUTHENTICATED: {
+                    if (!pa_raop_client_is_authenticated(u->raop)) {
+                        pa_module_unload_request(u->module, true);
+                    }
+
+                    return 0;
+                }
+
+                case PA_RAOP_CONNECTED: {
+                    pa_assert(!u->rtpoll_item);
+
+                    u->oob = pa_raop_client_register_pollfd(u->raop, u->rtpoll, &u->rtpoll_item);
+
+                    return 0;
+                }
+
+                case PA_RAOP_RECORDING: {
+                    pa_usec_t now;
+
+                    now = pa_rtclock_now();
+                    pa_rtpoll_set_timer_absolute(u->rtpoll, now);
+                    u->write_count = 0;
+                    u->start = now;
+
+                    if (u->sink->thread_info.state == PA_SINK_SUSPENDED) {
+                        /* Our stream has been suspended so we just flush it... */
+                        pa_rtpoll_set_timer_disabled(u->rtpoll);
+                        pa_raop_client_flush(u->raop);
+                    } else {
+                        /* Set the initial volume */
+                        sink_set_volume_cb(u->sink);
+                    }
+
+                    return 0;
+                }
+
+                case PA_RAOP_INVALID_STATE:
+                case PA_RAOP_DISCONNECTED: {
+                    unsigned int nbfds = 0;
+                    struct pollfd *pollfd;
+                    unsigned int i;
+
+                    if (u->rtpoll_item) {
+                        pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, &nbfds);
+                        if (pollfd) {
+                            for (i = 0; i < nbfds; i++) {
+                                if (pollfd->fd >= 0)
+                                   pa_close(pollfd->fd);
+                                pollfd++;
+                            }
+                        }
+                        pa_rtpoll_item_free(u->rtpoll_item);
+                        u->rtpoll_item = NULL;
+                    }
+
+                    if (u->sink->thread_info.state == PA_SINK_SUSPENDED)
+                        pa_rtpoll_set_timer_disabled(u->rtpoll);
+                    else if (u->sink->thread_info.state != PA_SINK_IDLE)
+                        pa_module_unload_request(u->module, true);
+
+                    return 0;
+                }
+            }
+
+            return 0;
+        }
+    }
+
+    return pa_sink_process_msg(o, code, data, offset, chunk);
+}
+
+static void sink_set_volume_cb(pa_sink *s) {
+    struct userdata *u = s->userdata;
+    pa_cvolume hw;
+    pa_volume_t v, v_orig;
+    char t[PA_CVOLUME_SNPRINT_VERBOSE_MAX];
+
+    pa_assert(u);
+
+    /* If we're muted we don't need to do anything. */
+    if (s->muted)
+        return;
+
+    /* Calculate the max volume of all channels.
+     * We'll use this as our (single) volume on the APEX device and emulate
+     * any variation in channel volumes in software. */
+    v = pa_cvolume_max(&s->real_volume);
+
+    v_orig = v;
+    v = pa_raop_client_adjust_volume(u->raop, v_orig);
+
+    pa_log_debug("Volume adjusted: orig=%u adjusted=%u", v_orig, v);
+
+    /* Create a pa_cvolume version of our single value. */
+    pa_cvolume_set(&hw, s->sample_spec.channels, v);
+
+    /* Perform any software manipulation of the volume needed. */
+    pa_sw_cvolume_divide(&s->soft_volume, &s->real_volume, &hw);
+
+    pa_log_debug("Requested volume: %s", pa_cvolume_snprint_verbose(t, sizeof(t), &s->real_volume, &s->channel_map, false));
+    pa_log_debug("Got hardware volume: %s", pa_cvolume_snprint_verbose(t, sizeof(t), &hw, &s->channel_map, false));
+    pa_log_debug("Calculated software volume: %s",
+                 pa_cvolume_snprint_verbose(t, sizeof(t), &s->soft_volume, &s->channel_map, true));
+
+    /* Any necessary software volume manipulation is done so set
+     * our hw volume (or v as a single value) on the device. */
+    pa_raop_client_set_volume(u->raop, v);
+}
+
+static void sink_set_mute_cb(pa_sink *s) {
+    struct userdata *u = s->userdata;
+
+    pa_assert(u);
+    pa_assert(u->raop);
+
+    if (s->muted) {
+        pa_raop_client_set_volume(u->raop, PA_VOLUME_MUTED);
+    } else {
+        sink_set_volume_cb(s);
+    }
+}
+
+static void thread_func(void *userdata) {
+    struct userdata *u = userdata;
+    size_t offset = 0;
+
+    pa_assert(u);
+
+    pa_log_debug("Thread starting up");
+
+    pa_thread_mq_install(&u->thread_mq);
+    pa_smoother_set_time_offset(u->smoother, pa_rtclock_now());
+
+    for (;;) {
+        struct pollfd *pollfd = NULL;
+        unsigned int i, nbfds = 0;
+        pa_usec_t now, estimated, intvl;
+        uint64_t position;
+        size_t index;
+        int ret;
+
+        if (PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
+            if (u->sink->thread_info.rewind_requested)
+                pa_sink_process_rewind(u->sink, 0);
+        }
+
+        /* Polling (audio data + control socket + timing socket). */
+        if ((ret = pa_rtpoll_run(u->rtpoll)) < 0)
+            goto fail;
+        else if (ret == 0)
+            goto finish;
+
+        if (u->rtpoll_item) {
+            pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, &nbfds);
+            /* If !oob: streaming driven by pollds (POLLOUT) */
+            if (pollfd && !u->oob && !pollfd->revents) {
+                for (i = 0; i < nbfds; i++) {
+                    pollfd->events = POLLOUT;
+                    pollfd->revents = 0;
+
+                    pollfd++;
+                }
+
+                continue;
+            }
+
+            /* if oob: streaming managed by timing, pollfd for oob sockets */
+            if (pollfd && u->oob && !pa_rtpoll_timer_elapsed(u->rtpoll)) {
+                uint8_t packet[32];
+                ssize_t read;
+
+                for (i = 0; i < nbfds; i++) {
+                    if (pollfd->revents & pollfd->events) {
+                        pollfd->revents = 0;
+                        read = pa_read(pollfd->fd, packet, sizeof(packet), NULL);
+                        pa_raop_client_handle_oob_packet(u->raop, pollfd->fd, packet, read);
+                    }
+
+                    pollfd++;
+                }
+
+                continue;
+            }
+        }
+
+        if (u->sink->thread_info.state != PA_SINK_RUNNING)
+            continue;
+        if (!pa_raop_client_can_stream(u->raop))
+            continue;
+
+        if (u->memchunk.length <= 0) {
+            if (u->memchunk.memblock)
+                pa_memblock_unref(u->memchunk.memblock);
+            pa_memchunk_reset(&u->memchunk);
+
+            /* Grab unencoded audio data from PulseAudio */
+            pa_sink_render_full(u->sink, u->block_size, &u->memchunk);
+            offset = u->memchunk.index;
+        }
+
+        pa_assert(u->memchunk.length > 0);
+
+        index = u->memchunk.index;
+        if (pa_raop_client_send_audio_packet(u->raop, &u->memchunk, offset) < 0) {
+            if (errno == EINTR) {
+                /* Just try again. */
+                pa_log_debug("Failed to write data to FIFO (EINTR), retrying");
+                goto fail;
+            } else if (errno != EAGAIN) {
+                /* Buffer is full, wait for POLLOUT. */
+                pollfd->events = POLLOUT;
+                pollfd->revents = 0;
+            } else {
+                pa_log("Failed to write data to FIFO: %s", pa_cstrerror(errno));
+                goto fail;
+            }
+        } else {
+            u->write_count += (uint64_t) u->memchunk.index - (uint64_t) index;
+            position = u->write_count - pa_usec_to_bytes(u->delay, &u->sink->sample_spec);
+
+            now = pa_rtclock_now();
+            estimated = pa_bytes_to_usec(position, &u->sink->sample_spec);
+            pa_smoother_put(u->smoother, now, estimated);
+
+            if (u->oob && !pollfd->revents) {
+                /* Sleep until next packet transmission */
+                intvl = u->start + pa_bytes_to_usec(u->write_count, &u->sink->sample_spec);
+                pa_rtpoll_set_timer_absolute(u->rtpoll, intvl);
+            } else if (!u->oob) {
+                if (u->memchunk.length > 0) {
+                    pollfd->events = POLLOUT;
+                    pollfd->revents = 0;
+                } else {
+                    intvl = u->start + pa_bytes_to_usec(u->write_count, &u->sink->sample_spec);
+                    pa_rtpoll_set_timer_absolute(u->rtpoll, intvl);
+                    pollfd->revents = 0;
+                    pollfd->events = 0;
+                }
+            }
+        }
+    }
+
+fail:
+    /* If this was no regular exit from the loop we have to continue
+     * processing messages until we received PA_MESSAGE_SHUTDOWN */
+    pa_asyncmsgq_post(u->thread_mq.outq, PA_MSGOBJECT(u->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
+    pa_asyncmsgq_wait_for(u->thread_mq.inq, PA_MESSAGE_SHUTDOWN);
+
+finish:
+    pa_log_debug("Thread shutting down");
+}
+
+pa_sink* pa_raop_sink_new(pa_module *m, pa_modargs *ma, const char *driver) {
+    struct userdata *u = NULL;
+    pa_sample_spec ss;
+    char *thread_name = NULL;
+    const char *server, *protocol, *encryption, *codec;
+    const char /* *username, */ *password;
+    pa_sink_new_data data;
+    const char *name = NULL;
+
+    pa_assert(m);
+    pa_assert(ma);
+
+    ss = m->core->default_sample_spec;
+    if (pa_modargs_get_sample_spec(ma, &ss) < 0) {
+        pa_log("Failed to parse sample specification");
+        goto fail;
+    }
+
+    if (!(server = pa_modargs_get_value(ma, "server", NULL))) {
+        pa_log("Failed to parse server argument");
+        goto fail;
+    }
+
+    if (!(protocol = pa_modargs_get_value(ma, "protocol", NULL))) {
+        pa_log("Failed to parse protocol argument");
+        goto fail;
+    }
+
+    u = pa_xnew0(struct userdata, 1);
+    u->core = m->core;
+    u->module = m;
+    u->thread = NULL;
+    u->rtpoll = pa_rtpoll_new();
+    u->rtpoll_item = NULL;
+
+    if (pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll) < 0) {
+        pa_log("pa_thread_mq_init() failed.");
+        goto fail;
+    }
+
+    u->oob = true;
+
+    u->block_size = 0;
+    pa_memchunk_reset(&u->memchunk);
+
+    u->delay = 0;
+    u->smoother = pa_smoother_new(
+            PA_USEC_PER_SEC,
+            PA_USEC_PER_SEC*2,
+            true,
+            true,
+            10,
+            0,
+            false);
+    u->write_count = 0;
+
+    if (pa_streq(protocol, "TCP")) {
+        u->protocol = PA_RAOP_PROTOCOL_TCP;
+    } else if (pa_streq(protocol, "UDP")) {
+        u->protocol = PA_RAOP_PROTOCOL_UDP;
+    } else {
+        pa_log("Unsupported transport protocol argument: %s", protocol);
+        goto fail;
+    }
+
+    encryption = pa_modargs_get_value(ma, "encryption", NULL);
+    codec = pa_modargs_get_value(ma, "codec", NULL);
+
+    if (!encryption) {
+        u->encryption = PA_RAOP_ENCRYPTION_NONE;
+    } else if (pa_streq(encryption, "none")) {
+        u->encryption = PA_RAOP_ENCRYPTION_NONE;
+    } else if (pa_streq(encryption, "RSA")) {
+        u->encryption = PA_RAOP_ENCRYPTION_RSA;
+    } else {
+        pa_log("Unsupported encryption type argument: %s", encryption);
+        goto fail;
+    }
+
+    if (!codec) {
+        u->codec = PA_RAOP_CODEC_PCM;
+    } else if (pa_streq(codec, "PCM")) {
+        u->codec = PA_RAOP_CODEC_PCM;
+    } else if (pa_streq(codec, "ALAC")) {
+        u->codec = PA_RAOP_CODEC_ALAC;
+    } else {
+        pa_log("Unsupported audio codec argument: %s", codec);
+        goto fail;
+    }
+
+    pa_sink_new_data_init(&data);
+    data.driver = driver;
+    data.module = m;
+
+    if ((name = pa_modargs_get_value(ma, "sink_name", NULL))) {
+        pa_sink_new_data_set_name(&data, name);
+    } else {
+        char *nick;
+
+        if ((name = pa_modargs_get_value(ma, "name", NULL)))
+            nick = pa_sprintf_malloc("raop_client.%s", name);
+        else
+            nick = pa_sprintf_malloc("raop_client.%s", server);
+        pa_sink_new_data_set_name(&data, nick);
+        pa_xfree(nick);
+    }
+
+    pa_sink_new_data_set_sample_spec(&data, &ss);
+
+    pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, server);
+    pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "music");
+    pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "RAOP sink '%s'", server);
+
+    if (pa_modargs_get_proplist(ma, "sink_properties", data.proplist, PA_UPDATE_REPLACE) < 0) {
+        pa_log("Invalid properties");
+        pa_sink_new_data_done(&data);
+        goto fail;
+    }
+
+    u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY | PA_SINK_NETWORK);
+    pa_sink_new_data_done(&data);
+
+    if (!(u->sink)) {
+        pa_log("Failed to create sink object");
+        goto fail;
+    }
+
+    u->sink->parent.process_msg = sink_process_msg;
+    pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb);
+    pa_sink_set_set_mute_callback(u->sink, sink_set_mute_cb);
+    u->sink->userdata = u;
+
+    pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
+    pa_sink_set_rtpoll(u->sink, u->rtpoll);
+
+    u->raop = pa_raop_client_new(u->core, server, u->protocol, u->encryption, u->codec);
+
+    if (!(u->raop)) {
+        pa_log("Failed to create RAOP client object");
+        goto fail;
+    }
+
+    /* The number of frames per blocks is not negotiable... */
+    pa_raop_client_get_frames_per_block(u->raop, &u->block_size);
+    u->block_size *= pa_frame_size(&ss);
+    pa_sink_set_max_request(u->sink, u->block_size);
+
+    pa_raop_client_set_state_callback(u->raop, raop_state_cb, u);
+
+    thread_name = pa_sprintf_malloc("raop-sink-%s", server);
+    if (!(u->thread = pa_thread_new(thread_name, thread_func, u))) {
+        pa_log("Failed to create sink thread");
+        goto fail;
+    }
+    pa_xfree(thread_name);
+    thread_name = NULL;
+
+    pa_sink_put(u->sink);
+
+    /* username = pa_modargs_get_value(ma, "username", NULL); */
+    password = pa_modargs_get_value(ma, "password", NULL);
+    pa_raop_client_authenticate(u->raop, password );
+
+    return u->sink;
+
+fail:
+    pa_xfree(thread_name);
+
+    if (u)
+        userdata_free(u);
+
+    return NULL;
+}
+
+static void userdata_free(struct userdata *u) {
+    pa_assert(u);
+
+    if (u->sink)
+        pa_sink_unlink(u->sink);
+
+    if (u->thread) {
+        pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
+        pa_thread_free(u->thread);
+    }
+
+    pa_thread_mq_done(&u->thread_mq);
+
+    if (u->sink)
+        pa_sink_unref(u->sink);
+    u->sink = NULL;
+
+    if (u->rtpoll_item)
+        pa_rtpoll_item_free(u->rtpoll_item);
+    if (u->rtpoll)
+        pa_rtpoll_free(u->rtpoll);
+    u->rtpoll_item = NULL;
+    u->rtpoll = NULL;
+
+    if (u->memchunk.memblock)
+        pa_memblock_unref(u->memchunk.memblock);
+
+    if (u->raop)
+        pa_raop_client_free(u->raop);
+    u->raop = NULL;
+
+    if (u->smoother)
+        pa_smoother_free(u->smoother);
+    u->smoother = NULL;
+
+    pa_xfree(u);
+}
+
+void pa_raop_sink_free(pa_sink *s) {
+    struct userdata *u;
+
+    pa_sink_assert_ref(s);
+    pa_assert_se(u = s->userdata);
+
+    userdata_free(u);
+}
diff --git a/src/modules/raop/base64.h b/src/modules/raop/raop-sink.h
similarity index 59%
copy from src/modules/raop/base64.h
copy to src/modules/raop/raop-sink.h
index 59160c9..dfa2f0c 100644
--- a/src/modules/raop/base64.h
+++ b/src/modules/raop/raop-sink.h
@@ -1,11 +1,10 @@
-#ifndef foobase64hfoo
-#define foobase64hfoo
+#ifndef fooraopsinkfoo
+#define fooraopsinkfoo
 
 /***
   This file is part of PulseAudio.
 
-  Copyright 2008 Colin Guthrie
-  Copyright Kungliga Tekniska högskolan
+  Copyright 2013 Martin Blanchard
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
@@ -18,15 +17,17 @@
   General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public License
-  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
+  along with PulseAudio; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
 ***/
 
-/*
-  This file was originally inspired by a file developed by
-  Kungliga Tekniska högskolan
-*/
+#include <pulsecore/module.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/sink.h>
 
-int pa_base64_encode(const void *data, int size, char **str);
-int pa_base64_decode(const char *str, void *data);
+pa_sink* pa_raop_sink_new(pa_module *m, pa_modargs *ma, const char *driver);
+
+void pa_raop_sink_free(pa_sink *s);
 
 #endif
diff --git a/src/modules/raop/raop-util.c b/src/modules/raop/raop-util.c
new file mode 100644
index 0000000..febc204
--- /dev/null
+++ b/src/modules/raop/raop-util.c
@@ -0,0 +1,211 @@
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2008 Colin Guthrie
+  Copyright Kungliga Tekniska högskolan
+  Copyright 2013 Martin Blanchard
+
+  PulseAudio is free software; you can redistribute it and/or modify
+  it under the terms of the GNU Lesser General Public License as published
+  by the Free Software Foundation; either version 2.1 of the License,
+  or (at your option) any later version.
+
+  PulseAudio 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 Lesser General Public License
+  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
+***/
+
+/***
+  The base64 implementation was originally inspired by a file developed
+  by Kungliga Tekniska högskolan.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <openssl/err.h>
+#include <openssl/md5.h>
+
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/core-util.h>
+#include <pulsecore/macro.h>
+
+#include "raop-util.h"
+
+#ifndef MD5_DIGEST_LENGTH
+#define MD5_DIGEST_LENGTH 16
+#endif
+
+#define MD5_HASH_LENGTH (2*MD5_DIGEST_LENGTH)
+
+#define BASE64_DECODE_ERROR 0xffffffff
+
+static const char base64_chars[] =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+static int char_position(char c) {
+    if (c >= 'A' && c <= 'Z')
+        return c - 'A' + 0;
+    if (c >= 'a' && c <= 'z')
+        return c - 'a' + 26;
+    if (c >= '0' && c <= '9')
+        return c - '0' + 52;
+    if (c == '+')
+        return 62;
+    if (c == '/')
+        return 63;
+
+    return -1;
+}
+
+static unsigned int token_decode(const char *token) {
+    unsigned int val = 0;
+    int marker = 0;
+    int i;
+
+    if (strlen(token) < 4)
+        return BASE64_DECODE_ERROR;
+    for (i = 0; i < 4; i++) {
+        val *= 64;
+        if (token[i] == '=')
+            marker++;
+        else if (marker > 0)
+            return BASE64_DECODE_ERROR;
+        else {
+            int lpos = char_position(token[i]);
+            if (lpos < 0)
+                return BASE64_DECODE_ERROR;
+            val += lpos;
+        }
+    }
+
+    if (marker > 2)
+        return BASE64_DECODE_ERROR;
+
+    return (marker << 24) | val;
+}
+
+int pa_raop_base64_encode(const void *data, int len, char **str) {
+    const unsigned char *q;
+    char *p, *s = NULL;
+    int i, c;
+
+    pa_assert(data);
+    pa_assert(str);
+
+    p = s = pa_xnew(char, len * 4 / 3 + 4);
+    q = (const unsigned char *) data;
+    for (i = 0; i < len;) {
+        c = q[i++];
+        c *= 256;
+        if (i < len)
+            c += q[i];
+        i++;
+        c *= 256;
+        if (i < len)
+            c += q[i];
+        i++;
+        p[0] = base64_chars[(c & 0x00fc0000) >> 18];
+        p[1] = base64_chars[(c & 0x0003f000) >> 12];
+        p[2] = base64_chars[(c & 0x00000fc0) >> 6];
+        p[3] = base64_chars[(c & 0x0000003f) >> 0];
+        if (i > len)
+            p[3] = '=';
+        if (i > len + 1)
+            p[2] = '=';
+        p += 4;
+    }
+
+    *p = 0;
+    *str = s;
+    return strlen(s);
+}
+
+int pa_raop_base64_decode(const char *str, void *data) {
+    const char *p;
+    unsigned char *q;
+
+    pa_assert(str);
+    pa_assert(data);
+
+    q = data;
+    for (p = str; *p && (*p == '=' || strchr(base64_chars, *p)); p += 4) {
+        unsigned int val = token_decode(p);
+        unsigned int marker = (val >> 24) & 0xff;
+        if (val == BASE64_DECODE_ERROR)
+            return -1;
+        *q++ = (val >> 16) & 0xff;
+        if (marker < 2)
+            *q++ = (val >> 8) & 0xff;
+        if (marker < 1)
+            *q++ = val & 0xff;
+    }
+
+    return q - (unsigned char *) data;
+}
+
+int pa_raop_md5_hash(const char *data, int len, char **str) {
+    unsigned char d[MD5_DIGEST_LENGTH];
+    char *s = NULL;
+    int i;
+
+    pa_assert(data);
+    pa_assert(str);
+
+    MD5((unsigned char*) data, len, d);
+    s = pa_xnew(char, MD5_HASH_LENGTH);
+    for (i = 0; i < MD5_DIGEST_LENGTH; i++)
+        sprintf(&s[2*i], "%02x", (unsigned int) d[i]);
+
+    *str = s;
+    s[MD5_HASH_LENGTH] = 0;
+    return strlen(s);
+}
+
+int pa_raop_basic_response(const char *user, const char *pwd, char **str) {
+    char *tmp, *B = NULL;
+
+    pa_assert(str);
+
+    tmp = pa_sprintf_malloc("%s:%s", user, pwd);
+    pa_raop_base64_encode(tmp, strlen(tmp), &B);
+    pa_xfree(tmp);
+
+    *str = B;
+    return strlen(B);
+}
+
+int pa_raop_digest_response(const char *user, const char *realm, const char *password,
+                            const char *nonce, const char *uri, char **str) {
+    char *A1, *HA1, *A2, *HA2;
+    char *tmp, *KD = NULL;
+
+    pa_assert(str);
+
+    A1 = pa_sprintf_malloc("%s:%s:%s", user, realm, password);
+    pa_raop_md5_hash(A1, strlen(A1), &HA1);
+    pa_xfree(A1);
+
+    A2 = pa_sprintf_malloc("OPTIONS:%s", uri);
+    pa_raop_md5_hash(A2, strlen(A2), &HA2);
+    pa_xfree(A2);
+
+    tmp = pa_sprintf_malloc("%s:%s:%s", HA1, nonce, HA2);
+    pa_raop_md5_hash(tmp, strlen(tmp), &KD);
+    pa_xfree(tmp);
+
+    pa_xfree(HA1);
+    pa_xfree(HA2);
+
+    *str = KD;
+    return strlen(KD);
+}
diff --git a/src/modules/raop/base64.h b/src/modules/raop/raop-util.h
similarity index 60%
rename from src/modules/raop/base64.h
rename to src/modules/raop/raop-util.h
index 59160c9..d3f7566 100644
--- a/src/modules/raop/base64.h
+++ b/src/modules/raop/raop-util.h
@@ -1,11 +1,12 @@
-#ifndef foobase64hfoo
-#define foobase64hfoo
+#ifndef fooraoputilfoo
+#define fooraoputilfoo
 
 /***
   This file is part of PulseAudio.
 
   Copyright 2008 Colin Guthrie
   Copyright Kungliga Tekniska högskolan
+  Copyright 2013 Martin Blanchard
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
@@ -21,12 +22,18 @@
   along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
 ***/
 
-/*
+/***
   This file was originally inspired by a file developed by
-  Kungliga Tekniska högskolan
-*/
+  Kungliga Tekniska högskolan.
+***/
+
+int pa_raop_base64_encode(const void *data, int len, char **str);
+int pa_raop_base64_decode(const char *str, void *data);
+
+int pa_raop_md5_hash(const char *data, int len, char **str);
 
-int pa_base64_encode(const void *data, int size, char **str);
-int pa_base64_decode(const char *str, void *data);
+int pa_raop_basic_response(const char *user, const char *pwd, char **str);
+int pa_raop_digest_response(const char *user, const char *realm, const char *password,
+                            const char *nonce, const char *uri, char **str);
 
 #endif
diff --git a/src/modules/raop/raop_client.c b/src/modules/raop/raop_client.c
deleted file mode 100644
index 864c558..0000000
--- a/src/modules/raop/raop_client.c
+++ /dev/null
@@ -1,581 +0,0 @@
-/***
-  This file is part of PulseAudio.
-
-  Copyright 2008 Colin Guthrie
-
-  PulseAudio is free software; you can redistribute it and/or modify
-  it under the terms of the GNU Lesser General Public License as published
-  by the Free Software Foundation; either version 2.1 of the License,
-  or (at your option) any later version.
-
-  PulseAudio 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 Lesser General Public License
-  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-***/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-
-#ifdef HAVE_SYS_FILIO_H
-#include <sys/filio.h>
-#endif
-
-/* TODO: Replace OpenSSL with NSS */
-#include <openssl/err.h>
-#include <openssl/rand.h>
-#include <openssl/aes.h>
-#include <openssl/rsa.h>
-#include <openssl/engine.h>
-
-#include <pulse/xmalloc.h>
-
-#include <pulsecore/core-error.h>
-#include <pulsecore/core-util.h>
-#include <pulsecore/iochannel.h>
-#include <pulsecore/socket-util.h>
-#include <pulsecore/log.h>
-#include <pulsecore/parseaddr.h>
-#include <pulsecore/macro.h>
-#include <pulsecore/memchunk.h>
-#include <pulsecore/random.h>
-
-#include "raop_client.h"
-#include "rtsp_client.h"
-#include "base64.h"
-
-#define AES_CHUNKSIZE 16
-
-#define JACK_STATUS_DISCONNECTED 0
-#define JACK_STATUS_CONNECTED 1
-
-#define JACK_TYPE_ANALOG 0
-#define JACK_TYPE_DIGITAL 1
-
-#define VOLUME_DEF -30
-#define VOLUME_MIN -144
-#define VOLUME_MAX 0
-
-#define RAOP_PORT 5000
-
-/* Openssl 1.1.0 broke compatibility. Before 1.1.0 we had to set RSA->n and
- * RSA->e manually, but after 1.1.0 the RSA struct is opaque and we have to use
- * RSA_set0_key(). RSA_set0_key() is a new function added in 1.1.0. We could
- * depend on openssl 1.1.0, but it may take some time before distributions will
- * be able to upgrade to the new openssl version. To insulate ourselves from
- * such transition problems, let's implement RSA_set0_key() ourselves if it's
- * not available. */
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
-static int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) {
-    r->n = n;
-    r->e = e;
-    return 1;
-}
-#endif
-
-struct pa_raop_client {
-    pa_core *core;
-    char *host;
-    uint16_t port;
-    char *sid;
-    pa_rtsp_client *rtsp;
-
-    uint8_t jack_type;
-    uint8_t jack_status;
-
-    /* Encryption Related bits */
-    AES_KEY aes;
-    uint8_t aes_iv[AES_CHUNKSIZE]; /* initialization vector for aes-cbc */
-    uint8_t aes_nv[AES_CHUNKSIZE]; /* next vector for aes-cbc */
-    uint8_t aes_key[AES_CHUNKSIZE]; /* key for aes-cbc */
-
-    pa_socket_client *sc;
-    int fd;
-
-    uint16_t seq;
-    uint32_t rtptime;
-
-    pa_raop_client_cb_t callback;
-    void* userdata;
-    pa_raop_client_closed_cb_t closed_callback;
-    void* closed_userdata;
-};
-
-/**
- * Function to write bits into a buffer.
- * @param buffer Handle to the buffer. It will be incremented if new data requires it.
- * @param bit_pos A pointer to a position buffer to keep track the current write location (0 for MSB, 7 for LSB)
- * @param size A pointer to the byte size currently written. This allows the calling function to do simple buffer overflow checks
- * @param data The data to write
- * @param data_bit_len The number of bits from data to write
- */
-static inline void bit_writer(uint8_t **buffer, uint8_t *bit_pos, int *size, uint8_t data, uint8_t data_bit_len) {
-    int bits_left, bit_overflow;
-    uint8_t bit_data;
-
-    if (!data_bit_len)
-        return;
-
-    /* If bit pos is zero, we will definately use at least one bit from the current byte so size increments. */
-    if (!*bit_pos)
-        *size += 1;
-
-    /* Calc the number of bits left in the current byte of buffer */
-    bits_left = 7 - *bit_pos  + 1;
-    /* Calc the overflow of bits in relation to how much space we have left... */
-    bit_overflow = bits_left - data_bit_len;
-    if (bit_overflow >= 0) {
-        /* We can fit the new data in our current byte */
-        /* As we write from MSB->LSB we need to left shift by the overflow amount */
-        bit_data = data << bit_overflow;
-        if (*bit_pos)
-            **buffer |= bit_data;
-        else
-            **buffer = bit_data;
-        /* If our data fits exactly into the current byte, we need to increment our pointer */
-        if (0 == bit_overflow) {
-            /* Do not increment size as it will be incremented on next call as bit_pos is zero */
-            *buffer += 1;
-            *bit_pos = 0;
-        } else {
-            *bit_pos += data_bit_len;
-        }
-    } else {
-        /* bit_overflow is negative, there for we will need a new byte from our buffer */
-        /* Firstly fill up what's left in the current byte */
-        bit_data = data >> -bit_overflow;
-        **buffer |= bit_data;
-        /* Increment our buffer pointer and size counter*/
-        *buffer += 1;
-        *size += 1;
-        **buffer = data << (8 + bit_overflow);
-        *bit_pos = -bit_overflow;
-    }
-}
-
-static int rsa_encrypt(uint8_t *text, int len, uint8_t *res) {
-    const char n[] =
-        "59dE8qLieItsH1WgjrcFRKj6eUWqi+bGLOX1HL3U3GhC/j0Qg90u3sG/1CUtwC"
-        "5vOYvfDmFI6oSFXi5ELabWJmT2dKHzBJKa3k9ok+8t9ucRqMd6DZHJ2YCCLlDR"
-        "KSKv6kDqnw4UwPdpOMXziC/AMj3Z/lUVX1G7WSHCAWKf1zNS1eLvqr+boEjXuB"
-        "OitnZ/bDzPHrTOZz0Dew0uowxf/+sG+NCK3eQJVxqcaJ/vEHKIVd2M+5qL71yJ"
-        "Q+87X6oV3eaYvt3zWZYD6z5vYTcrtij2VZ9Zmni/UAaHqn9JdsBWLUEpVviYnh"
-        "imNVvYFZeCXg/IdTQ+x4IRdiXNv5hEew==";
-    const char e[] = "AQAB";
-    uint8_t modules[256];
-    uint8_t exponent[8];
-    int size;
-    RSA *rsa;
-    BIGNUM *n_bn;
-    BIGNUM *e_bn;
-
-    rsa = RSA_new();
-    size = pa_base64_decode(n, modules);
-    n_bn = BN_bin2bn(modules, size, NULL);
-    size = pa_base64_decode(e, exponent);
-    e_bn = BN_bin2bn(exponent, size, NULL);
-    RSA_set0_key(rsa, n_bn, e_bn, NULL);
-
-    size = RSA_public_encrypt(len, text, res, rsa, RSA_PKCS1_OAEP_PADDING);
-    RSA_free(rsa);
-    return size;
-}
-
-static int aes_encrypt(pa_raop_client* c, uint8_t *data, int size) {
-    uint8_t *buf;
-    int i=0, j;
-
-    pa_assert(c);
-
-    memcpy(c->aes_nv, c->aes_iv, AES_CHUNKSIZE);
-    while (i+AES_CHUNKSIZE <= size) {
-        buf = data + i;
-        for (j=0; j<AES_CHUNKSIZE; ++j)
-            buf[j] ^= c->aes_nv[j];
-
-        AES_encrypt(buf, buf, &c->aes);
-        memcpy(c->aes_nv, buf, AES_CHUNKSIZE);
-        i += AES_CHUNKSIZE;
-    }
-    return i;
-}
-
-static inline void rtrimchar(char *str, char rc) {
-    char *sp = str + strlen(str) - 1;
-    while (sp >= str && *sp == rc) {
-        *sp = '\0';
-        sp -= 1;
-    }
-}
-
-static void on_connection(pa_socket_client *sc, pa_iochannel *io, void *userdata) {
-    pa_raop_client *c = userdata;
-
-    pa_assert(sc);
-    pa_assert(c);
-    pa_assert(c->sc == sc);
-    pa_assert(c->fd < 0);
-    pa_assert(c->callback);
-
-    pa_socket_client_unref(c->sc);
-    c->sc = NULL;
-
-    if (!io) {
-        pa_log("Connection failed: %s", pa_cstrerror(errno));
-        return;
-    }
-
-    c->fd = pa_iochannel_get_send_fd(io);
-
-    pa_iochannel_set_noclose(io, true);
-    pa_iochannel_free(io);
-
-    pa_make_tcp_socket_low_delay(c->fd);
-
-    pa_log_debug("Connection established");
-    c->callback(c->fd, c->userdata);
-}
-
-static void rtsp_cb(pa_rtsp_client *rtsp, pa_rtsp_state state, pa_headerlist* headers, void *userdata) {
-    pa_raop_client* c = userdata;
-    pa_assert(c);
-    pa_assert(rtsp);
-    pa_assert(rtsp == c->rtsp);
-
-    switch (state) {
-        case STATE_CONNECT: {
-            int i;
-            uint8_t rsakey[512];
-            char *key, *iv, *sac, *sdp;
-            uint16_t rand_data;
-            const char *ip;
-            char *url;
-
-            pa_log_debug("RAOP: CONNECTED");
-            ip = pa_rtsp_localip(c->rtsp);
-            /* First of all set the url properly */
-            url = pa_sprintf_malloc("rtsp://%s/%s", ip, c->sid);
-            pa_rtsp_set_url(c->rtsp, url);
-            pa_xfree(url);
-
-            /* Now encrypt our aes_public key to send to the device */
-            i = rsa_encrypt(c->aes_key, AES_CHUNKSIZE, rsakey);
-            pa_base64_encode(rsakey, i, &key);
-            rtrimchar(key, '=');
-            pa_base64_encode(c->aes_iv, AES_CHUNKSIZE, &iv);
-            rtrimchar(iv, '=');
-
-            pa_random(&rand_data, sizeof(rand_data));
-            pa_base64_encode(&rand_data, AES_CHUNKSIZE, &sac);
-            rtrimchar(sac, '=');
-            pa_rtsp_add_header(c->rtsp, "Apple-Challenge", sac);
-            sdp = pa_sprintf_malloc(
-                "v=0\r\n"
-                "o=iTunes %s 0 IN IP4 %s\r\n"
-                "s=iTunes\r\n"
-                "c=IN IP4 %s\r\n"
-                "t=0 0\r\n"
-                "m=audio 0 RTP/AVP 96\r\n"
-                "a=rtpmap:96 AppleLossless\r\n"
-                "a=fmtp:96 4096 0 16 40 10 14 2 255 0 0 44100\r\n"
-                "a=rsaaeskey:%s\r\n"
-                "a=aesiv:%s\r\n",
-                c->sid, ip, c->host, key, iv);
-            pa_rtsp_announce(c->rtsp, sdp);
-            pa_xfree(key);
-            pa_xfree(iv);
-            pa_xfree(sac);
-            pa_xfree(sdp);
-            break;
-        }
-
-        case STATE_ANNOUNCE:
-            pa_log_debug("RAOP: ANNOUNCED");
-            pa_rtsp_remove_header(c->rtsp, "Apple-Challenge");
-            pa_rtsp_setup(c->rtsp);
-            break;
-
-        case STATE_SETUP: {
-            char *aj = pa_xstrdup(pa_headerlist_gets(headers, "Audio-Jack-Status"));
-            pa_log_debug("RAOP: SETUP");
-            if (aj) {
-                char *token, *pc;
-                char delimiters[] = ";";
-                const char* token_state = NULL;
-                c->jack_type = JACK_TYPE_ANALOG;
-                c->jack_status = JACK_STATUS_DISCONNECTED;
-
-                while ((token = pa_split(aj, delimiters, &token_state))) {
-                    if ((pc = strstr(token, "="))) {
-                      *pc = 0;
-                      if (pa_streq(token, "type") && pa_streq(pc+1, "digital")) {
-                          c->jack_type = JACK_TYPE_DIGITAL;
-                      }
-                    } else {
-                        if (pa_streq(token, "connected"))
-                            c->jack_status = JACK_STATUS_CONNECTED;
-                    }
-                    pa_xfree(token);
-                }
-                pa_xfree(aj);
-            } else {
-                pa_log_warn("Audio Jack Status missing");
-            }
-            pa_rtsp_record(c->rtsp, &c->seq, &c->rtptime);
-            break;
-        }
-
-        case STATE_RECORD: {
-            uint32_t port = pa_rtsp_serverport(c->rtsp);
-            pa_log_debug("RAOP: RECORDED");
-
-            if (!(c->sc = pa_socket_client_new_string(c->core->mainloop, true, c->host, port))) {
-                pa_log("failed to connect to server '%s:%d'", c->host, port);
-                return;
-            }
-            pa_socket_client_set_callback(c->sc, on_connection, c);
-            break;
-        }
-
-        case STATE_FLUSH:
-            pa_log_debug("RAOP: FLUSHED");
-            break;
-
-        case STATE_TEARDOWN:
-            pa_log_debug("RAOP: TEARDOWN");
-            break;
-
-        case STATE_SET_PARAMETER:
-            pa_log_debug("RAOP: SET_PARAMETER");
-            break;
-
-        case STATE_DISCONNECTED:
-            pa_assert(c->closed_callback);
-            pa_assert(c->rtsp);
-
-            pa_log_debug("RTSP control channel closed");
-            pa_rtsp_client_free(c->rtsp);
-            c->rtsp = NULL;
-            if (c->fd > 0) {
-                /* We do not close the fd, we leave it to the closed callback to do that */
-                c->fd = -1;
-            }
-            if (c->sc) {
-                pa_socket_client_unref(c->sc);
-                c->sc = NULL;
-            }
-            pa_xfree(c->sid);
-            c->sid = NULL;
-            c->closed_callback(c->closed_userdata);
-            break;
-    }
-}
-
-pa_raop_client* pa_raop_client_new(pa_core *core, const char* host) {
-    pa_parsed_address a;
-    pa_raop_client* c;
-
-    pa_assert(core);
-    pa_assert(host);
-
-    if (pa_parse_address(host, &a) < 0)
-        return NULL;
-
-    if (a.type == PA_PARSED_ADDRESS_UNIX) {
-        pa_xfree(a.path_or_host);
-        return NULL;
-    }
-
-    c = pa_xnew0(pa_raop_client, 1);
-    c->core = core;
-    c->fd = -1;
-
-    c->host = a.path_or_host;
-    if (a.port)
-        c->port = a.port;
-    else
-        c->port = RAOP_PORT;
-
-    if (pa_raop_connect(c)) {
-        pa_raop_client_free(c);
-        return NULL;
-    }
-    return c;
-}
-
-void pa_raop_client_free(pa_raop_client* c) {
-    pa_assert(c);
-
-    if (c->rtsp)
-        pa_rtsp_client_free(c->rtsp);
-    if (c->sid)
-        pa_xfree(c->sid);
-    pa_xfree(c->host);
-    pa_xfree(c);
-}
-
-int pa_raop_connect(pa_raop_client* c) {
-    char *sci;
-    struct {
-        uint32_t a;
-        uint32_t b;
-        uint32_t c;
-    } rand_data;
-
-    pa_assert(c);
-
-    if (c->rtsp) {
-        pa_log_debug("Connection already in progress");
-        return 0;
-    }
-
-    c->rtsp = pa_rtsp_client_new(c->core->mainloop, c->host, c->port, "iTunes/4.6 (Macintosh; U; PPC Mac OS X 10.3)");
-
-    /* Initialise the AES encryption system */
-    pa_random(c->aes_iv, sizeof(c->aes_iv));
-    pa_random(c->aes_key, sizeof(c->aes_key));
-    memcpy(c->aes_nv, c->aes_iv, sizeof(c->aes_nv));
-    AES_set_encrypt_key(c->aes_key, 128, &c->aes);
-
-    /* Generate random instance id */
-    pa_random(&rand_data, sizeof(rand_data));
-    c->sid = pa_sprintf_malloc("%u", rand_data.a);
-    sci = pa_sprintf_malloc("%08x%08x",rand_data.b, rand_data.c);
-    pa_rtsp_add_header(c->rtsp, "Client-Instance", sci);
-    pa_xfree(sci);
-    pa_rtsp_set_callback(c->rtsp, rtsp_cb, c);
-    return pa_rtsp_connect(c->rtsp);
-}
-
-int pa_raop_flush(pa_raop_client* c) {
-    pa_assert(c);
-
-    pa_rtsp_flush(c->rtsp, c->seq, c->rtptime);
-    return 0;
-}
-
-int pa_raop_client_set_volume(pa_raop_client* c, pa_volume_t volume) {
-    int rv;
-    double db;
-    char *param;
-
-    pa_assert(c);
-
-    db = pa_sw_volume_to_dB(volume);
-    if (db < VOLUME_MIN)
-        db = VOLUME_MIN;
-    else if (db > VOLUME_MAX)
-        db = VOLUME_MAX;
-
-    param = pa_sprintf_malloc("volume: %0.6f\r\n",  db);
-
-    /* We just hit and hope, cannot wait for the callback */
-    rv = pa_rtsp_setparameter(c->rtsp, param);
-    pa_xfree(param);
-    return rv;
-}
-
-int pa_raop_client_encode_sample(pa_raop_client* c, pa_memchunk* raw, pa_memchunk* encoded) {
-    uint16_t len;
-    size_t bufmax;
-    uint8_t *bp, bpos;
-    uint8_t *ibp, *maxibp;
-    int size;
-    uint8_t *b, *p;
-    uint32_t bsize;
-    size_t length;
-    static uint8_t header[] = {
-        0x24, 0x00, 0x00, 0x00,
-        0xF0, 0xFF, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00,
-    };
-    int header_size = sizeof(header);
-
-    pa_assert(c);
-    pa_assert(c->fd > 0);
-    pa_assert(raw);
-    pa_assert(raw->memblock);
-    pa_assert(raw->length > 0);
-    pa_assert(encoded);
-
-    /* We have to send 4 byte chunks */
-    bsize = (int)(raw->length / 4);
-    length = bsize * 4;
-
-    /* Leave 16 bytes extra to allow for the ALAC header which is about 55 bits */
-    bufmax = length + header_size + 16;
-    pa_memchunk_reset(encoded);
-    encoded->memblock = pa_memblock_new(c->core->mempool, bufmax);
-    b = pa_memblock_acquire(encoded->memblock);
-    memcpy(b, header, header_size);
-
-    /* Now write the actual samples */
-    bp = b + header_size;
-    size = bpos = 0;
-    bit_writer(&bp,&bpos,&size,1,3); /* channel=1, stereo */
-    bit_writer(&bp,&bpos,&size,0,4); /* unknown */
-    bit_writer(&bp,&bpos,&size,0,8); /* unknown */
-    bit_writer(&bp,&bpos,&size,0,4); /* unknown */
-    bit_writer(&bp,&bpos,&size,1,1); /* hassize */
-    bit_writer(&bp,&bpos,&size,0,2); /* unused */
-    bit_writer(&bp,&bpos,&size,1,1); /* is-not-compressed */
-
-    /* size of data, integer, big endian */
-    bit_writer(&bp,&bpos,&size,(bsize>>24)&0xff,8);
-    bit_writer(&bp,&bpos,&size,(bsize>>16)&0xff,8);
-    bit_writer(&bp,&bpos,&size,(bsize>>8)&0xff,8);
-    bit_writer(&bp,&bpos,&size,(bsize)&0xff,8);
-
-    ibp = p = pa_memblock_acquire(raw->memblock);
-    maxibp = p + raw->length - 4;
-    while (ibp <= maxibp) {
-        /* Byte swap stereo data */
-        bit_writer(&bp,&bpos,&size,*(ibp+1),8);
-        bit_writer(&bp,&bpos,&size,*(ibp+0),8);
-        bit_writer(&bp,&bpos,&size,*(ibp+3),8);
-        bit_writer(&bp,&bpos,&size,*(ibp+2),8);
-        ibp += 4;
-        raw->index += 4;
-        raw->length -= 4;
-    }
-    pa_memblock_release(raw->memblock);
-    encoded->length = header_size + size;
-
-    /* store the length (endian swapped: make this better) */
-    len = size + header_size - 4;
-    *(b + 2) = len >> 8;
-    *(b + 3) = len & 0xff;
-
-    /* encrypt our data */
-    aes_encrypt(c, (b + header_size), size);
-
-    /* We're done with the chunk */
-    pa_memblock_release(encoded->memblock);
-
-    return 0;
-}
-
-void pa_raop_client_set_callback(pa_raop_client* c, pa_raop_client_cb_t callback, void *userdata) {
-    pa_assert(c);
-
-    c->callback = callback;
-    c->userdata = userdata;
-}
-
-void pa_raop_client_set_closed_callback(pa_raop_client* c, pa_raop_client_closed_cb_t callback, void *userdata) {
-    pa_assert(c);
-
-    c->closed_callback = callback;
-    c->closed_userdata = userdata;
-}
diff --git a/src/modules/raop/raop_client.h b/src/modules/raop/raop_client.h
deleted file mode 100644
index b349a54..0000000
--- a/src/modules/raop/raop_client.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef fooraopclientfoo
-#define fooraopclientfoo
-
-/***
-  This file is part of PulseAudio.
-
-  Copyright 2008 Colin Guthrie
-
-  PulseAudio is free software; you can redistribute it and/or modify
-  it under the terms of the GNU Lesser General Public License as published
-  by the Free Software Foundation; either version 2.1 of the License,
-  or (at your option) any later version.
-
-  PulseAudio 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 Lesser General Public License
-  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
-***/
-
-#include <pulsecore/core.h>
-
-typedef struct pa_raop_client pa_raop_client;
-
-pa_raop_client* pa_raop_client_new(pa_core *core, const char* host);
-void pa_raop_client_free(pa_raop_client* c);
-
-int pa_raop_connect(pa_raop_client* c);
-int pa_raop_flush(pa_raop_client* c);
-
-int pa_raop_client_set_volume(pa_raop_client* c, pa_volume_t volume);
-int pa_raop_client_encode_sample(pa_raop_client* c, pa_memchunk* raw, pa_memchunk* encoded);
-
-typedef void (*pa_raop_client_cb_t)(int fd, void *userdata);
-void pa_raop_client_set_callback(pa_raop_client* c, pa_raop_client_cb_t callback, void *userdata);
-
-typedef void (*pa_raop_client_closed_cb_t)(void *userdata);
-void pa_raop_client_set_closed_callback(pa_raop_client* c, pa_raop_client_closed_cb_t callback, void *userdata);
-
-#endif
diff --git a/src/modules/reserve.c b/src/modules/reserve.c
index f78805e..b0038e6 100644
--- a/src/modules/reserve.c
+++ b/src/modules/reserve.c
@@ -474,6 +474,9 @@ int rd_acquire(
 		goto fail;
 	}
 
+        dbus_message_unref(m);
+        m = NULL;
+
 	if (!dbus_message_get_args(
 		    reply,
 		    error,
@@ -483,6 +486,9 @@ int rd_acquire(
 		goto fail;
 	}
 
+        dbus_message_unref(reply);
+        reply = NULL;
+
 	if (!good) {
 		r = -EBUSY;
 		goto fail;
diff --git a/src/modules/rtp/module-rtp-recv.c b/src/modules/rtp/module-rtp-recv.c
index 5977500..f512a8a 100644
--- a/src/modules/rtp/module-rtp-recv.c
+++ b/src/modules/rtp/module-rtp-recv.c
@@ -296,7 +296,7 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
 
         pa_log_debug("wi=%lu ri=%lu", (unsigned long) wi, (unsigned long) ri);
 
-        sink_delay = pa_sink_get_latency_within_thread(s->sink_input->sink);
+        sink_delay = pa_sink_get_latency_within_thread(s->sink_input->sink, false);
         render_delay = pa_bytes_to_usec(pa_memblockq_get_length(s->sink_input->thread_info.render_memblockq), &s->sink_input->sink->sample_spec);
 
         if (ri > render_delay+sink_delay)
diff --git a/src/modules/rtp/rtsp_client.c b/src/modules/rtp/rtsp_client.c
index bdfd24f..34210f9 100644
--- a/src/modules/rtp/rtsp_client.c
+++ b/src/modules/rtp/rtsp_client.c
@@ -41,6 +41,7 @@
 #include <pulsecore/strbuf.h>
 #include <pulsecore/ioline.h>
 #include <pulsecore/arpa-inet.h>
+#include <pulsecore/random.h>
 
 #include "rtsp_client.h"
 
@@ -57,7 +58,8 @@ struct pa_rtsp_client {
     void *userdata;
     const char *useragent;
 
-    pa_rtsp_state state;
+    pa_rtsp_state_t state;
+    pa_rtsp_status_t status;
     uint8_t waiting;
 
     pa_headerlist* headers;
@@ -73,7 +75,7 @@ struct pa_rtsp_client {
     char *transport;
 };
 
-pa_rtsp_client* pa_rtsp_client_new(pa_mainloop_api *mainloop, const char* hostname, uint16_t port, const char* useragent) {
+pa_rtsp_client* pa_rtsp_client_new(pa_mainloop_api *mainloop, const char *hostname, uint16_t port, const char *useragent) {
     pa_rtsp_client *c;
 
     pa_assert(mainloop);
@@ -94,7 +96,7 @@ pa_rtsp_client* pa_rtsp_client_new(pa_mainloop_api *mainloop, const char* hostna
     return c;
 }
 
-void pa_rtsp_client_free(pa_rtsp_client* c) {
+void pa_rtsp_client_free(pa_rtsp_client *c) {
     pa_assert(c);
 
     if (c->sc)
@@ -118,8 +120,8 @@ void pa_rtsp_client_free(pa_rtsp_client* c) {
 }
 
 static void headers_read(pa_rtsp_client *c) {
-    char* token;
     char delimiters[] = ";";
+    char* token;
 
     pa_assert(c);
     pa_assert(c->response_headers);
@@ -164,14 +166,14 @@ static void headers_read(pa_rtsp_client *c) {
     }
 
     /* Call our callback */
-    c->callback(c, c->state, c->response_headers, c->userdata);
+    c->callback(c, c->state, c->status, c->response_headers, c->userdata);
 }
 
 static void line_callback(pa_ioline *line, const char *s, void *userdata) {
+    pa_rtsp_client *c = userdata;
     char *delimpos;
     char *s2, *s2p;
 
-    pa_rtsp_client *c = userdata;
     pa_assert(line);
     pa_assert(c);
     pa_assert(c->callback);
@@ -179,7 +181,7 @@ static void line_callback(pa_ioline *line, const char *s, void *userdata) {
     if (!s) {
         /* Keep the ioline/iochannel open as they will be freed automatically */
         c->ioline = NULL;
-        c->callback(c, STATE_DISCONNECTED, NULL, c->userdata);
+        c->callback(c, STATE_DISCONNECTED, STATUS_NO_RESPONSE, NULL, c->userdata);
         return;
     }
 
@@ -190,17 +192,35 @@ static void line_callback(pa_ioline *line, const char *s, void *userdata) {
         *s2p = '\0';
         s2p -= 1;
     }
+
     if (c->waiting && pa_streq(s2, "RTSP/1.0 200 OK")) {
+        if (c->response_headers)
+            pa_headerlist_free(c->response_headers);
+        c->response_headers = pa_headerlist_new();
+
+        c->status = STATUS_OK;
         c->waiting = 0;
+        goto exit;
+    } else if (c->waiting && pa_streq(s2, "RTSP/1.0 401 Unauthorized")) {
         if (c->response_headers)
             pa_headerlist_free(c->response_headers);
         c->response_headers = pa_headerlist_new();
+
+        c->status = STATUS_UNAUTHORIZED;
+        c->waiting = 0;
+        goto exit;
+    } else if (c->waiting) {
+        pa_log_warn("Unexpected/Unhandled response: %s", s2);
+
+        if (pa_streq(s2, "RTSP/1.0 400 Bad Request"))
+            c->status = STATUS_BAD_REQUEST;
+        else if (pa_streq(s2, "RTSP/1.0 500 Internal Server Error"))
+            c->status = STATUS_INTERNAL_ERROR;
+        else
+            c->status = STATUS_NO_RESPONSE;
         goto exit;
     }
-    if (c->waiting) {
-        pa_log_warn("Unexpected response: %s", s2);
-        goto exit;;
-    }
+
     if (!strlen(s2)) {
         /* End of headers */
         /* We will have a header left from our looping iteration, so add it in :) */
@@ -216,7 +236,6 @@ static void line_callback(pa_ioline *line, const char *s, void *userdata) {
 
         pa_log_debug("Full response received. Dispatching");
         headers_read(c);
-        c->waiting = 1;
         goto exit;
     }
 
@@ -227,7 +246,7 @@ static void line_callback(pa_ioline *line, const char *s, void *userdata) {
     if (c->last_header && ' ' == s2[0]) {
         pa_assert(c->header_buffer);
 
-        /* Add this line to the buffer (sans the space. */
+        /* Add this line to the buffer (sans the space) */
         pa_strbuf_puts(c->header_buffer, &(s2[1]));
         goto exit;
     }
@@ -269,6 +288,7 @@ static void line_callback(pa_ioline *line, const char *s, void *userdata) {
 
     /* Save the header name */
     c->last_header = pa_xstrdup(s2);
+
   exit:
     pa_xfree(s2);
 }
@@ -309,14 +329,14 @@ static void on_connection(pa_socket_client *sc, pa_iochannel *io, void *userdata
             }
         } else if (AF_INET6 == sa.sa.sa_family) {
             if ((res = inet_ntop(AF_INET6, &sa.in6.sin6_addr, buf, sizeof(buf)))) {
-                c->localip = pa_sprintf_malloc("[%s]", res);
+                c->localip = pa_xstrdup(res);
             }
         }
     }
     pa_log_debug("Established RTSP connection from local ip %s", c->localip);
 
     if (c->callback)
-        c->callback(c, c->state, NULL, c->userdata);
+        c->callback(c, c->state, STATUS_OK, NULL, c->userdata);
 }
 
 int pa_rtsp_connect(pa_rtsp_client *c) {
@@ -335,6 +355,7 @@ int pa_rtsp_connect(pa_rtsp_client *c) {
     pa_socket_client_set_callback(c->sc, on_connection, c);
     c->waiting = 1;
     c->state = STATE_CONNECT;
+    c->status = STATUS_NO_RESPONSE;
     return 0;
 }
 
@@ -348,30 +369,45 @@ void pa_rtsp_set_callback(pa_rtsp_client *c, pa_rtsp_cb_t callback, void *userda
 void pa_rtsp_disconnect(pa_rtsp_client *c) {
     pa_assert(c);
 
-    if (c->ioline)
+    if (c->ioline) {
         pa_ioline_close(c->ioline);
+        pa_ioline_unref(c->ioline);
+    }
     c->ioline = NULL;
 }
 
-const char* pa_rtsp_localip(pa_rtsp_client* c) {
+const char* pa_rtsp_localip(pa_rtsp_client *c) {
     pa_assert(c);
 
     return c->localip;
 }
 
-uint32_t pa_rtsp_serverport(pa_rtsp_client* c) {
+uint32_t pa_rtsp_serverport(pa_rtsp_client *c) {
     pa_assert(c);
 
     return c->rtp_port;
 }
 
-void pa_rtsp_set_url(pa_rtsp_client* c, const char* url) {
+bool pa_rtsp_exec_ready(const pa_rtsp_client *c) {
+    pa_assert(c);
+
+    return c->url != NULL && c->ioline != NULL;
+}
+
+void pa_rtsp_set_url(pa_rtsp_client *c, const char *url) {
     pa_assert(c);
 
     c->url = pa_xstrdup(url);
 }
 
-void pa_rtsp_add_header(pa_rtsp_client *c, const char* key, const char* value) {
+bool pa_rtsp_has_header(pa_rtsp_client *c, const char *key) {
+    pa_assert(c);
+    pa_assert(key);
+
+    return pa_headerlist_contains(c->headers, key);
+}
+
+void pa_rtsp_add_header(pa_rtsp_client *c, const char *key, const char *value) {
     pa_assert(c);
     pa_assert(key);
     pa_assert(value);
@@ -379,19 +415,26 @@ void pa_rtsp_add_header(pa_rtsp_client *c, const char* key, const char* value) {
     pa_headerlist_puts(c->headers, key, value);
 }
 
-void pa_rtsp_remove_header(pa_rtsp_client *c, const char* key) {
+const char* pa_rtsp_get_header(pa_rtsp_client *c, const char *key) {
+    pa_assert(c);
+    pa_assert(key);
+
+    return pa_headerlist_gets(c->headers, key);
+}
+
+void pa_rtsp_remove_header(pa_rtsp_client *c, const char *key) {
     pa_assert(c);
     pa_assert(key);
 
     pa_headerlist_remove(c->headers, key);
 }
 
-static int rtsp_exec(pa_rtsp_client* c, const char* cmd,
-                        const char* content_type, const char* content,
+static int rtsp_exec(pa_rtsp_client *c, const char *cmd,
+                        const char *content_type, const char *content,
                         int expect_response,
-                        pa_headerlist* headers) {
-    pa_strbuf* buf;
-    char* hdrs;
+                        pa_headerlist *headers) {
+    pa_strbuf *buf;
+    char *hdrs;
 
     pa_assert(c);
     pa_assert(c->url);
@@ -437,47 +480,74 @@ static int rtsp_exec(pa_rtsp_client* c, const char* cmd,
     pa_log_debug(hdrs);*/
     pa_ioline_puts(c->ioline, hdrs);
     pa_xfree(hdrs);
-
+    /* The command is sent we can configure the rtsp client structure to handle a new answer */
+    c->waiting = 1;
     return 0;
 }
 
-int pa_rtsp_announce(pa_rtsp_client *c, const char* sdp) {
+int pa_rtsp_options(pa_rtsp_client *c) {
+    char *url;
+    int rv;
+
     pa_assert(c);
+
+    url = c->url;
+    c->state = STATE_OPTIONS;
+
+    c->url = (char *)"*";
+    rv = rtsp_exec(c, "OPTIONS", NULL, NULL, 0, NULL);
+
+    c->url = url;
+    return rv;
+}
+
+int pa_rtsp_announce(pa_rtsp_client *c, const char *sdp) {
+    int rv;
+
+    pa_assert(c);
+
     if (!sdp)
         return -1;
 
     c->state = STATE_ANNOUNCE;
-    return rtsp_exec(c, "ANNOUNCE", "application/sdp", sdp, 1, NULL);
+    rv = rtsp_exec(c, "ANNOUNCE", "application/sdp", sdp, 1, NULL);
+
+    return rv;
 }
 
-int pa_rtsp_setup(pa_rtsp_client* c) {
-    pa_headerlist* headers;
+int pa_rtsp_setup(pa_rtsp_client *c, const char *transport) {
+    pa_headerlist *headers;
     int rv;
 
     pa_assert(c);
 
     headers = pa_headerlist_new();
-    pa_headerlist_puts(headers, "Transport", "RTP/AVP/TCP;unicast;interleaved=0-1;mode=record");
+    if (!transport)
+        pa_headerlist_puts(headers, "Transport", "RTP/AVP/TCP;unicast;interleaved=0-1;mode=record");
+    else
+        pa_headerlist_puts(headers, "Transport", transport);
 
     c->state = STATE_SETUP;
     rv = rtsp_exec(c, "SETUP", NULL, NULL, 1, headers);
+
     pa_headerlist_free(headers);
     return rv;
 }
 
-int pa_rtsp_record(pa_rtsp_client* c, uint16_t* seq, uint32_t* rtptime) {
-    pa_headerlist* headers;
-    int rv;
+int pa_rtsp_record(pa_rtsp_client *c, uint16_t *seq, uint32_t *rtptime) {
+    pa_headerlist *headers;
     char *info;
+    int rv;
 
     pa_assert(c);
+
     if (!c->session) {
         /* No session in progress */
         return -1;
     }
 
-    /* Todo: Generate these values randomly as per spec */
-    *seq = *rtptime = 0;
+    pa_random(seq, sizeof(*seq));
+    pa_random(rtptime, sizeof(*rtptime));
 
     headers = pa_headerlist_new();
     pa_headerlist_puts(headers, "Range", "npt=0-");
@@ -487,30 +557,29 @@ int pa_rtsp_record(pa_rtsp_client* c, uint16_t* seq, uint32_t* rtptime) {
 
     c->state = STATE_RECORD;
     rv = rtsp_exec(c, "RECORD", NULL, NULL, 1, headers);
+
     pa_headerlist_free(headers);
     return rv;
 }
 
-int pa_rtsp_teardown(pa_rtsp_client *c) {
-    pa_assert(c);
-
-    c->state = STATE_TEARDOWN;
-    return rtsp_exec(c, "TEARDOWN", NULL, NULL, 0, NULL);
-}
+int pa_rtsp_setparameter(pa_rtsp_client *c, const char *param) {
+    int rv;
 
-int pa_rtsp_setparameter(pa_rtsp_client *c, const char* param) {
     pa_assert(c);
+
     if (!param)
         return -1;
 
     c->state = STATE_SET_PARAMETER;
-    return rtsp_exec(c, "SET_PARAMETER", "text/parameters", param, 1, NULL);
+    rv = rtsp_exec(c, "SET_PARAMETER", "text/parameters", param, 1, NULL);
+
+    return rv;
 }
 
 int pa_rtsp_flush(pa_rtsp_client *c, uint16_t seq, uint32_t rtptime) {
     pa_headerlist* headers;
-    int rv;
     char *info;
+    int rv;
 
     pa_assert(c);
 
@@ -521,6 +590,18 @@ int pa_rtsp_flush(pa_rtsp_client *c, uint16_t seq, uint32_t rtptime) {
 
     c->state = STATE_FLUSH;
     rv = rtsp_exec(c, "FLUSH", NULL, NULL, 1, headers);
+
     pa_headerlist_free(headers);
     return rv;
 }
+
+int pa_rtsp_teardown(pa_rtsp_client *c) {
+    int rv;
+
+    pa_assert(c);
+
+    c->state = STATE_TEARDOWN;
+    rv = rtsp_exec(c, "TEARDOWN", NULL, NULL, 0, NULL);
+
+    return rv;
+}
diff --git a/src/modules/rtp/rtsp_client.h b/src/modules/rtp/rtsp_client.h
index f0ff95a..4e031d8 100644
--- a/src/modules/rtp/rtsp_client.h
+++ b/src/modules/rtp/rtsp_client.h
@@ -31,39 +31,53 @@
 #include "headerlist.h"
 
 typedef struct pa_rtsp_client pa_rtsp_client;
-typedef enum {
+
+typedef enum pa_rtsp_state {
   STATE_CONNECT,
+  STATE_OPTIONS,
   STATE_ANNOUNCE,
   STATE_SETUP,
   STATE_RECORD,
+  STATE_SET_PARAMETER,
   STATE_FLUSH,
   STATE_TEARDOWN,
-  STATE_SET_PARAMETER,
   STATE_DISCONNECTED
-} pa_rtsp_state;
-typedef void (*pa_rtsp_cb_t)(pa_rtsp_client *c, pa_rtsp_state state, pa_headerlist* hl, void *userdata);
-
-pa_rtsp_client* pa_rtsp_client_new(pa_mainloop_api *mainloop, const char* hostname, uint16_t port, const char* useragent);
-void pa_rtsp_client_free(pa_rtsp_client* c);
+} pa_rtsp_state_t;
 
-int pa_rtsp_connect(pa_rtsp_client* c);
-void pa_rtsp_set_callback(pa_rtsp_client *c, pa_rtsp_cb_t callback, void *userdata);
-
-void pa_rtsp_disconnect(pa_rtsp_client* c);
+typedef enum pa_rtsp_status {
+  STATUS_OK             = 200,
+  STATUS_BAD_REQUEST    = 400,
+  STATUS_UNAUTHORIZED   = 401,
+  STATUS_NO_RESPONSE    = 444,
+  STATUS_INTERNAL_ERROR = 500
+} pa_rtsp_status_t;
 
-const char* pa_rtsp_localip(pa_rtsp_client* c);
-uint32_t pa_rtsp_serverport(pa_rtsp_client* c);
-void pa_rtsp_set_url(pa_rtsp_client* c, const char* url);
-void pa_rtsp_add_header(pa_rtsp_client *c, const char* key, const char* value);
-void pa_rtsp_remove_header(pa_rtsp_client *c, const char* key);
+typedef void (*pa_rtsp_cb_t)(pa_rtsp_client *c, pa_rtsp_state_t state, pa_rtsp_status_t code, pa_headerlist *headers, void *userdata);
 
-int pa_rtsp_announce(pa_rtsp_client* c, const char* sdp);
+pa_rtsp_client* pa_rtsp_client_new(pa_mainloop_api *mainloop, const char *hostname, uint16_t port, const char *useragent);
+void pa_rtsp_client_free(pa_rtsp_client *c);
 
-int pa_rtsp_setup(pa_rtsp_client* c);
-int pa_rtsp_record(pa_rtsp_client* c, uint16_t* seq, uint32_t* rtptime);
-int pa_rtsp_teardown(pa_rtsp_client* c);
-
-int pa_rtsp_setparameter(pa_rtsp_client* c, const char* param);
-int pa_rtsp_flush(pa_rtsp_client* c, uint16_t seq, uint32_t rtptime);
+int pa_rtsp_connect(pa_rtsp_client *c);
+void pa_rtsp_set_callback(pa_rtsp_client *c, pa_rtsp_cb_t callback, void *userdata);
+void pa_rtsp_disconnect(pa_rtsp_client *c);
+
+const char* pa_rtsp_localip(pa_rtsp_client *c);
+uint32_t pa_rtsp_serverport(pa_rtsp_client *c);
+bool pa_rtsp_exec_ready(const pa_rtsp_client *c);
+
+void pa_rtsp_set_url(pa_rtsp_client *c, const char *url);
+
+bool pa_rtsp_has_header(pa_rtsp_client *c, const char *key);
+void pa_rtsp_add_header(pa_rtsp_client *c, const char *key, const char *value);
+const char* pa_rtsp_get_header(pa_rtsp_client *c, const char *key);
+void pa_rtsp_remove_header(pa_rtsp_client *c, const char *key);
+
+int pa_rtsp_options(pa_rtsp_client *c);
+int pa_rtsp_announce(pa_rtsp_client *c, const char *sdp);
+int pa_rtsp_setup(pa_rtsp_client *c, const char *transport);
+int pa_rtsp_record(pa_rtsp_client *c, uint16_t *seq, uint32_t *rtptime);
+int pa_rtsp_setparameter(pa_rtsp_client *c, const char *param);
+int pa_rtsp_flush(pa_rtsp_client *c, uint16_t seq, uint32_t rtptime);
+int pa_rtsp_teardown(pa_rtsp_client *c);
 
 #endif
diff --git a/src/modules/x11/module-x11-bell.c b/src/modules/x11/module-x11-bell.c
index 6c9f580..7b2be57 100644
--- a/src/modules/x11/module-x11-bell.c
+++ b/src/modules/x11/module-x11-bell.c
@@ -76,7 +76,10 @@ static int x11_event_cb(pa_x11_wrapper *w, XEvent *e, void *userdata) {
 
     bne = (XkbBellNotifyEvent*) e;
 
-    if (pa_scache_play_item_by_name(u->core, u->scache_item, u->sink_name, ((pa_volume_t) bne->percent*PA_VOLUME_NORM)/100U, NULL, NULL) < 0) {
+    /* We could use bne->percent to set the volume, but then the "event" role
+     * volume wouldn't have effect. It's better to ignore the volume suggestion
+     * from X11. */
+    if (pa_scache_play_item_by_name(u->core, u->scache_item, u->sink_name, PA_VOLUME_INVALID, NULL, NULL) < 0) {
         pa_log_info("Ringing bell failed, reverting to X11 device bell.");
         XkbForceDeviceBell(pa_x11_wrapper_get_display(w), bne->device, bne->bell_class, bne->bell_id, bne->percent);
     }
diff --git a/src/pulse/context.c b/src/pulse/context.c
index c39cbe7..6adfc5a 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -753,7 +753,7 @@ static int context_autospawn(pa_context *c) {
 
     if (r < 0) {
 
-        if (errno != ESRCH) {
+        if (errno != ECHILD) {
             pa_log(_("waitpid(): %s"), pa_cstrerror(errno));
             pa_context_fail(c, PA_ERR_INTERNAL);
             goto fail;
diff --git a/src/pulse/sample.c b/src/pulse/sample.c
index cb04254..ff77985 100644
--- a/src/pulse/sample.c
+++ b/src/pulse/sample.c
@@ -105,7 +105,10 @@ int pa_sample_format_valid(unsigned format) {
 }
 
 int pa_sample_rate_valid(uint32_t rate) {
-    return rate > 0 && rate <= PA_RATE_MAX;
+    /* The extra 1% is due to module-loopback: it temporarily sets
+     * a higher-than-nominal rate to get rid of excessive buffer
+     * latency */
+    return rate > 0 && rate <= PA_RATE_MAX * 101 / 100;
 }
 
 int pa_channels_valid(uint8_t channels) {
diff --git a/src/pulse/simple.c b/src/pulse/simple.c
index 614f4f7..7b66f62 100644
--- a/src/pulse/simple.c
+++ b/src/pulse/simple.c
@@ -463,18 +463,34 @@ pa_usec_t pa_simple_get_latency(pa_simple *p, int *rerror) {
         CHECK_DEAD_GOTO(p, rerror, unlock_and_fail);
 
         if (pa_stream_get_latency(p->stream, &t, &negative) >= 0) {
-            pa_usec_t extra = 0;
-
-            if (p->direction == PA_STREAM_RECORD)
-                extra = pa_bytes_to_usec(p->read_length, pa_stream_get_sample_spec(p->stream));
-
-            if (negative) {
-                if (extra > t)
-                    t = extra - t;
-                else
-                    t = 0;
-            } else
-                t += extra;
+            if (p->direction == PA_STREAM_RECORD) {
+                pa_usec_t already_read;
+
+                /* pa_simple_read() calls pa_stream_peek() to get the next
+                 * chunk of audio. If the next chunk is larger than what the
+                 * pa_simple_read() caller wanted, the leftover data is stored
+                 * in p->read_data until pa_simple_read() is called again.
+                 * pa_stream_drop() won't be called until the whole chunk has
+                 * been consumed, which means that pa_stream_get_latency() will
+                 * return too large values, because the whole size of the
+                 * partially read chunk is included in the latency. Therefore,
+                 * we need to substract the already-read amount from the
+                 * latency. */
+                already_read = pa_bytes_to_usec(p->read_index, pa_stream_get_sample_spec(p->stream));
+
+                if (!negative) {
+                    if (t > already_read)
+                        t -= already_read;
+                    else
+                        t = 0;
+                }
+            }
+
+            /* We don't have a way to report negative latencies from
+             * pa_simple_get_latency(). If the latency is negative, let's
+             * report zero. */
+            if (negative)
+                t = 0;
 
             break;
         }
diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c
index cbfc474..993b7ba 100644
--- a/src/pulse/thread-mainloop.c
+++ b/src/pulse/thread-mainloop.c
@@ -97,7 +97,7 @@ static void thread(void *userdata) {
 
     pa_mutex_lock(m->mutex);
 
-    pa_mainloop_run(m->real_mainloop, NULL);
+    (void) pa_mainloop_run(m->real_mainloop, NULL);
 
     pa_mutex_unlock(m->mutex);
 }
diff --git a/src/pulse/thread-mainloop.h b/src/pulse/thread-mainloop.h
index 40278b4..e69298a 100644
--- a/src/pulse/thread-mainloop.h
+++ b/src/pulse/thread-mainloop.h
@@ -164,7 +164,7 @@ PA_C_DECL_BEGIN
  * access this data safely, we must extend our example a bit:
  *
  * \code
- * static volatile int *drain_result = NULL;
+ * static int * volatile drain_result = NULL;
  *
  * static void my_drain_callback(pa_stream*s, int success, void *userdata) {
  *     pa_threaded_mainloop *m;
diff --git a/src/pulse/version.h b/src/pulse/version.h
index 1265d3b..cc61e12 100644
--- a/src/pulse/version.h
+++ b/src/pulse/version.h
@@ -33,7 +33,7 @@ PA_C_DECL_BEGIN
 /** Return the version of the header files. Keep in mind that this is
 a macro and not a function, so it is impossible to get the pointer of
 it. */
-#define pa_get_headers_version() ("10.0.0")
+#define pa_get_headers_version() ("10.99.0")
 
 /** Return the version of the library the current application is
  * linked to. */
@@ -53,7 +53,7 @@ const char* pa_get_library_version(void);
 #define PA_MAJOR 10
 
 /** The minor version of PA. \since 0.9.15 */
-#define PA_MINOR 0
+#define PA_MINOR 99
 
 /** The micro version of PA (will always be 0 from v1.0 onwards). \since 0.9.15 */
 #define PA_MICRO 0
diff --git a/src/pulse/volume.c b/src/pulse/volume.c
index 1667b94..ffd42ec 100644
--- a/src/pulse/volume.c
+++ b/src/pulse/volume.c
@@ -199,16 +199,23 @@ pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, p
 }
 
 pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) {
+    uint64_t result;
 
     pa_return_val_if_fail(PA_VOLUME_IS_VALID(a), PA_VOLUME_INVALID);
     pa_return_val_if_fail(PA_VOLUME_IS_VALID(b), PA_VOLUME_INVALID);
 
     /* cbrt((a/PA_VOLUME_NORM)^3*(b/PA_VOLUME_NORM)^3)*PA_VOLUME_NORM = a*b/PA_VOLUME_NORM */
 
-    return (pa_volume_t) PA_CLAMP_VOLUME((((uint64_t) a * (uint64_t) b + (uint64_t) PA_VOLUME_NORM / 2ULL) / (uint64_t) PA_VOLUME_NORM));
+    result = ((uint64_t) a * (uint64_t) b + (uint64_t) PA_VOLUME_NORM / 2ULL) / (uint64_t) PA_VOLUME_NORM;
+
+    if (result > (uint64_t)PA_VOLUME_MAX)
+        pa_log_warn("pa_sw_volume_multiply: Volume exceeds maximum allowed value and will be clipped. Please check your volume settings.");
+
+    return (pa_volume_t) PA_CLAMP_VOLUME(result);
 }
 
 pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) {
+    uint64_t result;
 
     pa_return_val_if_fail(PA_VOLUME_IS_VALID(a), PA_VOLUME_INVALID);
     pa_return_val_if_fail(PA_VOLUME_IS_VALID(b), PA_VOLUME_INVALID);
@@ -216,7 +223,12 @@ pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b) {
     if (b <= PA_VOLUME_MUTED)
         return 0;
 
-    return (pa_volume_t) (((uint64_t) a * (uint64_t) PA_VOLUME_NORM + (uint64_t) b / 2ULL) / (uint64_t) b);
+    result = ((uint64_t) a * (uint64_t) PA_VOLUME_NORM + (uint64_t) b / 2ULL) / (uint64_t) b;
+
+    if (result > (uint64_t)PA_VOLUME_MAX)
+        pa_log_warn("pa_sw_volume_divide: Volume exceeds maximum allowed value and will be clipped. Please check your volume settings.");
+
+    return (pa_volume_t) PA_CLAMP_VOLUME(result);
 }
 
 /* Amplitude, not power */
@@ -301,7 +313,7 @@ char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c) {
         l -= pa_snprintf(e, l, "%s%u: %3u%%",
                       first ? "" : " ",
                       channel,
-                      (c->values[channel]*100+PA_VOLUME_NORM/2)/PA_VOLUME_NORM);
+                      (unsigned)(((uint64_t)c->values[channel] * 100 + (uint64_t)PA_VOLUME_NORM / 2) / (uint64_t)PA_VOLUME_NORM));
 
         e = strchr(e, 0);
         first = false;
@@ -321,7 +333,7 @@ char *pa_volume_snprint(char *s, size_t l, pa_volume_t v) {
         return s;
     }
 
-    pa_snprintf(s, l, "%3u%%", (v*100+PA_VOLUME_NORM/2)/PA_VOLUME_NORM);
+    pa_snprintf(s, l, "%3u%%", (unsigned)(((uint64_t)v * 100 + (uint64_t)PA_VOLUME_NORM / 2) / (uint64_t)PA_VOLUME_NORM));
     return s;
 }
 
@@ -434,7 +446,7 @@ char *pa_volume_snprint_verbose(char *s, size_t l, pa_volume_t v, int print_dB)
 
     pa_snprintf(s, l, "%" PRIu32 " / %3u%%%s%s",
                 v,
-                (v * 100 + PA_VOLUME_NORM / 2) / PA_VOLUME_NORM,
+                (unsigned)(((uint64_t)v * 100 + (uint64_t)PA_VOLUME_NORM / 2) / (uint64_t)PA_VOLUME_NORM),
                 print_dB ? " / " : "",
                 print_dB ? pa_sw_volume_snprint_dB(dB, sizeof(dB), v) : "");
 
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c
index 9a73605..01fea47 100644
--- a/src/pulsecore/cli-command.c
+++ b/src/pulsecore/cli-command.c
@@ -344,8 +344,6 @@ static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, bool
     char bytes[PA_BYTES_SNPRINT_MAX];
     const pa_mempool_stat *mstat;
     unsigned k;
-    pa_sink *def_sink;
-    pa_source *def_source;
 
     static const char* const type_table[PA_MEMBLOCK_TYPE_MAX] = {
         [PA_MEMBLOCK_POOL] = "POOL",
@@ -388,12 +386,10 @@ static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, bool
     pa_strbuf_printf(buf, "Default channel map: %s\n",
                      pa_channel_map_snprint(cm, sizeof(cm), &c->default_channel_map));
 
-    def_sink = pa_namereg_get_default_sink(c);
-    def_source = pa_namereg_get_default_source(c);
     pa_strbuf_printf(buf, "Default sink name: %s\n"
                      "Default source name: %s\n",
-                     def_sink ? def_sink->name : "none",
-                     def_source ? def_source->name : "none");
+                     c->default_sink ? c->default_sink->name : "none",
+                     c->default_source ? c->default_source->name : "none");
 
     for (k = 0; k < PA_MEMBLOCK_TYPE_MAX; k++)
         pa_strbuf_printf(buf,
@@ -1034,7 +1030,7 @@ static int pa_cli_command_sink_default(pa_core *c, pa_tokenizer *t, pa_strbuf *b
     }
 
     if ((s = pa_namereg_get(c, n, PA_NAMEREG_SINK)))
-        pa_namereg_set_default_sink(c, s);
+        pa_core_set_configured_default_sink(c, s->name);
     else
         pa_strbuf_printf(buf, "Sink %s does not exist.\n", n);
 
@@ -1056,7 +1052,7 @@ static int pa_cli_command_source_default(pa_core *c, pa_tokenizer *t, pa_strbuf
     }
 
     if ((s = pa_namereg_get(c, n, PA_NAMEREG_SOURCE)))
-        pa_namereg_set_default_source(c, s);
+        pa_core_set_configured_default_source(c, s->name);
     else
         pa_strbuf_printf(buf, "Source %s does not exist.\n", n);
     return 0;
@@ -1850,20 +1846,20 @@ static int pa_cli_command_dump(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, bool
     }
 
     nl = false;
-    if ((sink = pa_namereg_get_default_sink(c))) {
+    if (c->default_sink) {
         if (!nl) {
             pa_strbuf_puts(buf, "\n");
             nl = true;
         }
 
-        pa_strbuf_printf(buf, "set-default-sink %s\n", sink->name);
+        pa_strbuf_printf(buf, "set-default-sink %s\n", c->default_sink->name);
     }
 
-    if ((source = pa_namereg_get_default_source(c))) {
+    if (c->default_source) {
         if (!nl)
             pa_strbuf_puts(buf, "\n");
 
-        pa_strbuf_printf(buf, "set-default-source %s\n", source->name);
+        pa_strbuf_printf(buf, "set-default-source %s\n", c->default_source->name);
     }
 
     pa_strbuf_puts(buf, "\n### EOF\n");
diff --git a/src/pulsecore/cli-text.c b/src/pulsecore/cli-text.c
index af79a1e..ded82f6 100644
--- a/src/pulsecore/cli-text.c
+++ b/src/pulsecore/cli-text.c
@@ -232,7 +232,7 @@ static const char *source_state_to_string(pa_source_state_t state) {
 
 char *pa_sink_list_to_string(pa_core *c) {
     pa_strbuf *s;
-    pa_sink *sink, *default_sink;
+    pa_sink *sink;
     uint32_t idx = PA_IDXSET_INVALID;
     pa_assert(c);
 
@@ -240,8 +240,6 @@ char *pa_sink_list_to_string(pa_core *c) {
 
     pa_strbuf_printf(s, "%u sink(s) available.\n", pa_idxset_size(c->sinks));
 
-    default_sink = pa_namereg_get_default_sink(c);
-
     PA_IDXSET_FOREACH(sink, c->sinks, idx) {
         char ss[PA_SAMPLE_SPEC_SNPRINT_MAX],
             cv[PA_CVOLUME_SNPRINT_VERBOSE_MAX],
@@ -273,7 +271,7 @@ char *pa_sink_list_to_string(pa_core *c) {
             "\tchannel map: %s%s%s\n"
             "\tused by: %u\n"
             "\tlinked by: %u\n",
-            sink == default_sink ? '*' : ' ',
+            sink == c->default_sink ? '*' : ' ',
             sink->index,
             sink->name,
             sink->driver,
@@ -350,7 +348,7 @@ char *pa_sink_list_to_string(pa_core *c) {
 
 char *pa_source_list_to_string(pa_core *c) {
     pa_strbuf *s;
-    pa_source *source, *default_source;
+    pa_source *source;
     uint32_t idx = PA_IDXSET_INVALID;
     pa_assert(c);
 
@@ -358,8 +356,6 @@ char *pa_source_list_to_string(pa_core *c) {
 
     pa_strbuf_printf(s, "%u source(s) available.\n", pa_idxset_size(c->sources));
 
-    default_source = pa_namereg_get_default_source(c);
-
     PA_IDXSET_FOREACH(source, c->sources, idx) {
         char ss[PA_SAMPLE_SPEC_SNPRINT_MAX],
             cv[PA_CVOLUME_SNPRINT_VERBOSE_MAX],
@@ -389,7 +385,7 @@ char *pa_source_list_to_string(pa_core *c) {
             "\tchannel map: %s%s%s\n"
             "\tused by: %u\n"
             "\tlinked by: %u\n",
-            source == default_source ? '*' : ' ',
+            source == c->default_source ? '*' : ' ',
             source->index,
             source->name,
             source->driver,
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 873f86a..d4cfa20 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -1062,7 +1062,7 @@ int pa_parse_volume(const char *v, pa_volume_t *volume) {
     return 0;
 }
 
-/* Split the specified string wherever one of the strings in delimiter
+/* Split the specified string wherever one of the characters in delimiter
  * occurs. Each time it is called returns a newly allocated string
  * with pa_xmalloc(). The variable state points to, should be
  * initialized to NULL before the first call. */
@@ -1082,7 +1082,7 @@ char *pa_split(const char *c, const char *delimiter, const char**state) {
     return pa_xstrndup(current, l);
 }
 
-/* Split the specified string wherever one of the strings in delimiter
+/* Split the specified string wherever one of the characters in delimiter
  * occurs. Each time it is called returns a pointer to the substring within the
  * string and the length in 'n'. Note that the resultant string cannot be used
  * as-is without the length parameter, since it is merely pointing to a point
@@ -1121,6 +1121,25 @@ char *pa_split_spaces(const char *c, const char **state) {
     return pa_xstrndup(current, l);
 }
 
+/* Similar to pa_split_spaces, except this returns a string in-place.
+   Returned string is generally not NULL-terminated.
+   See pa_split_in_place(). */
+const char *pa_split_spaces_in_place(const char *c, int *n, const char **state) {
+    const char *current = *state ? *state : c;
+    size_t l;
+
+    if (!*current || *c == 0)
+        return NULL;
+
+    current += strspn(current, WHITESPACE);
+    l = strcspn(current, WHITESPACE);
+
+    *state = current+l;
+
+    *n = l;
+    return current;
+}
+
 PA_STATIC_TLS_DECLARE(signame, pa_xfree);
 
 /* Return the name of an UNIX signal. Similar to Solaris sig2str() */
@@ -2981,15 +3000,15 @@ bool pa_in_system_mode(void) {
     return !!atoi(e);
 }
 
-/* Checks a whitespace-separated list of words in haystack for needle */
-bool pa_str_in_list_spaces(const char *haystack, const char *needle) {
+/* Checks a delimiters-separated list of words in haystack for needle */
+bool pa_str_in_list(const char *haystack, const char *delimiters, const char *needle) {
     char *s;
     const char *state = NULL;
 
     if (!haystack || !needle)
         return false;
 
-    while ((s = pa_split_spaces(haystack, &state))) {
+    while ((s = pa_split(haystack, delimiters, &state))) {
         if (pa_streq(needle, s)) {
             pa_xfree(s);
             return true;
@@ -3001,6 +3020,23 @@ bool pa_str_in_list_spaces(const char *haystack, const char *needle) {
     return false;
 }
 
+/* Checks a whitespace-separated list of words in haystack for needle */
+bool pa_str_in_list_spaces(const char *haystack, const char *needle) {
+    const char *s;
+    int n;
+    const char *state = NULL;
+
+    if (!haystack || !needle)
+        return false;
+
+    while ((s = pa_split_spaces_in_place(haystack, &n, &state))) {
+        if (pa_strneq(needle, s, n))
+            return true;
+    }
+
+    return false;
+}
+
 char *pa_get_user_name_malloc(void) {
     ssize_t k;
     char *u;
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index ede1ae2..e28b6aa 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -109,9 +109,10 @@ static inline const char *pa_strna(const char *x) {
     return x ? x : "n/a";
 }
 
-char *pa_split(const char *c, const char*delimiters, const char **state);
-const char *pa_split_in_place(const char *c, const char*delimiters, int *n, const char **state);
+char *pa_split(const char *c, const char *delimiters, const char **state);
+const char *pa_split_in_place(const char *c, const char *delimiters, int *n, const char **state);
 char *pa_split_spaces(const char *c, const char **state);
+const char *pa_split_spaces_in_place(const char *c, int *n, const char **state);
 
 char *pa_strip_nl(char *s);
 char *pa_strip(char *s);
@@ -219,6 +220,7 @@ void pa_unset_env_recorded(void);
 bool pa_in_system_mode(void);
 
 #define pa_streq(a,b) (!strcmp((a),(b)))
+#define pa_strneq(a,b,n) (!strncmp((a),(b),(n)))
 
 /* Like pa_streq, but does not blow up on NULL pointers. */
 static inline bool pa_safe_streq(const char *a, const char *b) {
@@ -228,6 +230,7 @@ static inline bool pa_safe_streq(const char *a, const char *b) {
 }
 
 bool pa_str_in_list_spaces(const char *needle, const char *haystack);
+bool pa_str_in_list(const char *haystack, const char *delimiters, const char *needle);
 
 char *pa_get_host_name_malloc(void);
 char *pa_get_user_name_malloc(void);
diff --git a/src/pulsecore/core.c b/src/pulsecore/core.c
index 2a96dfa..e01677d 100644
--- a/src/pulsecore/core.c
+++ b/src/pulsecore/core.c
@@ -142,6 +142,7 @@ pa_core* pa_core_new(pa_mainloop_api *m, bool shared, bool enable_memfd, size_t
     c->realtime_scheduling = false;
     c->realtime_priority = 5;
     c->disable_remixing = false;
+    c->remixing_use_all_sink_channels = true;
     c->disable_lfe_remixing = true;
     c->lfe_crossover_freq = 0;
     c->deferred_volume = true;
@@ -213,6 +214,8 @@ static void core_free(pa_object *o) {
 
     pa_assert(!c->default_source);
     pa_assert(!c->default_sink);
+    pa_xfree(c->configured_default_source);
+    pa_xfree(c->configured_default_sink);
 
     pa_silence_cache_done(&c->silence_cache);
     pa_mempool_unref(c->mempool);
@@ -223,6 +226,200 @@ static void core_free(pa_object *o) {
     pa_xfree(c);
 }
 
+void pa_core_set_configured_default_sink(pa_core *core, const char *sink) {
+    char *old_sink;
+
+    pa_assert(core);
+
+    old_sink = pa_xstrdup(core->configured_default_sink);
+
+    if (pa_safe_streq(sink, old_sink))
+        goto finish;
+
+    pa_xfree(core->configured_default_sink);
+    core->configured_default_sink = pa_xstrdup(sink);
+    pa_log_info("configured_default_sink: %s -> %s",
+                old_sink ? old_sink : "(unset)", sink ? sink : "(unset)");
+
+    pa_core_update_default_sink(core);
+
+finish:
+    pa_xfree(old_sink);
+}
+
+void pa_core_set_configured_default_source(pa_core *core, const char *source) {
+    char *old_source;
+
+    pa_assert(core);
+
+    old_source = pa_xstrdup(core->configured_default_source);
+
+    if (pa_safe_streq(source, old_source))
+        goto finish;
+
+    pa_xfree(core->configured_default_source);
+    core->configured_default_source = pa_xstrdup(source);
+    pa_log_info("configured_default_source: %s -> %s",
+                old_source ? old_source : "(unset)", source ? source : "(unset)");
+
+    pa_core_update_default_source(core);
+
+finish:
+    pa_xfree(old_source);
+}
+
+/* a  < b  ->  return -1
+ * a == b  ->  return  0
+ * a  > b  ->  return  1 */
+static int compare_sinks(pa_sink *a, pa_sink *b) {
+    pa_core *core;
+
+    core = a->core;
+
+    /* Available sinks always beat unavailable sinks. */
+    if (a->active_port && a->active_port->available == PA_AVAILABLE_NO
+            && (!b->active_port || b->active_port->available != PA_AVAILABLE_NO))
+        return -1;
+    if (b->active_port && b->active_port->available == PA_AVAILABLE_NO
+            && (!a->active_port || a->active_port->available != PA_AVAILABLE_NO))
+        return 1;
+
+    /* The configured default sink is preferred over any other sink. */
+    if (pa_safe_streq(b->name, core->configured_default_sink))
+        return -1;
+    if (pa_safe_streq(a->name, core->configured_default_sink))
+        return 1;
+
+    if (a->priority < b->priority)
+        return -1;
+    if (a->priority > b->priority)
+        return 1;
+
+    /* It's hard to find any difference between these sinks, but maybe one of
+     * them is already the default sink? If so, it's best to keep it as the
+     * default to avoid changing the routing for no good reason. */
+    if (b == core->default_sink)
+        return -1;
+    if (a == core->default_sink)
+        return 1;
+
+    return 0;
+}
+
+void pa_core_update_default_sink(pa_core *core) {
+    pa_sink *best = NULL;
+    pa_sink *sink;
+    uint32_t idx;
+    pa_sink *old_default_sink;
+
+    pa_assert(core);
+
+    PA_IDXSET_FOREACH(sink, core->sinks, idx) {
+        if (!best) {
+            best = sink;
+            continue;
+        }
+
+        if (compare_sinks(sink, best) > 0)
+            best = sink;
+    }
+
+    old_default_sink = core->default_sink;
+
+    if (best == old_default_sink)
+        return;
+
+    core->default_sink = best;
+    pa_log_info("default_sink: %s -> %s",
+                old_default_sink ? old_default_sink->name : "(unset)", best ? best->name : "(unset)");
+
+    /* If the default sink changed, it may be that the default source has to be
+     * changed too, because monitor sources are prioritized partly based on the
+     * priorities of the monitored sinks. */
+    pa_core_update_default_source(core);
+
+    pa_subscription_post(core, PA_SUBSCRIPTION_EVENT_SERVER | PA_SUBSCRIPTION_EVENT_CHANGE, PA_INVALID_INDEX);
+    pa_hook_fire(&core->hooks[PA_CORE_HOOK_DEFAULT_SINK_CHANGED], core->default_sink);
+}
+
+/* a  < b  ->  return -1
+ * a == b  ->  return  0
+ * a  > b  ->  return  1 */
+static int compare_sources(pa_source *a, pa_source *b) {
+    pa_core *core;
+
+    core = a->core;
+
+    /* Available sources always beat unavailable sources. */
+    if (a->active_port && a->active_port->available == PA_AVAILABLE_NO
+            && (!b->active_port || b->active_port->available != PA_AVAILABLE_NO))
+        return -1;
+    if (b->active_port && b->active_port->available == PA_AVAILABLE_NO
+            && (!a->active_port || a->active_port->available != PA_AVAILABLE_NO))
+        return 1;
+
+    /* The configured default source is preferred over any other source. */
+    if (pa_safe_streq(b->name, core->configured_default_source))
+        return -1;
+    if (pa_safe_streq(a->name, core->configured_default_source))
+        return 1;
+
+    /* Monitor sources lose to non-monitor sources. */
+    if (a->monitor_of && !b->monitor_of)
+        return -1;
+    if (!a->monitor_of && b->monitor_of)
+        return 1;
+
+    if (a->priority < b->priority)
+        return -1;
+    if (a->priority > b->priority)
+        return 1;
+
+    /* If the sources are monitors, we can compare the monitored sinks. */
+    if (a->monitor_of)
+        return compare_sinks(a->monitor_of, b->monitor_of);
+
+    /* It's hard to find any difference between these sources, but maybe one of
+     * them is already the default source? If so, it's best to keep it as the
+     * default to avoid changing the routing for no good reason. */
+    if (b == core->default_source)
+        return -1;
+    if (a == core->default_source)
+        return 1;
+
+    return 0;
+}
+
+void pa_core_update_default_source(pa_core *core) {
+    pa_source *best = NULL;
+    pa_source *source;
+    uint32_t idx;
+    pa_source *old_default_source;
+
+    pa_assert(core);
+
+    PA_IDXSET_FOREACH(source, core->sources, idx) {
+        if (!best) {
+            best = source;
+            continue;
+        }
+
+        if (compare_sources(source, best) > 0)
+            best = source;
+    }
+
+    old_default_source = core->default_source;
+
+    if (best == old_default_source)
+        return;
+
+    core->default_source = best;
+    pa_log_info("default_source: %s -> %s",
+                old_default_source ? old_default_source->name : "(unset)", best ? best->name : "(unset)");
+    pa_subscription_post(core, PA_SUBSCRIPTION_EVENT_SERVER | PA_SUBSCRIPTION_EVENT_CHANGE, PA_INVALID_INDEX);
+    pa_hook_fire(&core->hooks[PA_CORE_HOOK_DEFAULT_SOURCE_CHANGED], core->default_source);
+}
+
 static void exit_callback(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) {
     pa_core *c = userdata;
     pa_assert(c->exit_event == e);
diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
index 802111b..79a095d 100644
--- a/src/pulsecore/core.h
+++ b/src/pulsecore/core.h
@@ -75,6 +75,7 @@ typedef enum pa_core_hook {
     PA_CORE_HOOK_SINK_FLAGS_CHANGED,
     PA_CORE_HOOK_SINK_VOLUME_CHANGED,
     PA_CORE_HOOK_SINK_MUTE_CHANGED,
+    PA_CORE_HOOK_SINK_PORT_LATENCY_OFFSET_CHANGED,
     PA_CORE_HOOK_SOURCE_NEW,
     PA_CORE_HOOK_SOURCE_FIXATE,
     PA_CORE_HOOK_SOURCE_PUT,
@@ -86,6 +87,7 @@ typedef enum pa_core_hook {
     PA_CORE_HOOK_SOURCE_FLAGS_CHANGED,
     PA_CORE_HOOK_SOURCE_VOLUME_CHANGED,
     PA_CORE_HOOK_SOURCE_MUTE_CHANGED,
+    PA_CORE_HOOK_SOURCE_PORT_LATENCY_OFFSET_CHANGED,
     PA_CORE_HOOK_SINK_INPUT_NEW,
     PA_CORE_HOOK_SINK_INPUT_FIXATE,
     PA_CORE_HOOK_SINK_INPUT_PUT,
@@ -160,9 +162,21 @@ struct pa_core {
     /* Some hashmaps for all sorts of entities */
     pa_hashmap *namereg, *shared;
 
-    /* The default sink/source */
-    pa_source *default_source;
+    /* The default sink/source as configured by the user. If the user hasn't
+     * explicitly configured anything, these are set to NULL. These are strings
+     * instead of sink/source pointers, because that allows us to reference
+     * devices that don't currently exist. That's useful for remembering that
+     * a hotplugged USB sink was previously set as the default sink. */
+    char *configured_default_sink;
+    char *configured_default_source;
+
+    /* The effective default sink/source. If no sink or source is explicitly
+     * configured as the default, we pick the device that ranks highest
+     * according to the compare_sinks() and compare_sources() functions in
+     * core.c. pa_core_update_default_sink/source() has to be called whenever
+     * anything changes that might change the comparison results. */
     pa_sink *default_sink;
+    pa_source *default_source;
 
     pa_channel_map default_channel_map;
     pa_sample_spec default_sample_spec;
@@ -199,7 +213,9 @@ struct pa_core {
     bool disallow_exit:1;
     bool running_as_daemon:1;
     bool realtime_scheduling:1;
+    bool avoid_resampling:1;
     bool disable_remixing:1;
+    bool remixing_use_all_sink_channels:1;
     bool disable_lfe_remixing:1;
     bool deferred_volume:1;
 
@@ -223,6 +239,21 @@ enum {
 
 pa_core* pa_core_new(pa_mainloop_api *m, bool shared, bool enable_memfd, size_t shm_size);
 
+void pa_core_set_configured_default_sink(pa_core *core, const char *sink);
+void pa_core_set_configured_default_source(pa_core *core, const char *source);
+
+/* These should be called whenever something changes that may affect the
+ * default sink or source choice.
+ *
+ * If the default source choice happens between two monitor sources, the
+ * monitored sinks are compared, so if the default sink changes, the default
+ * source may change too. However, pa_core_update_default_sink() calls
+ * pa_core_update_default_source() internally, so it's sufficient to only call
+ * pa_core_update_default_sink() when something happens that affects the sink
+ * ordering. */
+void pa_core_update_default_sink(pa_core *core);
+void pa_core_update_default_source(pa_core *core);
+
 /* Check whether no one is connected to this core */
 void pa_core_check_idle(pa_core *c);
 
diff --git a/src/pulsecore/dbus-shared.c b/src/pulsecore/dbus-shared.c
index 935b068..3422c29 100644
--- a/src/pulsecore/dbus-shared.c
+++ b/src/pulsecore/dbus-shared.c
@@ -45,7 +45,7 @@ static pa_dbus_connection* dbus_connection_new(pa_core *c, pa_dbus_wrap_connecti
     pconn->property_name = name;
     pconn->connection = conn;
 
-    pa_shared_set(c, name, pconn);
+    pa_assert_se(pa_shared_set(c, name, pconn) >= 0);
 
     return pconn;
 }
@@ -88,7 +88,7 @@ void pa_dbus_connection_unref(pa_dbus_connection *c) {
 
     pa_dbus_wrap_connection_free(c->connection);
 
-    pa_shared_remove(c->core, c->property_name);
+    pa_assert_se(pa_shared_remove(c->core, c->property_name) >= 0);
     pa_xfree(c);
 }
 
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index d786af4..80e2866 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -100,7 +100,7 @@ static void handle_io_event(pa_mainloop_api *ea, pa_io_event *e, int fd, pa_io_e
     unsigned int flags = 0;
     DBusWatch *watch = userdata;
 
-#if HAVE_DBUS_WATCH_GET_UNIX_FD
+#ifdef HAVE_DBUS_WATCH_GET_UNIX_FD
     pa_assert(fd == dbus_watch_get_unix_fd(watch));
 #else
     pa_assert(fd == dbus_watch_get_fd(watch));
@@ -153,7 +153,7 @@ static dbus_bool_t add_watch(DBusWatch *watch, void *data) {
 
     ev = c->mainloop->io_new(
             c->mainloop,
-#if HAVE_DBUS_WATCH_GET_UNIX_FD
+#ifdef HAVE_DBUS_WATCH_GET_UNIX_FD
             dbus_watch_get_unix_fd(watch),
 #else
             dbus_watch_get_fd(watch),
diff --git a/src/pulsecore/device-port.c b/src/pulsecore/device-port.c
index 7c9ddf3..76a7e80 100644
--- a/src/pulsecore/device-port.c
+++ b/src/pulsecore/device-port.c
@@ -93,6 +93,14 @@ void pa_device_port_set_available(pa_device_port *p, pa_available_t status) {
      * be created before port objects, and then p->card could be non-NULL for
      * the whole lifecycle of pa_device_port. */
     if (p->card) {
+        /* A sink or source whose active port is unavailable can't be the
+         * default sink/source, so port availability changes may affect the
+         * default sink/source choice. */
+        if (p->direction == PA_DIRECTION_OUTPUT)
+            pa_core_update_default_sink(p->core);
+        else
+            pa_core_update_default_source(p->core);
+
         pa_subscription_post(p->core, PA_SUBSCRIPTION_EVENT_CARD|PA_SUBSCRIPTION_EVENT_CHANGE, p->card->index);
         pa_hook_fire(&p->core->hooks[PA_CORE_HOOK_PORT_AVAILABLE_CHANGED], p);
     }
diff --git a/src/pulsecore/iochannel.c b/src/pulsecore/iochannel.c
index 8ace297..8973375 100644
--- a/src/pulsecore/iochannel.c
+++ b/src/pulsecore/iochannel.c
@@ -355,7 +355,7 @@ ssize_t pa_iochannel_write_with_fds(pa_iochannel*io, const void*data, size_t l,
     struct iovec iov;
     union {
         struct cmsghdr hdr;
-        uint8_t data[CMSG_SPACE(sizeof(int) * nfd)];
+        uint8_t data[CMSG_SPACE(sizeof(int) * MAX_ANCIL_DATA_FDS)];
     } cmsg;
 
     pa_assert(io);
@@ -382,7 +382,13 @@ ssize_t pa_iochannel_write_with_fds(pa_iochannel*io, const void*data, size_t l,
     mh.msg_iov = &iov;
     mh.msg_iovlen = 1;
     mh.msg_control = &cmsg;
-    mh.msg_controllen = sizeof(cmsg);
+
+    /* If we followed the example on the cmsg man page, we'd use
+     * sizeof(cmsg.data) here, but if nfd < MAX_ANCIL_DATA_FDS, then the data
+     * buffer is larger than needed, and the kernel doesn't like it if we set
+     * msg_controllen to a larger than necessary value. The commit message for
+     * commit 451d1d6762 contains a longer explanation. */
+    mh.msg_controllen = CMSG_SPACE(sizeof(int) * nfd);
 
     if ((r = sendmsg(io->ofd, &mh, MSG_NOSIGNAL)) >= 0) {
         io->writable = io->hungup = false;
diff --git a/src/pulsecore/macro.h b/src/pulsecore/macro.h
index 2c5d5f2..dbce5cd 100644
--- a/src/pulsecore/macro.h
+++ b/src/pulsecore/macro.h
@@ -186,6 +186,7 @@ static inline size_t PA_ALIGN(size_t l) {
 
 /* pa_assert_se() is an assert which guarantees side effects of x,
  * i.e. is never optimized away, regardless of NDEBUG or FASTPATH. */
+#ifndef __COVERITY__
 #define pa_assert_se(expr)                                              \
     do {                                                                \
         if (PA_UNLIKELY(!(expr))) {                                     \
@@ -193,6 +194,14 @@ static inline size_t PA_ALIGN(size_t l) {
             abort();                                                    \
         }                                                               \
     } while (false)
+#else
+#define pa_assert_se(expr)                                              \
+    do {                                                                \
+        int _unique_var = (expr);                                       \
+        if (!_unique_var)                                               \
+            abort();                                                    \
+    } while (false)
+#endif
 
 /* Does exactly nothing */
 #define pa_nop() do {} while (false)
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index dbad32a..fb83dac 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -497,7 +497,7 @@ bool pa_memblock_is_read_only(pa_memblock *b) {
     pa_assert(b);
     pa_assert(PA_REFCNT_VALUE(b) > 0);
 
-    return b->read_only && PA_REFCNT_VALUE(b) == 1;
+    return b->read_only || PA_REFCNT_VALUE(b) > 1;
 }
 
 /* No lock necessary */
diff --git a/src/pulsecore/namereg.c b/src/pulsecore/namereg.c
index 47bfc08..0b73885 100644
--- a/src/pulsecore/namereg.c
+++ b/src/pulsecore/namereg.c
@@ -168,17 +168,6 @@ const char *pa_namereg_register(pa_core *c, const char *name, pa_namereg_type_t
 
     pa_assert_se(pa_hashmap_put(c->namereg, e->name, e) >= 0);
 
-    /* If a sink or source is registered and there was none registered
-     * before we inform the clients which then can ask for the default
-     * sink/source which is then assigned. We don't adjust the default
-     * sink/source here right away to give the module the chance to
-     * register more sinks/sources before we choose a new default
-     * sink/source. */
-
-    if ((!c->default_sink && type == PA_NAMEREG_SINK) ||
-        (!c->default_source && type == PA_NAMEREG_SOURCE))
-        pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SERVER|PA_SUBSCRIPTION_EVENT_CHANGE, PA_INVALID_INDEX);
-
     return e->name;
 }
 
@@ -189,12 +178,6 @@ void pa_namereg_unregister(pa_core *c, const char *name) {
     pa_assert(name);
 
     pa_assert_se(e = pa_hashmap_remove(c->namereg, name));
-
-    if (c->default_sink == e->data)
-        pa_namereg_set_default_sink(c, NULL);
-    else if (c->default_source == e->data)
-        pa_namereg_set_default_source(c, NULL);
-
     pa_xfree(e->name);
     pa_xfree(e);
 }
@@ -205,22 +188,16 @@ void* pa_namereg_get(pa_core *c, const char *name, pa_namereg_type_t type) {
     pa_assert(c);
 
     if (type == PA_NAMEREG_SOURCE && (!name || pa_streq(name, "@DEFAULT_SOURCE@"))) {
-        pa_source *s;
-
-        if ((s = pa_namereg_get_default_source(c)))
-            return s;
+        return c->default_source;
 
     } else if (type == PA_NAMEREG_SINK && (!name || pa_streq(name, "@DEFAULT_SINK@"))) {
-        pa_sink *s;
-
-        if ((s = pa_namereg_get_default_sink(c)))
-            return s;
+        return c->default_sink;
 
     } else if (type == PA_NAMEREG_SOURCE && name && pa_streq(name, "@DEFAULT_MONITOR@")) {
-        pa_sink *s;
-
-        if ((s = pa_namereg_get(c, NULL, PA_NAMEREG_SINK)))
-            return s->monitor_source;
+        if (c->default_sink)
+            return c->default_sink->monitor_source;
+        else
+            return NULL;
     }
 
     if (!name)
@@ -248,83 +225,3 @@ void* pa_namereg_get(pa_core *c, const char *name, pa_namereg_type_t type) {
 
     return NULL;
 }
-
-pa_sink* pa_namereg_set_default_sink(pa_core*c, pa_sink *s) {
-    pa_assert(c);
-
-    if (s && !PA_SINK_IS_LINKED(pa_sink_get_state(s)))
-        return NULL;
-
-    if (c->default_sink != s) {
-        c->default_sink = s;
-        pa_hook_fire(&c->hooks[PA_CORE_HOOK_DEFAULT_SINK_CHANGED], c->default_sink);
-        pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SERVER|PA_SUBSCRIPTION_EVENT_CHANGE, PA_INVALID_INDEX);
-    }
-
-    return s;
-}
-
-pa_source* pa_namereg_set_default_source(pa_core*c, pa_source *s) {
-    pa_assert(c);
-
-    if (s && !PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
-        return NULL;
-
-    if (c->default_source != s) {
-        c->default_source = s;
-        pa_hook_fire(&c->hooks[PA_CORE_HOOK_DEFAULT_SOURCE_CHANGED], c->default_source);
-        pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SERVER|PA_SUBSCRIPTION_EVENT_CHANGE, PA_INVALID_INDEX);
-    }
-
-    return s;
-}
-
-pa_sink *pa_namereg_get_default_sink(pa_core *c) {
-    pa_sink *s, *best = NULL;
-    uint32_t idx;
-
-    pa_assert(c);
-
-    if (c->default_sink && PA_SINK_IS_LINKED(pa_sink_get_state(c->default_sink)))
-        return c->default_sink;
-
-    PA_IDXSET_FOREACH(s, c->sinks, idx)
-        if (PA_SINK_IS_LINKED(pa_sink_get_state(s)))
-            if (!best || s->priority > best->priority)
-                best = s;
-
-    return best;
-}
-
-pa_source *pa_namereg_get_default_source(pa_core *c) {
-    pa_source *s, *best = NULL;
-    uint32_t idx;
-
-    pa_assert(c);
-
-    if (c->default_source && PA_SOURCE_IS_LINKED(pa_source_get_state(c->default_source)))
-        return c->default_source;
-
-    /* First, try to find one that isn't a monitor */
-    PA_IDXSET_FOREACH(s, c->sources, idx)
-        if (!s->monitor_of && PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
-            if (!best ||
-                s->priority > best->priority)
-                best = s;
-
-    if (best)
-        return best;
-
-    /* Then, fallback to a monitor */
-    PA_IDXSET_FOREACH(s, c->sources, idx)
-        if (PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
-            if (!best ||
-                s->priority > best->priority ||
-                (s->priority == best->priority &&
-                 s->monitor_of &&
-                 best->monitor_of &&
-                 s->monitor_of->priority > best->monitor_of->priority))
-                best = s;
-
-    return best;
-}
diff --git a/src/pulsecore/namereg.h b/src/pulsecore/namereg.h
index 467db5d..eb3475a 100644
--- a/src/pulsecore/namereg.h
+++ b/src/pulsecore/namereg.h
@@ -36,12 +36,6 @@ const char *pa_namereg_register(pa_core *c, const char *name, pa_namereg_type_t
 void pa_namereg_unregister(pa_core *c, const char *name);
 void* pa_namereg_get(pa_core *c, const char *name, pa_namereg_type_t type);
 
-pa_sink* pa_namereg_set_default_sink(pa_core*c, pa_sink *s);
-pa_source* pa_namereg_set_default_source(pa_core*c, pa_source *s);
-
-pa_sink *pa_namereg_get_default_sink(pa_core *c);
-pa_source *pa_namereg_get_default_source(pa_core *c);
-
 bool pa_namereg_is_valid_name(const char *name);
 bool pa_namereg_is_valid_name_or_wildcard(const char *name, pa_namereg_type_t type);
 char* pa_namereg_make_valid_name(const char *name);
diff --git a/src/pulsecore/parseaddr.c b/src/pulsecore/parseaddr.c
index 7f72e79..b909f52 100644
--- a/src/pulsecore/parseaddr.c
+++ b/src/pulsecore/parseaddr.c
@@ -143,3 +143,14 @@ bool pa_is_ip_address(const char *a) {
 
     return false;
 }
+
+bool pa_is_ip6_address(const char *a) {
+    char buf[INET6_ADDRSTRLEN];
+
+    pa_assert(a);
+
+    if (inet_pton(AF_INET6, a, buf) >= 1)
+        return true;
+
+    return false;
+}
diff --git a/src/pulsecore/parseaddr.h b/src/pulsecore/parseaddr.h
index 5d2c358..6bb4d85 100644
--- a/src/pulsecore/parseaddr.h
+++ b/src/pulsecore/parseaddr.h
@@ -41,4 +41,6 @@ int pa_parse_address(const char *a, pa_parsed_address *ret_p);
 
 bool pa_is_ip_address(const char *a);
 
+bool pa_is_ip6_address(const char *a);
+
 #endif
diff --git a/src/pulsecore/play-memblockq.c b/src/pulsecore/play-memblockq.c
index e087047..c86bd15 100644
--- a/src/pulsecore/play-memblockq.c
+++ b/src/pulsecore/play-memblockq.c
@@ -102,7 +102,7 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
     /* If we are added for the first time, ask for a rewinding so that
      * we are heard right-away. */
     if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT)
+        i->thread_info.state == PA_SINK_INPUT_INIT && i->sink)
         pa_sink_input_request_rewind(i, 0, false, true, true);
 }
 
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 13f4f62..866e2c6 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1417,7 +1417,7 @@ static int sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int
             s->read_index = pa_memblockq_get_read_index(s->memblockq);
             s->write_index = pa_memblockq_get_write_index(s->memblockq);
             s->render_memblockq_length = pa_memblockq_get_length(s->sink_input->thread_info.render_memblockq);
-            s->current_sink_latency = pa_sink_get_latency_within_thread(s->sink_input->sink);
+            s->current_sink_latency = pa_sink_get_latency_within_thread(s->sink_input->sink, false);
             s->underrun_for = s->sink_input->thread_info.underrun_for;
             s->playing_for = s->sink_input->thread_info.playing_for;
 
@@ -1686,8 +1686,8 @@ static int source_output_process_msg(pa_msgobject *_o, int code, void *userdata,
     switch (code) {
         case SOURCE_OUTPUT_MESSAGE_UPDATE_LATENCY:
             /* Atomically get a snapshot of all timing parameters... */
-            s->current_monitor_latency = o->source->monitor_of ? pa_sink_get_latency_within_thread(o->source->monitor_of) : 0;
-            s->current_source_latency = pa_source_get_latency_within_thread(o->source);
+            s->current_monitor_latency = o->source->monitor_of ? pa_sink_get_latency_within_thread(o->source->monitor_of, false) : 0;
+            s->current_source_latency = pa_source_get_latency_within_thread(o->source, false);
             s->on_the_fly_snapshot = pa_atomic_load(&s->on_the_fly);
             return 0;
     }
@@ -2922,7 +2922,7 @@ static void command_get_record_latency(pa_pdispatch *pd, uint32_t command, uint3
     pa_tagstruct_put_usec(reply, s->current_monitor_latency);
     pa_tagstruct_put_usec(reply,
                           s->current_source_latency +
-                          pa_bytes_to_usec(s->on_the_fly_snapshot, &s->source_output->source->sample_spec));
+                          pa_bytes_to_usec(s->on_the_fly_snapshot, &s->source_output->sample_spec));
     pa_tagstruct_put_boolean(reply,
                              pa_source_get_state(s->source_output->source) == PA_SOURCE_RUNNING &&
                              pa_source_output_get_state(s->source_output) == PA_SOURCE_OUTPUT_RUNNING);
@@ -3637,10 +3637,9 @@ static void command_get_info_list(pa_pdispatch *pd, uint32_t command, uint32_t t
 static void command_get_server_info(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
     pa_native_connection *c = PA_NATIVE_CONNECTION(userdata);
     pa_tagstruct *reply;
-    pa_sink *def_sink;
-    pa_source *def_source;
     pa_sample_spec fixed_ss;
     char *h, *u;
+    pa_core *core;
 
     pa_native_connection_assert_ref(c);
     pa_assert(t);
@@ -3664,18 +3663,18 @@ static void command_get_server_info(pa_pdispatch *pd, uint32_t command, uint32_t
     pa_tagstruct_puts(reply, h);
     pa_xfree(h);
 
-    fixup_sample_spec(c, &fixed_ss, &c->protocol->core->default_sample_spec);
+    core = c->protocol->core;
+
+    fixup_sample_spec(c, &fixed_ss, &core->default_sample_spec);
     pa_tagstruct_put_sample_spec(reply, &fixed_ss);
 
-    def_sink = pa_namereg_get_default_sink(c->protocol->core);
-    pa_tagstruct_puts(reply, def_sink ? def_sink->name : NULL);
-    def_source = pa_namereg_get_default_source(c->protocol->core);
-    pa_tagstruct_puts(reply, def_source ? def_source->name : NULL);
+    pa_tagstruct_puts(reply, core->default_sink ? core->default_sink->name : NULL);
+    pa_tagstruct_puts(reply, core->default_source ? core->default_source->name : NULL);
 
     pa_tagstruct_putu32(reply, c->protocol->core->cookie);
 
     if (c->version >= 15)
-        pa_tagstruct_put_channel_map(reply, &c->protocol->core->default_channel_map);
+        pa_tagstruct_put_channel_map(reply, &core->default_channel_map);
 
     pa_pstream_send_tagstruct(c->pstream, reply);
 }
@@ -4347,7 +4346,7 @@ static void command_set_default_sink_or_source(pa_pdispatch *pd, uint32_t comman
         source = pa_namereg_get(c->protocol->core, s, PA_NAMEREG_SOURCE);
         CHECK_VALIDITY(c->pstream, source, tag, PA_ERR_NOENTITY);
 
-        pa_namereg_set_default_source(c->protocol->core, source);
+        pa_core_set_configured_default_source(c->protocol->core, source->name);
     } else {
         pa_sink *sink;
         pa_assert(command == PA_COMMAND_SET_DEFAULT_SINK);
@@ -4355,7 +4354,7 @@ static void command_set_default_sink_or_source(pa_pdispatch *pd, uint32_t comman
         sink = pa_namereg_get(c->protocol->core, s, PA_NAMEREG_SINK);
         CHECK_VALIDITY(c->pstream, sink, tag, PA_ERR_NOENTITY);
 
-        pa_namereg_set_default_sink(c->protocol->core, sink);
+        pa_core_set_configured_default_sink(c->protocol->core, sink->name);
     }
 
     pa_pstream_send_simple_ack(c->pstream, tag);
@@ -4721,6 +4720,11 @@ static void command_set_card_profile(pa_pdispatch *pd, uint32_t command, uint32_
 
     CHECK_VALIDITY(c->pstream, profile, tag, PA_ERR_NOENTITY);
 
+    pa_log_info("Application \"%s\" requests card profile change. card = %s, profile = %s",
+                pa_strnull(pa_proplist_gets(c->client->proplist, PA_PROP_APPLICATION_NAME)),
+                card->name,
+                profile->name);
+
     if ((ret = pa_card_set_profile(card, profile, true)) < 0) {
         pa_pstream_send_error(c->pstream, tag, -ret);
         return;
diff --git a/src/pulsecore/resampler.c b/src/pulsecore/resampler.c
index ea22cd2..063c4c5 100644
--- a/src/pulsecore/resampler.c
+++ b/src/pulsecore/resampler.c
@@ -796,6 +796,64 @@ static int front_rear_side(pa_channel_position_t p) {
     return ON_OTHER;
 }
 
+/* Fill a map of which output channels should get mono from input, not including
+ * LFE output channels. (The LFE output channels are mapped separately.)
+ */
+static void setup_oc_mono_map(const pa_resampler *r, float *oc_mono_map) {
+    unsigned oc;
+    unsigned n_oc;
+    bool found_oc_for_mono = false;
+
+    pa_assert(r);
+    pa_assert(oc_mono_map);
+
+    n_oc = r->o_ss.channels;
+
+    if (!(r->flags & PA_RESAMPLER_NO_FILL_SINK)) {
+        /* Mono goes to all non-LFE output channels and we're done. */
+        for (oc = 0; oc < n_oc; oc++)
+            oc_mono_map[oc] = on_lfe(r->o_cm.map[oc]) ? 0.0f : 1.0f;
+        return;
+    } else {
+        /* Initialize to all zero so we can select individual channels below. */
+        for (oc = 0; oc < n_oc; oc++)
+            oc_mono_map[oc] = 0.0f;
+    }
+
+    for (oc = 0; oc < n_oc; oc++) {
+        if (r->o_cm.map[oc] == PA_CHANNEL_POSITION_MONO) {
+            oc_mono_map[oc] = 1.0f;
+            found_oc_for_mono = true;
+        }
+    }
+    if (found_oc_for_mono)
+        return;
+
+    for (oc = 0; oc < n_oc; oc++) {
+        if (r->o_cm.map[oc] == PA_CHANNEL_POSITION_FRONT_CENTER) {
+            oc_mono_map[oc] = 1.0f;
+            found_oc_for_mono = true;
+        }
+    }
+    if (found_oc_for_mono)
+        return;
+
+    for (oc = 0; oc < n_oc; oc++) {
+        if (r->o_cm.map[oc] == PA_CHANNEL_POSITION_FRONT_LEFT || r->o_cm.map[oc] == PA_CHANNEL_POSITION_FRONT_RIGHT) {
+            oc_mono_map[oc] = 1.0f;
+            found_oc_for_mono = true;
+        }
+    }
+    if (found_oc_for_mono)
+        return;
+
+    /* Give up on finding a suitable map for mono, and just send it to all
+     * non-LFE output channels.
+     */
+    for (oc = 0; oc < n_oc; oc++)
+        oc_mono_map[oc] = on_lfe(r->o_cm.map[oc]) ? 0.0f : 1.0f;
+}
+
 static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed) {
     unsigned oc, ic;
     unsigned n_oc, n_ic;
@@ -858,14 +916,14 @@ static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed)
          * 1) Connect all channels with matching names.
          *
          * 2) Mono Handling:
-         *    S:Mono: Copy into all D:channels
+         *    S:Mono: See setup_oc_mono_map().
          *    D:Mono: Avg all S:channels
          *
-         * 3) Mix D:Left, D:Right:
+         * 3) Mix D:Left, D:Right (if PA_RESAMPLER_NO_FILL_SINK is clear):
          *    D:Left: If not connected, avg all S:Left
          *    D:Right: If not connected, avg all S:Right
          *
-         * 4) Mix D:Center
+         * 4) Mix D:Center (if PA_RESAMPLER_NO_FILL_SINK is clear):
          *    If not connected, avg all S:Center
          *    If still not connected, avg all S:Left, S:Right
          *
@@ -908,6 +966,7 @@ static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed)
             ic_unconnected_center = 0,
             ic_unconnected_lfe = 0;
         bool ic_unconnected_center_mixed_in = 0;
+        float oc_mono_map[PA_CHANNELS_MAX];
 
         for (ic = 0; ic < n_ic; ic++) {
             if (on_left(r->i_cm.map[ic]))
@@ -918,6 +977,8 @@ static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed)
                 ic_center++;
         }
 
+        setup_oc_mono_map(r, oc_mono_map);
+
         for (oc = 0; oc < n_oc; oc++) {
             bool oc_connected = false;
             pa_channel_position_t b = r->o_cm.map[oc];
@@ -925,14 +986,17 @@ static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed)
             for (ic = 0; ic < n_ic; ic++) {
                 pa_channel_position_t a = r->i_cm.map[ic];
 
-                if (a == b || a == PA_CHANNEL_POSITION_MONO) {
+                if (a == b) {
                     m->map_table_f[oc][ic] = 1.0f;
 
                     oc_connected = true;
                     ic_connected[ic] = true;
+                }
+                else if (a == PA_CHANNEL_POSITION_MONO && oc_mono_map[oc] > 0.0f) {
+                    m->map_table_f[oc][ic] = oc_mono_map[oc];
 
-                    if (a == PA_CHANNEL_POSITION_MONO && on_lfe(b) && !(r->flags & PA_RESAMPLER_NO_LFE))
-                        *lfe_remixed = true;
+                    oc_connected = true;
+                    ic_connected[ic] = true;
                 }
                 else if (b == PA_CHANNEL_POSITION_MONO) {
                     m->map_table_f[oc][ic] = 1.0f / (float) n_ic;
@@ -945,7 +1009,7 @@ static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed)
             if (!oc_connected) {
                 /* Try to find matching input ports for this output port */
 
-                if (on_left(b)) {
+                if (on_left(b) && !(r->flags & PA_RESAMPLER_NO_FILL_SINK)) {
 
                     /* We are not connected and on the left side, let's
                      * average all left side input channels. */
@@ -960,7 +1024,7 @@ static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed)
                     /* We ignore the case where there is no left input channel.
                      * Something is really wrong in this case anyway. */
 
-                } else if (on_right(b)) {
+                } else if (on_right(b) && !(r->flags & PA_RESAMPLER_NO_FILL_SINK)) {
 
                     /* We are not connected and on the right side, let's
                      * average all right side input channels. */
@@ -976,7 +1040,7 @@ static void setup_remap(const pa_resampler *r, pa_remap_t *m, bool *lfe_remixed)
                      * channel. Something is really wrong in this case anyway.
                      * */
 
-                } else if (on_center(b)) {
+                } else if (on_center(b) && !(r->flags & PA_RESAMPLER_NO_FILL_SINK)) {
 
                     if (ic_center > 0) {
 
diff --git a/src/pulsecore/resampler.h b/src/pulsecore/resampler.h
index 4469022..5d3171f 100644
--- a/src/pulsecore/resampler.h
+++ b/src/pulsecore/resampler.h
@@ -68,7 +68,8 @@ typedef enum pa_resample_flags {
     PA_RESAMPLER_VARIABLE_RATE = 0x0001U,
     PA_RESAMPLER_NO_REMAP      = 0x0002U,  /* implies NO_REMIX */
     PA_RESAMPLER_NO_REMIX      = 0x0004U,
-    PA_RESAMPLER_NO_LFE        = 0x0008U
+    PA_RESAMPLER_NO_LFE        = 0x0008U,
+    PA_RESAMPLER_NO_FILL_SINK  = 0x0010U,
 } pa_resample_flags_t;
 
 struct pa_resampler {
diff --git a/src/pulsecore/shared.c b/src/pulsecore/shared.c
index 1b5eea9..9bc7eb5 100644
--- a/src/pulsecore/shared.c
+++ b/src/pulsecore/shared.c
@@ -111,6 +111,6 @@ int pa_shared_replace(pa_core *c, const char *name, void *data) {
     pa_assert(c);
     pa_assert(name);
 
-    pa_shared_remove(c, name);
+    (void) pa_shared_remove(c, name);
     return pa_shared_set(c, name, data);
 }
diff --git a/src/pulsecore/shared.h b/src/pulsecore/shared.h
index 49e8738..19ac462 100644
--- a/src/pulsecore/shared.h
+++ b/src/pulsecore/shared.h
@@ -44,7 +44,9 @@ int pa_shared_set(pa_core *c, const char *name, void *data);
 /* Remove the specified shared property. Return non-zero on failure */
 int pa_shared_remove(pa_core *c, const char *name);
 
-/* A combination of pa_shared_remove() and pa_shared_set() */
+/* A combination of pa_shared_remove() and pa_shared_set(); this function
+ * first tries to remove the property by this name and then sets the
+ * property. Return non-zero on failure. */
 int pa_shared_replace(pa_core *c, const char *name, void *data);
 
 /* Dump the current set of shared properties */
diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c
index 919d71a..0742cb8 100644
--- a/src/pulsecore/shm.c
+++ b/src/pulsecore/shm.c
@@ -205,7 +205,7 @@ static int sharedmem_create(pa_shm *m, pa_mem_type_t type, size_t size, mode_t m
         pa_assert_se(pa_close(fd) == 0);
         m->fd = -1;
     }
-#if HAVE_MEMFD
+#ifdef HAVE_MEMFD
     else
         m->fd = fd;
 #endif
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index e9694f2..4155b69 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -456,6 +456,7 @@ int pa_sink_input_new(
                           ((data->flags & PA_SINK_INPUT_VARIABLE_RATE) ? PA_RESAMPLER_VARIABLE_RATE : 0) |
                           ((data->flags & PA_SINK_INPUT_NO_REMAP) ? PA_RESAMPLER_NO_REMAP : 0) |
                           (core->disable_remixing || (data->flags & PA_SINK_INPUT_NO_REMIX) ? PA_RESAMPLER_NO_REMIX : 0) |
+                          (core->remixing_use_all_sink_channels ? 0 : PA_RESAMPLER_NO_FILL_SINK) |
                           (core->disable_lfe_remixing ? PA_RESAMPLER_NO_LFE : 0)))) {
                 pa_log_warn("Unsupported resampling operation.");
                 return -PA_ERR_NOTSUPPORTED;
@@ -603,14 +604,26 @@ static void sink_input_set_state(pa_sink_input *i, pa_sink_input_state_t state)
     if (i->state == state)
         return;
 
-    if (i->state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING && pa_sink_used_by(i->sink) == 0 &&
-        !pa_sample_spec_equal(&i->sample_spec, &i->sink->sample_spec)) {
-        /* We were uncorked and the sink was not playing anything -- let's try
-         * to update the sample rate to avoid resampling */
-        pa_sink_update_rate(i->sink, i->sample_spec.rate, pa_sink_input_is_passthrough(i));
-    }
+    if (i->sink) {
+        if (i->state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING && pa_sink_used_by(i->sink) == 0 &&
+            !pa_sample_spec_equal(&i->sample_spec, &i->sink->sample_spec)) {
+            /* We were uncorked and the sink was not playing anything -- let's try
+             * to update the sample rate to avoid resampling */
+            pa_sink_update_rate(i->sink, i->sample_spec.rate, pa_sink_input_is_passthrough(i));
+        }
+
+        pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_STATE, PA_UINT_TO_PTR(state), 0, NULL) == 0);
+    } else {
+        /* If the sink is not valid, pa_sink_input_set_state_within_thread() must be called directly */
+
+        pa_sink_input_set_state_within_thread(i, state);
+
+        for (ssync = i->thread_info.sync_prev; ssync; ssync = ssync->thread_info.sync_prev)
+            pa_sink_input_set_state_within_thread(ssync, state);
 
-    pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_STATE, PA_UINT_TO_PTR(state), 0, NULL) == 0);
+        for (ssync = i->thread_info.sync_next; ssync; ssync = ssync->thread_info.sync_next)
+            pa_sink_input_set_state_within_thread(ssync, state);
+    }
 
     update_n_corked(i, state);
     i->state = state;
@@ -637,7 +650,8 @@ static void sink_input_set_state(pa_sink_input *i, pa_sink_input_state_t state)
             pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
     }
 
-    pa_sink_update_status(i->sink);
+    if (i->sink)
+        pa_sink_update_status(i->sink);
 }
 
 /* Called from main context */
@@ -1566,7 +1580,12 @@ int pa_sink_input_set_rate(pa_sink_input *i, uint32_t rate) {
 
     i->sample_spec.rate = rate;
 
-    pa_asyncmsgq_post(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_RATE, PA_UINT_TO_PTR(rate), 0, NULL, NULL);
+    if (i->sink)
+        pa_asyncmsgq_post(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_RATE, PA_UINT_TO_PTR(rate), 0, NULL, NULL);
+    else {
+        i->thread_info.sample_spec.rate = rate;
+        pa_resampler_set_input_rate(i->thread_info.resampler, rate);
+    }
 
     pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
     return 0;
@@ -1608,6 +1627,22 @@ static bool find_filter_sink_input(pa_sink_input *target, pa_sink *s) {
     return false;
 }
 
+static bool is_filter_sink_moving(pa_sink_input *i) {
+    pa_sink *sink = i->sink;
+
+    if (!sink)
+        return false;
+
+    while (sink->input_to_master) {
+        sink = sink->input_to_master->sink;
+
+        if (!sink)
+            return true;
+    }
+
+    return false;
+}
+
 /* Called from main context */
 bool pa_sink_input_may_move_to(pa_sink_input *i, pa_sink *dest) {
     pa_sink_input_assert_ref(i);
@@ -1630,6 +1665,16 @@ bool pa_sink_input_may_move_to(pa_sink_input *i, pa_sink *dest) {
         return false;
     }
 
+    /* If this sink input is connected to a filter sink that itself is moving,
+     * then don't allow the move. Moving requires sending a message to the IO
+     * thread of the old sink, and if the old sink is a filter sink that is
+     * moving, there's no IO thread associated to the old sink. */
+    if (is_filter_sink_moving(i)) {
+        pa_log_debug("Can't move input from filter sink %s, because the filter sink itself is currently moving.",
+                     i->sink->name);
+        return false;
+    }
+
     if (pa_idxset_size(dest->inputs) >= PA_MAX_INPUTS_PER_SINK) {
         pa_log_warn("Failed to move sink input: too many inputs per sink.");
         return false;
@@ -1951,12 +1996,11 @@ int pa_sink_input_move_to(pa_sink_input *i, pa_sink *dest, bool save) {
     return 0;
 }
 
-/* Called from IO thread context */
+/* Called from IO thread context except when cork() is called without a valid sink. */
 void pa_sink_input_set_state_within_thread(pa_sink_input *i, pa_sink_input_state_t state) {
     bool corking, uncorking;
 
     pa_sink_input_assert_ref(i);
-    pa_sink_input_assert_io_context(i);
 
     if (state == i->thread_info.state)
         return;
@@ -1977,7 +2021,8 @@ void pa_sink_input_set_state_within_thread(pa_sink_input *i, pa_sink_input_state
 
         /* This will tell the implementing sink input driver to rewind
          * so that the unplayed already mixed data is not lost */
-        pa_sink_input_request_rewind(i, 0, true, true, false);
+        if (i->sink)
+            pa_sink_input_request_rewind(i, 0, true, true, false);
 
         /* Set the corked state *after* requesting rewind */
         i->thread_info.state = state;
@@ -1995,7 +2040,8 @@ void pa_sink_input_set_state_within_thread(pa_sink_input *i, pa_sink_input_state
 
         /* OK, we're being uncorked. Make sure we're not rewound when
          * the hw buffer is remixed and request a remix. */
-        pa_sink_input_request_rewind(i, 0, false, true, true);
+        if (i->sink)
+            pa_sink_input_request_rewind(i, 0, false, true, true);
     } else
         /* We may not be corking or uncorking, but we still need to set the state. */
         i->thread_info.state = state;
@@ -2026,7 +2072,7 @@ int pa_sink_input_process_msg(pa_msgobject *o, int code, void *userdata, int64_t
             pa_usec_t *r = userdata;
 
             r[0] += pa_bytes_to_usec(pa_memblockq_get_length(i->thread_info.render_memblockq), &i->sink->sample_spec);
-            r[1] += pa_sink_get_latency_within_thread(i->sink);
+            r[1] += pa_sink_get_latency_within_thread(i->sink, false);
 
             return 0;
         }
@@ -2259,6 +2305,7 @@ int pa_sink_input_update_rate(pa_sink_input *i) {
                                      ((i->flags & PA_SINK_INPUT_VARIABLE_RATE) ? PA_RESAMPLER_VARIABLE_RATE : 0) |
                                      ((i->flags & PA_SINK_INPUT_NO_REMAP) ? PA_RESAMPLER_NO_REMAP : 0) |
                                      (i->core->disable_remixing || (i->flags & PA_SINK_INPUT_NO_REMIX) ? PA_RESAMPLER_NO_REMIX : 0) |
+                                     (i->core->remixing_use_all_sink_channels ? 0 : PA_RESAMPLER_NO_FILL_SINK) |
                                      (i->core->disable_lfe_remixing ? PA_RESAMPLER_NO_LFE : 0));
 
         if (!new_resampler) {
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index aa21822..a8b4cd3 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -342,7 +342,7 @@ pa_sink* pa_sink_new(
 
     PA_LLIST_HEAD_INIT(pa_sink_volume_change, s->thread_info.volume_changes);
     s->thread_info.volume_changes_tail = NULL;
-    pa_sw_cvolume_multiply(&s->thread_info.current_hw_volume, &s->soft_volume, &s->real_volume);
+    pa_sw_cvolume_divide(&s->thread_info.current_hw_volume, &s->real_volume, &s->soft_volume);
     s->thread_info.volume_change_safety_margin = core->deferred_volume_safety_margin_usec;
     s->thread_info.volume_change_extra_delay = core->deferred_volume_extra_delay_usec;
     s->thread_info.port_latency_offset = s->port_latency_offset;
@@ -639,7 +639,7 @@ void pa_sink_put(pa_sink* s) {
 
     s->thread_info.soft_volume = s->soft_volume;
     s->thread_info.soft_muted = s->muted;
-    pa_sw_cvolume_multiply(&s->thread_info.current_hw_volume, &s->soft_volume, &s->real_volume);
+    pa_sw_cvolume_divide(&s->thread_info.current_hw_volume, &s->real_volume, &s->soft_volume);
 
     pa_assert((s->flags & PA_SINK_HW_VOLUME_CTRL)
               || (s->base_volume == PA_VOLUME_NORM
@@ -662,6 +662,10 @@ void pa_sink_put(pa_sink* s) {
 
     pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SINK | PA_SUBSCRIPTION_EVENT_NEW, s->index);
     pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_PUT], s);
+
+    /* This function must be called after the PA_CORE_HOOK_SINK_PUT hook,
+     * because module-switch-on-connect needs to know the old default sink */
+    pa_core_update_default_sink(s->core);
 }
 
 /* Called from main context */
@@ -690,6 +694,8 @@ void pa_sink_unlink(pa_sink* s) {
         pa_namereg_unregister(s->core, s->name);
     pa_idxset_remove_by_data(s->core->sinks, s, NULL);
 
+    pa_core_update_default_sink(s->core);
+
     if (s->card)
         pa_idxset_remove_by_data(s->card->sinks, s, NULL);
 
@@ -1407,13 +1413,14 @@ void pa_sink_render_full(pa_sink *s, size_t length, pa_memchunk *result) {
 /* Called from main thread */
 int pa_sink_update_rate(pa_sink *s, uint32_t rate, bool passthrough) {
     int ret = -1;
-    uint32_t desired_rate = rate;
+    uint32_t desired_rate;
     uint32_t default_rate = s->default_sample_rate;
     uint32_t alternate_rate = s->alternate_sample_rate;
     uint32_t idx;
     pa_sink_input *i;
     bool default_rate_is_usable = false;
     bool alternate_rate_is_usable = false;
+    bool avoid_resampling = s->core->avoid_resampling;
 
     if (rate == s->sample_spec.rate)
         return 0;
@@ -1421,7 +1428,7 @@ int pa_sink_update_rate(pa_sink *s, uint32_t rate, bool passthrough) {
     if (!s->update_rate)
         return -1;
 
-    if (PA_UNLIKELY(default_rate == alternate_rate && !passthrough)) {
+    if (PA_UNLIKELY(default_rate == alternate_rate && !passthrough && !avoid_resampling)) {
         pa_log_debug("Default and alternate sample rates are the same, so there is no point in switching.");
         return -1;
     }
@@ -1439,17 +1446,30 @@ int pa_sink_update_rate(pa_sink *s, uint32_t rate, bool passthrough) {
         }
     }
 
-    if (PA_UNLIKELY(!pa_sample_rate_valid(desired_rate)))
+    if (PA_UNLIKELY(!pa_sample_rate_valid(rate)))
         return -1;
 
-    if (!passthrough && default_rate != desired_rate && alternate_rate != desired_rate) {
-        if (default_rate % 11025 == 0 && desired_rate % 11025 == 0)
+    if (passthrough) {
+        /* We have to try to use the sink input rate */
+        desired_rate = rate;
+
+    } else if (avoid_resampling && (rate >= default_rate || rate >= alternate_rate)) {
+        /* We just try to set the sink input's sample rate if it's not too low */
+        desired_rate = rate;
+
+    } else if (default_rate == rate || alternate_rate == rate) {
+        /* We can directly try to use this rate */
+        desired_rate = rate;
+
+    } else {
+        /* See if we can pick a rate that results in less resampling effort */
+        if (default_rate % 11025 == 0 && rate % 11025 == 0)
             default_rate_is_usable = true;
-        if (default_rate % 4000 == 0 && desired_rate % 4000 == 0)
+        if (default_rate % 4000 == 0 && rate % 4000 == 0)
             default_rate_is_usable = true;
-        if (alternate_rate && alternate_rate % 11025 == 0 && desired_rate % 11025 == 0)
+        if (alternate_rate && alternate_rate % 11025 == 0 && rate % 11025 == 0)
             alternate_rate_is_usable = true;
-        if (alternate_rate && alternate_rate % 4000 == 0 && desired_rate % 4000 == 0)
+        if (alternate_rate && alternate_rate % 4000 == 0 && rate % 4000 == 0)
             alternate_rate_is_usable = true;
 
         if (alternate_rate_is_usable && !default_rate_is_usable)
@@ -1488,7 +1508,7 @@ int pa_sink_update_rate(pa_sink *s, uint32_t rate, bool passthrough) {
 
 /* Called from main thread */
 pa_usec_t pa_sink_get_latency(pa_sink *s) {
-    pa_usec_t usec = 0;
+    int64_t usec = 0;
 
     pa_sink_assert_ref(s);
     pa_assert_ctl_context();
@@ -1504,19 +1524,19 @@ pa_usec_t pa_sink_get_latency(pa_sink *s) {
 
     pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) == 0);
 
-    /* usec is unsigned, so check that the offset can be added to usec without
+    /* the return value is unsigned, so check that the offset can be added to usec without
      * underflowing. */
-    if (-s->port_latency_offset <= (int64_t) usec)
+    if (-s->port_latency_offset <= usec)
         usec += s->port_latency_offset;
     else
         usec = 0;
 
-    return usec;
+    return (pa_usec_t)usec;
 }
 
 /* Called from IO thread */
-pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s) {
-    pa_usec_t usec = 0;
+int64_t pa_sink_get_latency_within_thread(pa_sink *s, bool allow_negative) {
+    int64_t usec = 0;
     pa_msgobject *o;
 
     pa_sink_assert_ref(s);
@@ -1535,14 +1555,11 @@ pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s) {
 
     /* FIXME: We probably should make this a proper vtable callback instead of going through process_msg() */
 
-    if (o->process_msg(o, PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
-        return -1;
+    o->process_msg(o, PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL);
 
-    /* usec is unsigned, so check that the offset can be added to usec without
-     * underflowing. */
-    if (-s->thread_info.port_latency_offset <= (int64_t) usec)
-        usec += s->thread_info.port_latency_offset;
-    else
+    /* If allow_negative is false, the call should only return positive values, */
+    usec += s->thread_info.port_latency_offset;
+    if (!allow_negative && usec < 0)
         usec = 0;
 
     return usec;
@@ -2616,7 +2633,7 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
                  * same as the read index. */
 
                 /* Get the latency of the sink */
-                usec = pa_sink_get_latency_within_thread(s);
+                usec = pa_sink_get_latency_within_thread(s, false);
                 sink_nbytes = pa_usec_to_bytes(usec, &s->sample_spec);
                 total_nbytes = sink_nbytes + pa_memblockq_get_length(i->thread_info.render_memblockq);
 
@@ -2678,7 +2695,7 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
                  * rewind. */
 
                 /* Get the latency of the sink */
-                usec = pa_sink_get_latency_within_thread(s);
+                usec = pa_sink_get_latency_within_thread(s, false);
                 nbytes = pa_usec_to_bytes(usec, &s->sample_spec);
 
                 if (nbytes > 0)
@@ -3281,6 +3298,8 @@ void pa_sink_set_port_latency_offset(pa_sink *s, int64_t offset) {
         pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_SET_PORT_LATENCY_OFFSET, NULL, offset, NULL) == 0);
     else
         s->thread_info.port_latency_offset = offset;
+
+    pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_PORT_LATENCY_OFFSET_CHANGED], s);
 }
 
 /* Called from main context */
@@ -3355,6 +3374,9 @@ int pa_sink_set_port(pa_sink *s, const char *name, bool save) {
 
     pa_sink_set_port_latency_offset(s, s->active_port->latency_offset);
 
+    /* The active port affects the default sink selection. */
+    pa_core_update_default_sink(s->core);
+
     pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_PORT_CHANGED], s);
 
     return 0;
@@ -3497,21 +3519,25 @@ unsigned pa_device_init_priority(pa_proplist *p) {
 
     if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_FORM_FACTOR))) {
 
-        if (pa_streq(s, "internal"))
+        if (pa_streq(s, "headphone"))
             priority += 900;
+        else if (pa_streq(s, "hifi"))
+            priority += 600;
         else if (pa_streq(s, "speaker"))
             priority += 500;
-        else if (pa_streq(s, "headphone"))
+        else if (pa_streq(s, "portable"))
+            priority += 450;
+        else if (pa_streq(s, "internal"))
             priority += 400;
     }
 
     if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_BUS))) {
 
-        if (pa_streq(s, "pci"))
+        if (pa_streq(s, "bluetooth"))
             priority += 50;
         else if (pa_streq(s, "usb"))
             priority += 40;
-        else if (pa_streq(s, "bluetooth"))
+        else if (pa_streq(s, "pci"))
             priority += 30;
     }
 
@@ -3570,7 +3596,7 @@ void pa_sink_volume_change_push(pa_sink *s) {
         return;
     }
 
-    nc->at = pa_sink_get_latency_within_thread(s);
+    nc->at = pa_sink_get_latency_within_thread(s, false);
     nc->at += pa_rtclock_now() + s->thread_info.volume_change_extra_delay;
 
     if (s->thread_info.volume_changes_tail) {
@@ -3680,7 +3706,7 @@ static void pa_sink_volume_change_rewind(pa_sink *s, size_t nbytes) {
     pa_sink_volume_change *c;
     pa_volume_t prev_vol = pa_cvolume_avg(&s->thread_info.current_hw_volume);
     pa_usec_t rewound = pa_bytes_to_usec(nbytes, &s->sample_spec);
-    pa_usec_t limit = pa_sink_get_latency_within_thread(s);
+    pa_usec_t limit = pa_sink_get_latency_within_thread(s, false);
 
     pa_log_debug("latency = %lld", (long long) limit);
     limit += pa_rtclock_now() + s->thread_info.volume_change_extra_delay;
diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h
index bc2a200..0e79cf3 100644
--- a/src/pulsecore/sink.h
+++ b/src/pulsecore/sink.h
@@ -526,7 +526,7 @@ void pa_sink_request_rewind(pa_sink*s, size_t nbytes);
 
 void pa_sink_invalidate_requested_latency(pa_sink *s, bool dynamic);
 
-pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s);
+int64_t pa_sink_get_latency_within_thread(pa_sink *s, bool allow_negative);
 
 /* Called from the main thread, from sink-input.c only. The normal way to set
  * the sink reference volume is to call pa_sink_set_volume(), but the flat
diff --git a/src/pulsecore/socket-client.c b/src/pulsecore/socket-client.c
index b4067f0..c87406d 100644
--- a/src/pulsecore/socket-client.c
+++ b/src/pulsecore/socket-client.c
@@ -428,12 +428,28 @@ static void start_timeout(pa_socket_client *c, bool use_rtclock) {
 pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, bool use_rtclock, const char*name, uint16_t default_port) {
     pa_socket_client *c = NULL;
     pa_parsed_address a;
+    char *name_buf;
 
     pa_assert(m);
     pa_assert(name);
 
-    if (pa_parse_address(name, &a) < 0)
-        return NULL;
+    a.path_or_host = NULL;
+
+    if (pa_is_ip6_address(name)) {
+        size_t len = strlen(name);
+        name_buf = pa_xmalloc(len + 3);
+        memcpy(name_buf + 1, name, len);
+        name_buf[0] = '[';
+        name_buf[len + 1] = ']';
+        name_buf[len + 2] = '\0';
+    } else {
+        name_buf = pa_xstrdup(name);
+    }
+
+    if (pa_parse_address(name_buf, &a) < 0) {
+        pa_log_warn("parsing address failed: %s", name_buf);
+        goto finish;
+    }
 
     if (!a.port)
         a.port = default_port;
@@ -530,6 +546,7 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, bool use_rtclo
     }
 
 finish:
+    pa_xfree(name_buf);
     pa_xfree(a.path_or_host);
     return c;
 
diff --git a/src/pulsecore/sound-file-stream.c b/src/pulsecore/sound-file-stream.c
index ddda456..aeaa608 100644
--- a/src/pulsecore/sound-file-stream.c
+++ b/src/pulsecore/sound-file-stream.c
@@ -129,7 +129,7 @@ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t s
     /* If we are added for the first time, ask for a rewinding so that
      * we are heard right-away. */
     if (PA_SINK_INPUT_IS_LINKED(state) &&
-        i->thread_info.state == PA_SINK_INPUT_INIT)
+        i->thread_info.state == PA_SINK_INPUT_INIT && i->sink)
         pa_sink_input_request_rewind(i, 0, false, true, true);
 }
 
diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c
index 6714ea9..a4c99af 100644
--- a/src/pulsecore/source-output.c
+++ b/src/pulsecore/source-output.c
@@ -401,6 +401,7 @@ int pa_source_output_new(
                         ((data->flags & PA_SOURCE_OUTPUT_VARIABLE_RATE) ? PA_RESAMPLER_VARIABLE_RATE : 0) |
                         ((data->flags & PA_SOURCE_OUTPUT_NO_REMAP) ? PA_RESAMPLER_NO_REMAP : 0) |
                         (core->disable_remixing || (data->flags & PA_SOURCE_OUTPUT_NO_REMIX) ? PA_RESAMPLER_NO_REMIX : 0) |
+                        (core->remixing_use_all_sink_channels ? 0 : PA_RESAMPLER_NO_FILL_SINK) |
                         (core->disable_lfe_remixing ? PA_RESAMPLER_NO_LFE : 0)))) {
                 pa_log_warn("Unsupported resampling operation.");
                 return -PA_ERR_NOTSUPPORTED;
@@ -523,14 +524,18 @@ static void source_output_set_state(pa_source_output *o, pa_source_output_state_
     if (o->state == state)
         return;
 
-    if (o->state == PA_SOURCE_OUTPUT_CORKED && state == PA_SOURCE_OUTPUT_RUNNING && pa_source_used_by(o->source) == 0 &&
-        !pa_sample_spec_equal(&o->sample_spec, &o->source->sample_spec)) {
-        /* We were uncorked and the source was not playing anything -- let's try
-         * to update the sample rate to avoid resampling */
-        pa_source_update_rate(o->source, o->sample_spec.rate, pa_source_output_is_passthrough(o));
-    }
+    if (o->source) {
+        if (o->state == PA_SOURCE_OUTPUT_CORKED && state == PA_SOURCE_OUTPUT_RUNNING && pa_source_used_by(o->source) == 0 &&
+            !pa_sample_spec_equal(&o->sample_spec, &o->source->sample_spec)) {
+            /* We were uncorked and the source was not playing anything -- let's try
+             * to update the sample rate to avoid resampling */
+            pa_source_update_rate(o->source, o->sample_spec.rate, pa_source_output_is_passthrough(o));
+        }
 
-    pa_assert_se(pa_asyncmsgq_send(o->source->asyncmsgq, PA_MSGOBJECT(o), PA_SOURCE_OUTPUT_MESSAGE_SET_STATE, PA_UINT_TO_PTR(state), 0, NULL) == 0);
+        pa_assert_se(pa_asyncmsgq_send(o->source->asyncmsgq, PA_MSGOBJECT(o), PA_SOURCE_OUTPUT_MESSAGE_SET_STATE, PA_UINT_TO_PTR(state), 0, NULL) == 0);
+    } else
+        /* If the source is not valid, pa_source_output_set_state_within_thread() must be called directly */
+        pa_source_output_set_state_within_thread(o, state);
 
     update_n_corked(o, state);
     o->state = state;
@@ -542,7 +547,8 @@ static void source_output_set_state(pa_source_output *o, pa_source_output_state_
             pa_subscription_post(o->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_CHANGE, o->index);
     }
 
-    pa_source_update_status(o->source);
+    if (o->source)
+        pa_source_update_status(o->source);
 }
 
 /* Called from main context */
@@ -747,7 +753,7 @@ void pa_source_output_push(pa_source_output *o, const pa_memchunk *chunk) {
          * of the queued data is actually still changeable. Hence
          * FIXME! */
 
-        latency = pa_sink_get_latency_within_thread(o->source->monitor_of);
+        latency = pa_sink_get_latency_within_thread(o->source->monitor_of, false);
 
         n = pa_usec_to_bytes(latency, &o->source->sample_spec);
 
@@ -1259,6 +1265,22 @@ static bool find_filter_source_output(pa_source_output *target, pa_source *s) {
     return false;
 }
 
+static bool is_filter_source_moving(pa_source_output *o) {
+    pa_source *source = o->source;
+
+    if (!source)
+        return false;
+
+    while (source->output_from_master) {
+        source = source->output_from_master->source;
+
+        if (!source)
+            return true;
+    }
+
+    return false;
+}
+
 /* Called from main context */
 bool pa_source_output_may_move_to(pa_source_output *o, pa_source *dest) {
     pa_source_output_assert_ref(o);
@@ -1280,6 +1302,17 @@ bool pa_source_output_may_move_to(pa_source_output *o, pa_source *dest) {
         return false;
     }
 
+    /* If this source output is connected to a filter source that itself is
+     * moving, then don't allow the move. Moving requires sending a message to
+     * the IO thread of the old source, and if the old source is a filter
+     * source that is moving, there's no IO thread associated to the old
+     * source. */
+    if (is_filter_source_moving(o)) {
+        pa_log_debug("Can't move output from filter source %s, because the filter source itself is currently moving.",
+                     o->source->name);
+        return false;
+    }
+
     if (pa_idxset_size(dest->outputs) >= PA_MAX_OUTPUTS_PER_SOURCE) {
         pa_log_warn("Failed to move source output: too many outputs per source.");
         return false;
@@ -1583,10 +1616,9 @@ int pa_source_output_move_to(pa_source_output *o, pa_source *dest, bool save) {
     return 0;
 }
 
-/* Called from IO thread context */
+/* Called from IO thread context except when cork() is called without a valid source. */
 void pa_source_output_set_state_within_thread(pa_source_output *o, pa_source_output_state_t state) {
     pa_source_output_assert_ref(o);
-    pa_source_output_assert_io_context(o);
 
     if (state == o->thread_info.state)
         return;
@@ -1608,7 +1640,7 @@ int pa_source_output_process_msg(pa_msgobject *mo, int code, void *userdata, int
             pa_usec_t *r = userdata;
 
             r[0] += pa_bytes_to_usec(pa_memblockq_get_length(o->thread_info.delay_memblockq), &o->source->sample_spec);
-            r[1] += pa_source_get_latency_within_thread(o->source);
+            r[1] += pa_source_get_latency_within_thread(o->source, false);
 
             return 0;
         }
@@ -1714,6 +1746,7 @@ int pa_source_output_update_rate(pa_source_output *o) {
                                      ((o->flags & PA_SOURCE_OUTPUT_VARIABLE_RATE) ? PA_RESAMPLER_VARIABLE_RATE : 0) |
                                      ((o->flags & PA_SOURCE_OUTPUT_NO_REMAP) ? PA_RESAMPLER_NO_REMAP : 0) |
                                      (o->core->disable_remixing || (o->flags & PA_SOURCE_OUTPUT_NO_REMIX) ? PA_RESAMPLER_NO_REMIX : 0) |
+                                     (o->core->remixing_use_all_sink_channels ? 0 : PA_RESAMPLER_NO_FILL_SINK) |
                                      (o->core->disable_lfe_remixing ? PA_RESAMPLER_NO_LFE : 0));
 
         if (!new_resampler) {
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 8ce7818..b2936c5 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -327,7 +327,7 @@ pa_source* pa_source_new(
 
     PA_LLIST_HEAD_INIT(pa_source_volume_change, s->thread_info.volume_changes);
     s->thread_info.volume_changes_tail = NULL;
-    pa_sw_cvolume_multiply(&s->thread_info.current_hw_volume, &s->soft_volume, &s->real_volume);
+    pa_sw_cvolume_divide(&s->thread_info.current_hw_volume, &s->real_volume, &s->soft_volume);
     s->thread_info.volume_change_safety_margin = core->deferred_volume_safety_margin_usec;
     s->thread_info.volume_change_extra_delay = core->deferred_volume_extra_delay_usec;
     s->thread_info.port_latency_offset = s->port_latency_offset;
@@ -590,7 +590,7 @@ void pa_source_put(pa_source *s) {
 
     s->thread_info.soft_volume = s->soft_volume;
     s->thread_info.soft_muted = s->muted;
-    pa_sw_cvolume_multiply(&s->thread_info.current_hw_volume, &s->soft_volume, &s->real_volume);
+    pa_sw_cvolume_divide(&s->thread_info.current_hw_volume, &s->real_volume, &s->soft_volume);
 
     pa_assert((s->flags & PA_SOURCE_HW_VOLUME_CTRL)
               || (s->base_volume == PA_VOLUME_NORM
@@ -605,6 +605,10 @@ void pa_source_put(pa_source *s) {
 
     pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE | PA_SUBSCRIPTION_EVENT_NEW, s->index);
     pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_PUT], s);
+
+    /* This function must be called after the PA_CORE_HOOK_SOURCE_PUT hook,
+     * because module-switch-on-connect needs to know the old default source */
+    pa_core_update_default_source(s->core);
 }
 
 /* Called from main context */
@@ -632,6 +636,8 @@ void pa_source_unlink(pa_source *s) {
         pa_namereg_unregister(s->core, s->name);
     pa_idxset_remove_by_data(s->core->sources, s, NULL);
 
+    pa_core_update_default_source(s->core);
+
     if (s->card)
         pa_idxset_remove_by_data(s->card->sources, s, NULL);
 
@@ -977,11 +983,12 @@ void pa_source_post_direct(pa_source*s, pa_source_output *o, const pa_memchunk *
 /* Called from main thread */
 int pa_source_update_rate(pa_source *s, uint32_t rate, bool passthrough) {
     int ret;
-    uint32_t desired_rate = rate;
+    uint32_t desired_rate;
     uint32_t default_rate = s->default_sample_rate;
     uint32_t alternate_rate = s->alternate_sample_rate;
     bool default_rate_is_usable = false;
     bool alternate_rate_is_usable = false;
+    bool avoid_resampling = s->core->avoid_resampling;
 
     if (rate == s->sample_spec.rate)
         return 0;
@@ -989,7 +996,7 @@ int pa_source_update_rate(pa_source *s, uint32_t rate, bool passthrough) {
     if (!s->update_rate && !s->monitor_of)
         return -1;
 
-    if (PA_UNLIKELY(default_rate == alternate_rate && !passthrough)) {
+    if (PA_UNLIKELY(default_rate == alternate_rate && !passthrough && !avoid_resampling)) {
         pa_log_debug("Default and alternate sample rates are the same, so there is no point in switching.");
         return -1;
     }
@@ -1007,17 +1014,30 @@ int pa_source_update_rate(pa_source *s, uint32_t rate, bool passthrough) {
         }
     }
 
-    if (PA_UNLIKELY(!pa_sample_rate_valid(desired_rate)))
+    if (PA_UNLIKELY(!pa_sample_rate_valid(rate)))
         return -1;
 
-    if (!passthrough && default_rate != desired_rate && alternate_rate != desired_rate) {
-        if (default_rate % 11025 == 0 && desired_rate % 11025 == 0)
+    if (passthrough) {
+        /* We have to try to use the source output rate */
+        desired_rate = rate;
+
+    } else if (avoid_resampling && (rate >= default_rate || rate >= alternate_rate)) {
+        /* We just try to set the source output's sample rate if it's not too low */
+        desired_rate = rate;
+
+    } else if (default_rate == rate || alternate_rate == rate) {
+        /* We can directly try to use this rate */
+        desired_rate = rate;
+
+    } else {
+        /* See if we can pick a rate that results in less resampling effort */
+        if (default_rate % 11025 == 0 && rate % 11025 == 0)
             default_rate_is_usable = true;
-        if (default_rate % 4000 == 0 && desired_rate % 4000 == 0)
+        if (default_rate % 4000 == 0 && rate % 4000 == 0)
             default_rate_is_usable = true;
-        if (alternate_rate && alternate_rate % 11025 == 0 && desired_rate % 11025 == 0)
+        if (alternate_rate && alternate_rate % 11025 == 0 && rate % 11025 == 0)
             alternate_rate_is_usable = true;
-        if (alternate_rate && alternate_rate % 4000 == 0 && desired_rate % 4000 == 0)
+        if (alternate_rate && alternate_rate % 4000 == 0 && rate % 4000 == 0)
             alternate_rate_is_usable = true;
 
         if (alternate_rate_is_usable && !default_rate_is_usable)
@@ -1085,7 +1105,7 @@ int pa_source_update_rate(pa_source *s, uint32_t rate, bool passthrough) {
 
 /* Called from main thread */
 pa_usec_t pa_source_get_latency(pa_source *s) {
-    pa_usec_t usec;
+    int64_t usec;
 
     pa_source_assert_ref(s);
     pa_assert_ctl_context();
@@ -1099,19 +1119,19 @@ pa_usec_t pa_source_get_latency(pa_source *s) {
 
     pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_GET_LATENCY, &usec, 0, NULL) == 0);
 
-    /* usec is unsigned, so check that the offset can be added to usec without
+    /* The return value is unsigned, so check that the offset can be added to usec without
      * underflowing. */
-    if (-s->port_latency_offset <= (int64_t) usec)
+    if (-s->port_latency_offset <= usec)
         usec += s->port_latency_offset;
     else
         usec = 0;
 
-    return usec;
+    return (pa_usec_t)usec;
 }
 
 /* Called from IO thread */
-pa_usec_t pa_source_get_latency_within_thread(pa_source *s) {
-    pa_usec_t usec = 0;
+int64_t pa_source_get_latency_within_thread(pa_source *s, bool allow_negative) {
+    int64_t usec = 0;
     pa_msgobject *o;
 
     pa_source_assert_ref(s);
@@ -1130,14 +1150,11 @@ pa_usec_t pa_source_get_latency_within_thread(pa_source *s) {
 
     /* FIXME: We probably should make this a proper vtable callback instead of going through process_msg() */
 
-    if (o->process_msg(o, PA_SOURCE_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
-        return -1;
+    o->process_msg(o, PA_SOURCE_MESSAGE_GET_LATENCY, &usec, 0, NULL);
 
-    /* usec is unsigned, so check that the offset can be added to usec without
-     * underflowing. */
-    if (-s->thread_info.port_latency_offset <= (int64_t) usec)
-        usec += s->thread_info.port_latency_offset;
-    else
+    /* If allow_negative is false, the call should only return positive values, */
+    usec += s->thread_info.port_latency_offset;
+    if (!allow_negative && usec < 0)
         usec = 0;
 
     return usec;
@@ -2209,7 +2226,7 @@ int pa_source_process_msg(pa_msgobject *object, int code, void *userdata, int64_
         case PA_SOURCE_MESSAGE_GET_LATENCY:
 
             if (s->monitor_of) {
-                *((pa_usec_t*) userdata) = 0;
+                *((int64_t*) userdata) = -pa_sink_get_latency_within_thread(s->monitor_of, true);
                 return 0;
             }
 
@@ -2572,6 +2589,8 @@ void pa_source_set_port_latency_offset(pa_source *s, int64_t offset) {
         pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_SET_PORT_LATENCY_OFFSET, NULL, offset, NULL) == 0);
     else
         s->thread_info.port_latency_offset = offset;
+
+    pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_PORT_LATENCY_OFFSET_CHANGED], s);
 }
 
 /* Called from main thread */
@@ -2630,6 +2649,9 @@ int pa_source_set_port(pa_source *s, const char *name, bool save) {
     s->active_port = port;
     s->save_port = save;
 
+    /* The active port affects the default source selection. */
+    pa_core_update_default_source(s->core);
+
     pa_source_set_port_latency_offset(s, s->active_port->latency_offset);
 
     pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SOURCE_PORT_CHANGED], s);
@@ -2681,7 +2703,7 @@ void pa_source_volume_change_push(pa_source *s) {
         return;
     }
 
-    nc->at = pa_source_get_latency_within_thread(s);
+    nc->at = pa_source_get_latency_within_thread(s, false);
     nc->at += pa_rtclock_now() + s->thread_info.volume_change_extra_delay;
 
     if (s->thread_info.volume_changes_tail) {
diff --git a/src/pulsecore/source.h b/src/pulsecore/source.h
index e5b9333..1e33cde 100644
--- a/src/pulsecore/source.h
+++ b/src/pulsecore/source.h
@@ -447,7 +447,7 @@ bool pa_source_volume_change_apply(pa_source *s, pa_usec_t *usec_to_next);
 /*** To be called exclusively by source output drivers, from IO context */
 
 void pa_source_invalidate_requested_latency(pa_source *s, bool dynamic);
-pa_usec_t pa_source_get_latency_within_thread(pa_source *s);
+int64_t pa_source_get_latency_within_thread(pa_source *s, bool allow_negative);
 
 /* Called from the main thread, from source-output.c only. The normal way to
  * set the source reference volume is to call pa_source_set_volume(), but the
diff --git a/src/tests/alsa-time-test.c b/src/tests/alsa-time-test.c
index a877cb8..dff95bb 100644
--- a/src/tests/alsa-time-test.c
+++ b/src/tests/alsa-time-test.c
@@ -132,9 +132,6 @@ int main(int argc, char *argv[]) {
     r = snd_pcm_sw_params(pcm, swparams);
     assert(r == 0);
 
-    r = snd_pcm_prepare(pcm);
-    assert(r == 0);
-
     r = snd_pcm_sw_params_current(pcm, swparams);
     assert(r == 0);
 
diff --git a/src/tests/remix-test.c b/src/tests/remix-test.c
index 1e58418..0dcc2f1 100644
--- a/src/tests/remix-test.c
+++ b/src/tests/remix-test.c
@@ -27,6 +27,17 @@
 #include <pulsecore/macro.h>
 #include <pulsecore/memblock.h>
 
+struct resample_flags {
+    const char *str;
+    pa_resample_flags_t value;
+};
+
+/* Call like this to get an initializer for struct resample_flags:
+ *     RESAMPLE_FLAGS(PA_RESAMPLER_NO_LFE)
+ */
+#define RESAMPLE_FLAGS(flags) { .str = #flags, .value = (flags) }
+
+
 int main(int argc, char *argv[]) {
 
     static const pa_channel_map maps[] = {
@@ -45,7 +56,17 @@ int main(int argc, char *argv[]) {
         { 0, { 0 } }
     };
 
-    unsigned i, j;
+    static const struct resample_flags flag_sets[] = {
+        RESAMPLE_FLAGS(0),
+        RESAMPLE_FLAGS(PA_RESAMPLER_NO_REMAP),
+        RESAMPLE_FLAGS(PA_RESAMPLER_NO_REMIX),
+        RESAMPLE_FLAGS(PA_RESAMPLER_NO_LFE),
+        RESAMPLE_FLAGS(PA_RESAMPLER_NO_FILL_SINK),
+        RESAMPLE_FLAGS(PA_RESAMPLER_NO_LFE | PA_RESAMPLER_NO_FILL_SINK),
+        { .str = NULL, .value = 0 },
+    };
+
+    unsigned i, j, k;
     pa_mempool *pool;
     unsigned crossover_freq = 120;
 
@@ -59,20 +80,24 @@ int main(int argc, char *argv[]) {
             pa_resampler *r;
             pa_sample_spec ss1, ss2;
 
-            pa_log_info("Converting from '%s' to '%s'.", pa_channel_map_snprint(a, sizeof(a), &maps[i]), pa_channel_map_snprint(b, sizeof(b), &maps[j]));
-
             ss1.channels = maps[i].channels;
             ss2.channels = maps[j].channels;
 
             ss1.rate = ss2.rate = 44100;
             ss1.format = ss2.format = PA_SAMPLE_S16NE;
 
-            r = pa_resampler_new(pool, &ss1, &maps[i], &ss2, &maps[j], crossover_freq, PA_RESAMPLER_AUTO, 0);
+            for (k = 0; flag_sets[k].str; k++) {
+                pa_log_info("Converting from '%s' to '%s' with flags %s.", pa_channel_map_snprint(a, sizeof(a), &maps[i]),
+                            pa_channel_map_snprint(b, sizeof(b), &maps[j]), flag_sets[k].str);
+
+                r = pa_resampler_new(pool, &ss1, &maps[i], &ss2, &maps[j], crossover_freq, PA_RESAMPLER_AUTO,
+                                     flag_sets[k].value);
 
-            /* We don't really care for the resampler. We just want to
-             * see the remixing debug output. */
+                /* We don't really care for the resampler. We just want to
+                 * see the remixing debug output. */
 
-            pa_resampler_free(r);
+                pa_resampler_free(r);
+            }
         }
 
     pa_mempool_unref(pool);
diff --git a/src/tests/thread-test.c b/src/tests/thread-test.c
index 72f2177..0c83e67 100644
--- a/src/tests/thread-test.c
+++ b/src/tests/thread-test.c
@@ -115,7 +115,10 @@ START_TEST (thread_test) {
     for (k = 0; k < 100; k++) {
         pa_assert(magic_number == 0);
 
-        magic_number = (int) rand() % 0x10000;
+        /* There's a thread waiting for us to change magic_number to a non-zero
+         * value. The "+ 1" part ensures that we don't accidentally set
+         * magic_number to zero here. */
+        magic_number = (int) rand() % 0x10000 + 1;
 
         pa_log_info("iteration %i (%i)", k, magic_number);
 
diff --git a/src/utils/padsp.c b/src/utils/padsp.c
index 7a94114..251f201 100644
--- a/src/utils/padsp.c
+++ b/src/utils/padsp.c
@@ -52,6 +52,7 @@
 #include <pulse/gccmacro.h>
 #include <pulsecore/llist.h>
 #include <pulsecore/core-util.h>
+#include <pulsecore/sample-util.h>
 
 /* On some systems SIOCINQ isn't defined, but FIONREAD is just an alias */
 #if !defined(SIOCINQ) && defined(FIONREAD)
@@ -92,6 +93,7 @@ struct fd_info {
     pa_io_event_flags_t io_flags;
 
     void *buf;
+    size_t leftover;
     size_t rec_offset;
 
     int operation_success;
@@ -641,6 +643,7 @@ static fd_info* fd_info_new(fd_info_type_t type, int *_errno) {
     pthread_mutex_init(&i->mutex, NULL);
     i->ref = 1;
     i->buf = NULL;
+    i->leftover = 0;
     i->rec_offset = 0;
     i->unusable = 0;
     pa_cvolume_reset(&i->sink_volume, 2);
@@ -866,15 +869,18 @@ static int fd_info_copy_data(fd_info *i, int force) {
 
         while (n >= i->fragment_size || force) {
             ssize_t r;
+            size_t to_write;
 
             if (!i->buf) {
                 if (!(i->buf = malloc(i->fragment_size))) {
                     debug(DEBUG_LEVEL_NORMAL, __FILE__": malloc() failed.\n");
                     return -1;
                 }
+
+                i->leftover = 0;
             }
 
-            if ((r = read(i->thread_fd, i->buf, i->fragment_size)) <= 0) {
+            if ((r = read(i->thread_fd, ((uint8_t *) i->buf) + i->leftover, i->fragment_size - i->leftover)) <= 0) {
 
                 if (errno == EAGAIN)
                     break;
@@ -883,15 +889,19 @@ static int fd_info_copy_data(fd_info *i, int force) {
                 return -1;
             }
 
-            if (pa_stream_write(i->play_stream, i->buf, (size_t) r, free, 0LL, PA_SEEK_RELATIVE) < 0) {
+            to_write = pa_frame_align(r + i->leftover, &i->sample_spec);
+
+            if (pa_stream_write(i->play_stream, i->buf, to_write, NULL, 0LL, PA_SEEK_RELATIVE) < 0) {
                 debug(DEBUG_LEVEL_NORMAL, __FILE__": pa_stream_write(): %s\n", pa_strerror(pa_context_errno(i->context)));
                 return -1;
             }
 
-            i->buf = NULL;
+            i->leftover += r - to_write;
+            if (i->leftover)
+                memmove(i->buf, ((uint8_t *) i->buf) + to_write, i->leftover);
 
-            assert(n >= (size_t) r);
-            n -= (size_t) r;
+            assert(n >= (size_t) to_write);
+            n -= (size_t) to_write;
         }
 
         if (n >= i->fragment_size)
@@ -2285,7 +2295,7 @@ static int dsp_ioctl(fd_info *i, unsigned long request, void*argp, int *_errno)
             break;
         }
 
-#if HAVE_DECL_SOUND_PCM_READ_RATE
+#ifdef HAVE_DECL_SOUND_PCM_READ_RATE
         case SOUND_PCM_READ_RATE:
             debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_PCM_READ_RATE\n");
 
@@ -2295,7 +2305,7 @@ static int dsp_ioctl(fd_info *i, unsigned long request, void*argp, int *_errno)
             break;
 #endif
 
-#if HAVE_DECL_SOUND_PCM_READ_CHANNELS
+#ifdef HAVE_DECL_SOUND_PCM_READ_CHANNELS
         case SOUND_PCM_READ_CHANNELS:
             debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_PCM_READ_CHANNELS\n");
 
@@ -2305,7 +2315,7 @@ static int dsp_ioctl(fd_info *i, unsigned long request, void*argp, int *_errno)
             break;
 #endif
 
-#if HAVE_DECL_SOUND_PCM_READ_BITS
+#ifdef HAVE_DECL_SOUND_PCM_READ_BITS
         case SOUND_PCM_READ_BITS:
             debug(DEBUG_LEVEL_NORMAL, __FILE__": SOUND_PCM_READ_BITS\n");
 
diff --git a/src/utils/padsp.in b/src/utils/padsp.in
index 3430a65..fea00d2 100644
--- a/src/utils/padsp.in
+++ b/src/utils/padsp.in
@@ -74,9 +74,9 @@ done
 shift $(( $OPTIND - 1 ))
 
 if [ x"$LD_PRELOAD" = x ] ; then
-   LD_PRELOAD="@pkglibdir@/libpulsedsp.so"
+   LD_PRELOAD="@PULSEDSP_LOCATION@/libpulsedsp.so"
 else
-   LD_PRELOAD="$LD_PRELOAD @pkglibdir@/libpulsedsp.so"
+   LD_PRELOAD="$LD_PRELOAD @PULSEDSP_LOCATION@/libpulsedsp.so"
 fi
 
 export LD_PRELOAD
diff --git a/vala/libpulse.vapi b/vala/libpulse.vapi
index 207cedf..107b745 100644
--- a/vala/libpulse.vapi
+++ b/vala/libpulse.vapi
@@ -110,7 +110,7 @@ namespace PulseAudio {
                 public uint8 channels;
 
                 [CCode (cname="PA_SAMPLE_SPEC_SNPRINT_MAX")]
-                public static const size_t SNPRINT_MAX;
+                public const size_t SNPRINT_MAX;
 
                 [CCode (cname="pa_bytes_per_second")]
                 public size_t bytes_per_second();
@@ -170,23 +170,23 @@ namespace PulseAudio {
         public struct Volume : uint32 {
 
                 [CCode (cname="PA_SW_VOLUME_SNPRINT_DB_MAX")]
-                public static const size_t SW_SNPRINT_DB_MAX;
+                public const size_t SW_SNPRINT_DB_MAX;
 
                 [CCode (cname="PA_VOLUME_SNPRINT_MAX")]
-                public static const size_t SNPRINT_MAX;
+                public const size_t SNPRINT_MAX;
 
                 [CCode (cname="PA_VOLUME_MAX")]
-                public static const Volume MAX;
+                public const Volume MAX;
 
                 [CCode (cname="PA_VOLUME_NORM")]
-                public static const Volume NORM;
+                public const Volume NORM;
 
                 [CCode (cname="PA_VOLUME_MUTED")]
-                public static const Volume MUTED;
+                public const Volume MUTED;
 
                 // [CCode (cname="PA_VOLUME_INVALID")]
                 [CCode (cname="PA_VOLUME_MAX")]
-                public static const Volume INVALID;
+                public const Volume INVALID;
 
                 [CCode (cname="pa_volume_snprint", instance_pos = 3.1)]
                 public unowned string snprint(char[] s);
@@ -245,10 +245,10 @@ namespace PulseAudio {
                 public Volume values[32];
 
                 [CCode (cname="PA_SW_CVOLUME_SNPRINT_DB_MAX")]
-                public static const size_t SW_SNPRINT_DB_MAX;
+                public const size_t SW_SNPRINT_DB_MAX;
 
                 [CCode (cname="PA_CVOLUME_SNPRINT_MAX")]
-                public static const size_t SNPRINT_MAX;
+                public const size_t SNPRINT_MAX;
 
                 [CCode (cname="pa_cvolume_equal")]
                 public bool equal(CVolume other);
@@ -382,7 +382,7 @@ namespace PulseAudio {
                 public ChannelPosition map[32];
 
                 [CCode (cname="PA_CHANNEL_MAP_SNPRINT_MAX")]
-                public static const size_t SNPRINT_MAX;
+                public const size_t SNPRINT_MAX;
 
                 [CCode (cname="pa_channel_map_init")]
                 public ChannelMap();
@@ -532,121 +532,121 @@ namespace PulseAudio {
         public class Proplist {
 
                 [CCode (cname="PA_PROP_MEDIA_NAME")]
-                public static const string PROP_MEDIA_NAME;
+                public const string PROP_MEDIA_NAME;
                 [CCode (cname="PA_PROP_MEDIA_TITLE")]
-                public static const string PROP_MEDIA_TITLE;
+                public const string PROP_MEDIA_TITLE;
                 [CCode (cname="PA_PROP_MEDIA_ARTIST")]
-                public static const string PROP_MEDIA_ARTIST;
+                public const string PROP_MEDIA_ARTIST;
                 [CCode (cname="PA_PROP_MEDIA_COPYRIGHT")]
-                public static const string PROP_MEDIA_COPYRIGHT;
+                public const string PROP_MEDIA_COPYRIGHT;
                 [CCode (cname="PA_PROP_MEDIA_SOFTWARE")]
-                public static const string PROP_MEDIA_SOFTWARE;
+                public const string PROP_MEDIA_SOFTWARE;
                 [CCode (cname="PA_PROP_MEDIA_LANGUAGE")]
-                public static const string PROP_MEDIA_LANGUAGE;
+                public const string PROP_MEDIA_LANGUAGE;
                 [CCode (cname="PA_PROP_MEDIA_FILENAME")]
-                public static const string PROP_MEDIA_FILENAME;
+                public const string PROP_MEDIA_FILENAME;
                 [CCode (cname="PA_PROP_MEDIA_ICON_NAME")]
-                public static const string PROP_MEDIA_ICON_NAME;
+                public const string PROP_MEDIA_ICON_NAME;
                 [CCode (cname="PA_PROP_MEDIA_ROLE")]
-                public static const string PROP_MEDIA_ROLE;
+                public const string PROP_MEDIA_ROLE;
                 [CCode (cname="PA_PROP_EVENT_ID")]
-                public static const string PROP_EVENT_ID;
+                public const string PROP_EVENT_ID;
                 [CCode (cname="PA_PROP_EVENT_DESCRIPTION")]
-                public static const string PROP_EVENT_DESCRIPTION;
+                public const string PROP_EVENT_DESCRIPTION;
                 [CCode (cname="PA_PROP_EVENT_MOUSE_X")]
-                public static const string PROP_EVENT_MOUSE_X;
+                public const string PROP_EVENT_MOUSE_X;
                 [CCode (cname="PA_PROP_EVENT_MOUSE_Y")]
-                public static const string PROP_EVENT_MOUSE_Y;
+                public const string PROP_EVENT_MOUSE_Y;
                 [CCode (cname="PA_PROP_EVENT_MOUSE_HPOS")]
-                public static const string PROP_EVENT_MOUSE_HPOS;
+                public const string PROP_EVENT_MOUSE_HPOS;
                 [CCode (cname="PA_PROP_EVENT_MOUSE_VPOS")]
-                public static const string PROP_EVENT_MOUSE_VPOS;
+                public const string PROP_EVENT_MOUSE_VPOS;
                 [CCode (cname="PA_PROP_EVENT_MOUSE_BUTTON")]
-                public static const string PROP_EVENT_MOUSE_BUTTON;
+                public const string PROP_EVENT_MOUSE_BUTTON;
                 [CCode (cname="PA_PROP_WINDOW_NAME")]
-                public static const string PROP_WINDOW_NAME;
+                public const string PROP_WINDOW_NAME;
                 [CCode (cname="PA_PROP_WINDOW_ID")]
-                public static const string PROP_WINDOW_ID;
+                public const string PROP_WINDOW_ID;
                 [CCode (cname="PA_PROP_WINDOW_ICON_NAME")]
-                public static const string PROP_WINDOW_ICON_NAME;
+                public const string PROP_WINDOW_ICON_NAME;
                 [CCode (cname="PA_PROP_WINDOW_X11_DISPLAY")]
-                public static const string PROP_WINDOW_X11_DISPLAY;
+                public const string PROP_WINDOW_X11_DISPLAY;
                 [CCode (cname="PA_PROP_WINDOW_X11_SCREEN")]
-                public static const string PROP_WINDOW_X11_SCREEN;
+                public const string PROP_WINDOW_X11_SCREEN;
                 [CCode (cname="PA_PROP_WINDOW_X11_MONITOR")]
-                public static const string PROP_WINDOW_X11_MONITOR;
+                public const string PROP_WINDOW_X11_MONITOR;
                 [CCode (cname="PA_PROP_WINDOW_X11_XID")]
-                public static const string PROP_WINDOW_X11_XID;
+                public const string PROP_WINDOW_X11_XID;
                 [CCode (cname="PA_PROP_APPLICATION_NAME")]
-                public static const string PROP_APPLICATION_NAME;
+                public const string PROP_APPLICATION_NAME;
                 [CCode (cname="PA_PROP_APPLICATION_ID")]
-                public static const string PROP_APPLICATION_ID;
+                public const string PROP_APPLICATION_ID;
                 [CCode (cname="PA_PROP_APPLICATION_VERSION")]
-                public static const string PROP_APPLICATION_VERSION;
+                public const string PROP_APPLICATION_VERSION;
                 [CCode (cname="PA_PROP_APPLICATION_ICON_NAME")]
-                public static const string PROP_APPLICATION_ICON_NAME;
+                public const string PROP_APPLICATION_ICON_NAME;
                 [CCode (cname="PA_PROP_APPLICATION_LANGUAGE")]
-                public static const string PROP_APPLICATION_LANGUAGE;
+                public const string PROP_APPLICATION_LANGUAGE;
                 [CCode (cname="PA_PROP_APPLICATION_PROCESS_ID")]
-                public static const string PROP_APPLICATION_PROCESS_ID;
+                public const string PROP_APPLICATION_PROCESS_ID;
                 [CCode (cname="PA_PROP_APPLICATION_PROCESS_BINARY")]
-                public static const string PROP_APPLICATION_PROCESS_BINARY;
+                public const string PROP_APPLICATION_PROCESS_BINARY;
                 [CCode (cname="PA_PROP_APPLICATION_PROCESS_USER")]
-                public static const string PROP_APPLICATION_PROCESS_USER;
+                public const string PROP_APPLICATION_PROCESS_USER;
                 [CCode (cname="PA_PROP_APPLICATION_PROCESS_HOST")]
-                public static const string PROP_APPLICATION_PROCESS_HOST;
+                public const string PROP_APPLICATION_PROCESS_HOST;
                 [CCode (cname="PA_PROP_APPLICATION_PROCESS_MACHINE_ID")]
-                public static const string PROP_APPLICATION_PROCESS_MACHINE_ID;
+                public const string PROP_APPLICATION_PROCESS_MACHINE_ID;
                 [CCode (cname="PA_PROP_APPLICATION_PROCESS_SESSION_ID")]
-                public static const string PROP_APPLICATION_PROCESS_SESSION_ID;
+                public const string PROP_APPLICATION_PROCESS_SESSION_ID;
                 [CCode (cname="PA_PROP_DEVICE_STRING")]
-                public static const string PROP_DEVICE_STRING;
+                public const string PROP_DEVICE_STRING;
                 [CCode (cname="PA_PROP_DEVICE_API")]
-                public static const string PROP_DEVICE_API;
+                public const string PROP_DEVICE_API;
                 [CCode (cname="PA_PROP_DEVICE_DESCRIPTION")]
-                public static const string PROP_DEVICE_DESCRIPTION;
+                public const string PROP_DEVICE_DESCRIPTION;
                 [CCode (cname="PA_PROP_DEVICE_BUS_PATH")]
-                public static const string PROP_DEVICE_BUS_PATH;
+                public const string PROP_DEVICE_BUS_PATH;
                 [CCode (cname="PA_PROP_DEVICE_SERIAL")]
-                public static const string PROP_DEVICE_SERIAL;
+                public const string PROP_DEVICE_SERIAL;
                 [CCode (cname="PA_PROP_DEVICE_VENDOR_ID")]
-                public static const string PROP_DEVICE_VENDOR_ID;
+                public const string PROP_DEVICE_VENDOR_ID;
                 [CCode (cname="PA_PROP_DEVICE_VENDOR_NAME")]
-                public static const string PROP_DEVICE_VENDOR_NAME;
+                public const string PROP_DEVICE_VENDOR_NAME;
                 [CCode (cname="PA_PROP_DEVICE_PRODUCT_ID")]
-                public static const string PROP_DEVICE_PRODUCT_ID;
+                public const string PROP_DEVICE_PRODUCT_ID;
                 [CCode (cname="PA_PROP_DEVICE_PRODUCT_NAME")]
-                public static const string PROP_DEVICE_PRODUCT_NAME;
+                public const string PROP_DEVICE_PRODUCT_NAME;
                 [CCode (cname="PA_PROP_DEVICE_CLASS")]
-                public static const string PROP_DEVICE_CLASS;
+                public const string PROP_DEVICE_CLASS;
                 [CCode (cname="PA_PROP_DEVICE_FORM_FACTOR")]
-                public static const string PROP_DEVICE_FORM_FACTOR;
+                public const string PROP_DEVICE_FORM_FACTOR;
                 [CCode (cname="PA_PROP_DEVICE_BUS")]
-                public static const string PROP_DEVICE_BUS;
+                public const string PROP_DEVICE_BUS;
                 [CCode (cname="PA_PROP_DEVICE_ICON_NAME")]
-                public static const string PROP_DEVICE_ICON_NAME;
+                public const string PROP_DEVICE_ICON_NAME;
                 [CCode (cname="PA_PROP_DEVICE_ACCESS_MODE")]
-                public static const string PROP_DEVICE_ACCESS_MODE;
+                public const string PROP_DEVICE_ACCESS_MODE;
                 [CCode (cname="PA_PROP_DEVICE_MASTER_DEVICE")]
-                public static const string PROP_DEVICE_MASTER_DEVICE;
+                public const string PROP_DEVICE_MASTER_DEVICE;
                 [CCode (cname="PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE")]
-                public static const string PROP_DEVICE_BUFFERING_BUFFER_SIZE;
+                public const string PROP_DEVICE_BUFFERING_BUFFER_SIZE;
                 [CCode (cname="PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE")]
-                public static const string PROP_DEVICE_BUFFERING_FRAGMENT_SIZE;
+                public const string PROP_DEVICE_BUFFERING_FRAGMENT_SIZE;
                 [CCode (cname="PA_PROP_DEVICE_PROFILE_NAME")]
-                public static const string PROP_DEVICE_PROFILE_NAME;
+                public const string PROP_DEVICE_PROFILE_NAME;
                 [CCode (cname="PA_PROP_DEVICE_INTENDED_ROLES")]
-                public static const string PROP_DEVICE_INTENDED_ROLES;
+                public const string PROP_DEVICE_INTENDED_ROLES;
                 [CCode (cname="PA_PROP_DEVICE_PROFILE_DESCRIPTION")]
-                public static const string PROP_DEVICE_PROFILE_DESCRIPTION;
+                public const string PROP_DEVICE_PROFILE_DESCRIPTION;
                 [CCode (cname="PA_PROP_MODULE_AUTHOR")]
-                public static const string PROP_MODULE_AUTHOR;
+                public const string PROP_MODULE_AUTHOR;
                 [CCode (cname="PA_PROP_MODULE_DESCRIPTION")]
-                public static const string PROP_MODULE_DESCRIPTION;
+                public const string PROP_MODULE_DESCRIPTION;
                 [CCode (cname="PA_PROP_MODULE_USAGE")]
-                public static const string PROP_MODULE_USAGE;
+                public const string PROP_MODULE_USAGE;
                 [CCode (cname="PA_PROP_MODULE_VERSION")]
-                public static const string PROP_MODULE_VERSION;
+                public const string PROP_MODULE_VERSION;
 
                 [CCode (cname="pa_proplist_new")]
                 public Proplist();

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-pulseaudio/pulseaudio.git



More information about the pkg-pulseaudio-devel mailing list