Index: uspace/srv/audio/hound/audio_device.c
===================================================================
--- uspace/srv/audio/hound/audio_device.c	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
+++ uspace/srv/audio/hound/audio_device.c	(revision 2cc5c8357bcdbc4c5d0ca79839a7c7e2aadfde62)
@@ -42,5 +42,4 @@
 #include <str_error.h>
 
-#include <audio_pcm_iface.h>
 
 #include "audio_device.h"
@@ -54,8 +53,4 @@
 static int get_buffer(audio_device_t *dev);
 static int release_buffer(audio_device_t *dev);
-static int start_playback(audio_device_t *dev);
-static int stop_playback(audio_device_t *dev);
-static int start_recording(audio_device_t *dev);
-static int stop_recording(audio_device_t *dev);
 
 
@@ -66,5 +61,5 @@
 	dev->id = id;
 	dev->name = str_dup(name);
-	dev->sess = loc_service_connect(EXCHANGE_SERIALIZE, id, 0);
+	dev->sess = audio_pcm_open_service(id);
 	if (!dev->sess) {
 		log_debug("Failed to connect to device \"%s\"", name);
@@ -108,5 +103,11 @@
 		}
 
-		ret = start_playback(dev);
+		/* Fill the buffer first */
+		audio_sink_mix_inputs(&dev->sink,
+		    dev->buffer.base, dev->buffer.size);
+
+		ret = audio_pcm_start_playback(dev->sess, BUFFER_BLOCKS,
+		    dev->sink.format.channels, dev->sink.format.sampling_rate,
+		    dev->sink.format.sample_format);
 		if (ret != EOK) {
 			log_error("Failed to start playback: %s",
@@ -119,5 +120,5 @@
 		assert(!new);
 		log_verbose("No connections on device sink '%s'", sink->name);
-		int ret = stop_playback(dev);
+		int ret = audio_pcm_stop_playback(dev->sess);
 		if (ret != EOK) {
 			log_error("Failed to start playback: %s",
@@ -147,5 +148,7 @@
 			return ret;
 		}
-		ret = start_recording(dev);
+		ret = audio_pcm_start_record(dev->sess, BUFFER_BLOCKS,
+		    dev->sink.format.channels, dev->sink.format.sampling_rate,
+		    dev->sink.format.sample_format);
 		if (ret != EOK) {
 			log_error("Failed to start recording: %s",
@@ -155,5 +158,5 @@
 		}
 	} else { /* Disconnected */
-		int ret = stop_recording(dev);
+		int ret = audio_pcm_stop_record(dev->sess);
 		if (ret != EOK) {
 			log_error("Failed to start recording: %s",
@@ -229,87 +232,23 @@
 	dev->buffer.size = 0;
 
-	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_get_buffer(exch, &dev->buffer.base,
+	return audio_pcm_get_buffer(dev->sess, &dev->buffer.base,
 	    &dev->buffer.size, device_event_callback, dev);
-	async_exchange_end(exch);
-	return ret;
-}
-
-#define CHECK_BUFFER_AND_CONNECTION() \
-do { \
-	assert(dev); \
-	if (!dev->sess) { \
-		log_debug("No connection to device"); \
-		return EIO; \
-	} \
-	if (!dev->buffer.base) { \
-		log_debug("We don't have a buffer"); \
-		return ENOENT; \
-	} \
-} while (0)
-
+}
 
 static int release_buffer(audio_device_t *dev)
 {
-	CHECK_BUFFER_AND_CONNECTION();
-
-	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_release_buffer(exch);
-	async_exchange_end(exch);
+	assert(dev);
+	assert(dev->buffer.base);
+
+	const int ret = audio_pcm_release_buffer(dev->sess);
 	if (ret == EOK) {
 		dev->buffer.base = NULL;
 		dev->buffer.size = 0;
 		dev->buffer.position = NULL;
+	} else {
+		log_debug("Failed to release buffer: %s", str_error(ret));
 	}
 	return ret;
 }
-
-static int start_playback(audio_device_t *dev)
-{
-	CHECK_BUFFER_AND_CONNECTION();
-
-	/* Fill the buffer first */
-	audio_sink_mix_inputs(&dev->sink, dev->buffer.base, dev->buffer.size);
-
-	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_start_playback(exch,
-	    BUFFER_BLOCKS, dev->sink.format.channels,
-	    dev->sink.format.sampling_rate, dev->sink.format.sample_format);
-	async_exchange_end(exch);
-	return ret;
-}
-
-static int stop_playback(audio_device_t *dev)
-{
-	CHECK_BUFFER_AND_CONNECTION();
-
-	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_stop_playback(exch);
-	async_exchange_end(exch);
-	return ret;
-}
-
-static int start_recording(audio_device_t *dev)
-{
-	CHECK_BUFFER_AND_CONNECTION();
-
-	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_start_record(exch,
-	    BUFFER_BLOCKS, dev->sink.format.channels,
-	    dev->sink.format.sampling_rate, dev->sink.format.sample_format);
-	async_exchange_end(exch);
-	return ret;
-}
-
-static int stop_recording(audio_device_t *dev)
-{
-	CHECK_BUFFER_AND_CONNECTION();
-
-	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_stop_record(exch);
-	async_exchange_end(exch);
-	return ret;
-}
-
 /**
  * @}
Index: uspace/srv/audio/hound/audio_device.h
===================================================================
--- uspace/srv/audio/hound/audio_device.h	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
+++ uspace/srv/audio/hound/audio_device.h	(revision 2cc5c8357bcdbc4c5d0ca79839a7c7e2aadfde62)
@@ -43,4 +43,5 @@
 #include <errno.h>
 #include <ipc/loc.h>
+#include <audio_pcm_iface.h>
 
 #include "audio_source.h"
@@ -50,5 +51,5 @@
 	link_t link;
 	service_id_t id;
-	async_sess_t *sess;
+	audio_pcm_sess_t *sess;
 	char *name;
 	struct {
