Index: uspace/app/dplay/dplay.c
===================================================================
--- uspace/app/dplay/dplay.c	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/app/dplay/dplay.c	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -57,5 +57,4 @@
 		void *base;
 		size_t size;
-		unsigned id;
 		void* position;
 	} buffer;
@@ -71,5 +70,4 @@
 	assert(exch);
 	assert(pb);
-	pb->buffer.id = 0;
 	pb->buffer.base = NULL;
 	pb->buffer.size = 0;
@@ -113,5 +111,5 @@
 		   buffer_part, pb->source);
 		if (bytes == 0) {
-			audio_pcm_stop_playback(pb->device, pb->buffer.id);
+			audio_pcm_stop_playback(pb->device);
 		}
 		bzero(pb->buffer.position + bytes, buffer_part - bytes);
@@ -138,5 +136,5 @@
 	printf("Buffer data ready.\n");
 	fibril_mutex_lock(&pb->mutex);
-	int ret = audio_pcm_start_playback(pb->device, pb->buffer.id,
+	int ret = audio_pcm_start_playback(pb->device,
 	    SUBBUFFERS, channels, sampling_rate, format);
 	if (ret != EOK) {
@@ -204,11 +202,10 @@
 
 	ret = audio_pcm_get_buffer(pb.device, &pb.buffer.base,
-	    &pb.buffer.size, &pb.buffer.id, device_event_callback, &pb);
+	    &pb.buffer.size, device_event_callback, &pb);
 	if (ret != EOK) {
 		printf("Failed to get PCM buffer: %s.\n", str_error(ret));
 		goto close_session;
 	}
-	printf("Buffer (%u): %p %zu.\n", pb.buffer.id, pb.buffer.base,
-	    pb.buffer.size);
+	printf("Buffer: %p %zu.\n", pb.buffer.base, pb.buffer.size);
 	uintptr_t ptr = 0;
 	as_get_physical_mapping(pb.buffer.base, &ptr);
@@ -239,5 +236,5 @@
 cleanup:
 	munmap(pb.buffer.base, pb.buffer.size);
-	audio_pcm_release_buffer(exch, pb.buffer.id);
+	audio_pcm_release_buffer(exch);
 close_session:
 	async_exchange_end(exch);
Index: uspace/app/drec/drec.c
===================================================================
--- uspace/app/drec/drec.c	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/app/drec/drec.c	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -72,5 +72,4 @@
 	assert(exch);
 	assert(rec);
-	rec->buffer.id = 0;
 	rec->buffer.base = NULL;
 	rec->buffer.size = 0;
@@ -123,5 +122,5 @@
 	printf("Recording: %dHz, %s, %d channel(s).\n",
 	    sampling_rate, pcm_sample_format_str(format), channels);
-	int ret = audio_pcm_start_record(rec->device, rec->buffer.id,
+	int ret = audio_pcm_start_record(rec->device,
 	    SUBBUFFERS, channels, sampling_rate, format);
 	if (ret != EOK) {
@@ -132,5 +131,5 @@
 	getchar();
 	printf("\n");
-	audio_pcm_stop_record(rec->device, rec->buffer.id);
+	audio_pcm_stop_record(rec->device);
 }
 
@@ -186,11 +185,10 @@
 
 	ret = audio_pcm_get_buffer(rec.device, &rec.buffer.base,
-	    &rec.buffer.size, &rec.buffer.id, device_event_callback, &rec);
+	    &rec.buffer.size, device_event_callback, &rec);
 	if (ret != EOK) {
 		printf("Failed to get PCM buffer: %s.\n", str_error(ret));
 		goto close_session;
 	}
-	printf("Buffer (%u): %p %zu.\n", rec.buffer.id, rec.buffer.base,
-	    rec.buffer.size);
+	printf("Buffer: %p %zu.\n", rec.buffer.base, rec.buffer.size);
 	uintptr_t ptr = 0;
 	as_get_physical_mapping(rec.buffer.base, &ptr);
@@ -222,5 +220,5 @@
 cleanup:
 	munmap(rec.buffer.base, rec.buffer.size);
-	audio_pcm_release_buffer(exch, rec.buffer.id);
+	audio_pcm_release_buffer(exch);
 close_session:
 	async_exchange_end(exch);
Index: uspace/drv/audio/sb16/dsp.c
===================================================================
--- uspace/drv/audio/sb16/dsp.c	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/drv/audio/sb16/dsp.c	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -46,5 +46,4 @@
 #include "dsp.h"
 
-#define BUFFER_ID 1
 #define MAX_BUFFER_SIZE (PAGE_SIZE)
 
@@ -221,5 +220,5 @@
 }
 
-int sb_dsp_get_buffer(sb_dsp_t *dsp, void **buffer, size_t *size, unsigned *id)
+int sb_dsp_get_buffer(sb_dsp_t *dsp, void **buffer, size_t *size)
 {
 	assert(dsp);
@@ -233,6 +232,6 @@
 	const int ret = sb_setup_buffer(dsp, *size);
 	if (ret == EOK) {
-		ddf_log_debug("Providing buffer(%u): %p, %zu B.",
-		    BUFFER_ID, dsp->buffer.data, dsp->buffer.size);
+		ddf_log_debug("Providing buffer: %p, %zu B.",
+		    dsp->buffer.data, dsp->buffer.size);
 
 		if (buffer)
@@ -240,16 +239,12 @@
 		if (size)
 			*size = dsp->buffer.size;
-		if (id)
-			*id = BUFFER_ID;
 	}
 	return ret;
 }
 
-int sb_dsp_set_event_session(sb_dsp_t *dsp, unsigned id, async_sess_t *session)
+int sb_dsp_set_event_session(sb_dsp_t *dsp, async_sess_t *session)
 {
 	assert(dsp);
 	assert(session);
-	if (id != BUFFER_ID)
-		return ENOENT;
 	if (dsp->event_session)
 		return EBUSY;
@@ -259,9 +254,7 @@
 }
 
-int sb_dsp_release_buffer(sb_dsp_t *dsp, unsigned id)
-{
-	assert(dsp);
-	if (id != BUFFER_ID)
-		return ENOENT;
+int sb_dsp_release_buffer(sb_dsp_t *dsp)
+{
+	assert(dsp);
 	sb_clear_buffer(dsp);
 	async_exchange_end(dsp->event_exchange);
@@ -274,5 +267,5 @@
 }
 
-int sb_dsp_start_playback(sb_dsp_t *dsp, unsigned id, unsigned parts,
+int sb_dsp_start_playback(sb_dsp_t *dsp, unsigned parts,
     unsigned channels, unsigned sampling_rate, pcm_sample_format_t format)
 {
@@ -289,9 +282,6 @@
 
 	/* Check supported parameters */
-	ddf_log_debug("Requested playback on buffer \"%u\" (%u parts): %uHz, "
-	    "%s, %u channel(s).", id, parts, sampling_rate,
-	    pcm_sample_format_str(format), channels);
-	if (id != BUFFER_ID)
-		return ENOENT;
+	ddf_log_debug("Requested playback (%u parts): %uHz, %s, %u channel(s).",
+	    parts, sampling_rate, pcm_sample_format_str(format), channels);
 	if (channels != 1 && channels != 2)
 		return ENOTSUP;
@@ -338,11 +328,9 @@
 }
 
-int sb_dsp_stop_playback(sb_dsp_t *dsp, unsigned id)
-{
-	assert(dsp);
-	if (id != BUFFER_ID)
-		return ENOENT;
+int sb_dsp_stop_playback(sb_dsp_t *dsp)
+{
+	assert(dsp);
 	sb_dsp_write(dsp, DMA_16B_EXIT);
-	ddf_log_debug("Stopping playback on buffer %u.", id);
+	ddf_log_debug("Stopping playback on buffer.");
 	async_msg_0(dsp->event_exchange, PCM_EVENT_PLAYBACK_TERMINATED);
 	async_exchange_end(dsp->event_exchange);
@@ -351,5 +339,5 @@
 }
 
-int sb_dsp_start_record(sb_dsp_t *dsp, unsigned id, unsigned parts,
+int sb_dsp_start_record(sb_dsp_t *dsp, unsigned parts,
     unsigned channels, unsigned sampling_rate, pcm_sample_format_t format)
 {
@@ -366,9 +354,6 @@
 
 	/* Check supported parameters */
-	ddf_log_debug("Requested recording on buffer \"%u\" (%u parts): %uHz, "
-	    "%s, %u channel(s).", id, parts, sampling_rate,
-	    pcm_sample_format_str(format), channels);
-	if (id != BUFFER_ID)
-		return ENOENT;
+	ddf_log_debug("Requested record (%u parts): %uHz, %s, %u channel(s).",
+	    parts, sampling_rate, pcm_sample_format_str(format), channels);
 	if (channels != 1 && channels != 2)
 		return ENOTSUP;
@@ -414,11 +399,9 @@
 }
 
-int sb_dsp_stop_record(sb_dsp_t *dsp, unsigned id)
-{
-	assert(dsp);
-	if (id != BUFFER_ID)
-		return ENOENT;
+int sb_dsp_stop_record(sb_dsp_t *dsp)
+{
+	assert(dsp);
 	sb_dsp_write(dsp, DMA_16B_EXIT);
-	ddf_log_debug("Stopping playback on buffer %u.", id);
+	ddf_log_debug("Stopped recording");
 	async_msg_0(dsp->event_exchange, PCM_EVENT_RECORDING_TERMINATED);
 	async_exchange_end(dsp->event_exchange);
Index: uspace/drv/audio/sb16/dsp.h
===================================================================
--- uspace/drv/audio/sb16/dsp.h	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/drv/audio/sb16/dsp.h	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -72,13 +72,13 @@
 void sb_dsp_interrupt(sb_dsp_t *dsp);
 
-int sb_dsp_get_buffer(sb_dsp_t *dsp, void **buffer, size_t *size, unsigned *id);
-int sb_dsp_set_event_session(sb_dsp_t *dsp, unsigned id, async_sess_t *session);
-int sb_dsp_release_buffer(sb_dsp_t *dsp, unsigned id);
-int sb_dsp_start_playback(sb_dsp_t *dsp, unsigned id, unsigned parts,
+int sb_dsp_get_buffer(sb_dsp_t *dsp, void **buffer, size_t *size);
+int sb_dsp_set_event_session(sb_dsp_t *dsp, async_sess_t *session);
+int sb_dsp_release_buffer(sb_dsp_t *dsp);
+int sb_dsp_start_playback(sb_dsp_t *dsp, unsigned parts,
     unsigned channels, unsigned sample_rate, pcm_sample_format_t format);
-int sb_dsp_stop_playback(sb_dsp_t *dsp, unsigned id);
-int sb_dsp_start_record(sb_dsp_t *dsp, unsigned id, unsigned parts,
+int sb_dsp_stop_playback(sb_dsp_t *dsp);
+int sb_dsp_start_record(sb_dsp_t *dsp, unsigned parts,
     unsigned channels, unsigned sample_rate, pcm_sample_format_t format);
-int sb_dsp_stop_record(sb_dsp_t *dsp, unsigned id);
+int sb_dsp_stop_record(sb_dsp_t *dsp);
 
 #endif
Index: uspace/drv/audio/sb16/pcm_iface.c
===================================================================
--- uspace/drv/audio/sb16/pcm_iface.c	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/drv/audio/sb16/pcm_iface.c	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -47,29 +47,28 @@
 }
 
-static int sb_get_buffer(ddf_fun_t *fun,
-    void **buffer, size_t *size, unsigned *id)
+static int sb_get_buffer(ddf_fun_t *fun, void **buffer, size_t *size)
 {
 	assert(fun);
 	assert(fun->driver_data);
 	sb_dsp_t *dsp = fun->driver_data;
-	return sb_dsp_get_buffer(dsp, buffer, size, id);
+	return sb_dsp_get_buffer(dsp, buffer, size);
 }
-static int sb_set_event_session(ddf_fun_t *fun, unsigned id, async_sess_t *sess)
+static int sb_set_event_session(ddf_fun_t *fun, async_sess_t *sess)
 {
 	assert(fun);
 	assert(fun->driver_data);
 	sb_dsp_t *dsp = fun->driver_data;
-	return sb_dsp_set_event_session(dsp, id, sess);
+	return sb_dsp_set_event_session(dsp, sess);
 }
 
-static int sb_release_buffer(ddf_fun_t *fun, unsigned id)
+static int sb_release_buffer(ddf_fun_t *fun)
 {
 	assert(fun);
 	assert(fun->driver_data);
 	sb_dsp_t *dsp = fun->driver_data;
-	return sb_dsp_release_buffer(dsp, id);
+	return sb_dsp_release_buffer(dsp);
 }
 
-static int sb_start_playback(ddf_fun_t *fun, unsigned id, unsigned parts,
+static int sb_start_playback(ddf_fun_t *fun, unsigned parts,
     unsigned channels, unsigned sample_rate, pcm_sample_format_t format)
 {
@@ -78,16 +77,16 @@
 	sb_dsp_t *dsp = fun->driver_data;
 	return sb_dsp_start_playback(
-	    dsp, id, parts, channels, sample_rate, format);
+	    dsp, parts, channels, sample_rate, format);
 }
 
-static int sb_stop_playback(ddf_fun_t *fun, unsigned id)
+static int sb_stop_playback(ddf_fun_t *fun)
 {
 	assert(fun);
 	assert(fun->driver_data);
 	sb_dsp_t *dsp = fun->driver_data;
-	return sb_dsp_stop_playback(dsp, id);
+	return sb_dsp_stop_playback(dsp);
 }
 
-static int sb_start_record(ddf_fun_t *fun, unsigned id, unsigned parts,
+static int sb_start_record(ddf_fun_t *fun, unsigned parts,
     unsigned channels, unsigned sample_rate, pcm_sample_format_t format)
 {
@@ -96,13 +95,13 @@
 	sb_dsp_t *dsp = fun->driver_data;
 	return sb_dsp_start_record(
-	    dsp, id, parts, channels, sample_rate, format);
+	    dsp, parts, channels, sample_rate, format);
 }
 
-static int sb_stop_record(ddf_fun_t *fun, unsigned id)
+static int sb_stop_record(ddf_fun_t *fun)
 {
 	assert(fun);
 	assert(fun->driver_data);
 	sb_dsp_t *dsp = fun->driver_data;
-	return sb_dsp_stop_record(dsp, id);
+	return sb_dsp_stop_record(dsp);
 }
 
Index: uspace/lib/drv/generic/remote_audio_pcm.c
===================================================================
--- uspace/lib/drv/generic/remote_audio_pcm.c	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/lib/drv/generic/remote_audio_pcm.c	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -83,13 +83,13 @@
 
 int audio_pcm_get_buffer(async_exch_t *exch, void **buffer, size_t *size,
-    unsigned *id, async_client_conn_t event_rec, void* arg)
-{
-	if (!exch || !buffer || !size || !id)
-		return EINVAL;
-
-	sysarg_t buffer_size = *size, buffer_id = 0;
-	const int ret = async_req_2_2(exch,
+    async_client_conn_t event_rec, void* arg)
+{
+	if (!exch || !buffer || !size)
+		return EINVAL;
+
+	sysarg_t buffer_size = *size;
+	const int ret = async_req_2_1(exch,
 	    DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), IPC_M_AUDIO_PCM_GET_BUFFER,
-	    (sysarg_t)buffer_size, &buffer_size, &buffer_id);
+	    (sysarg_t)buffer_size, &buffer_size);
 	if (ret == EOK) {
 		void *dst = NULL;
@@ -105,18 +105,17 @@
 		*buffer = dst;
 		*size = buffer_size;
-		*id = buffer_id;
 	}
 	return ret;
 }
 
-int audio_pcm_release_buffer(async_exch_t *exch, unsigned id)
+int audio_pcm_release_buffer(async_exch_t *exch)
 {
 	if (!exch)
 		return EINVAL;
-	return async_req_2_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
-	    IPC_M_AUDIO_PCM_RELEASE_BUFFER, id);
-}
-
-int audio_pcm_start_playback(async_exch_t *exch, unsigned id, unsigned parts,
+	return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
+	    IPC_M_AUDIO_PCM_RELEASE_BUFFER);
+}
+
+int audio_pcm_start_playback(async_exch_t *exch, unsigned parts,
     unsigned channels, unsigned sample_rate, pcm_sample_format_t format)
 {
@@ -128,17 +127,17 @@
 	const sysarg_t packed =
 	    (parts << 24) | (channels << 16) | (format & UINT16_MAX);
-	return async_req_4_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
-	    IPC_M_AUDIO_PCM_START_PLAYBACK, id, sample_rate, packed);
-}
-
-int audio_pcm_stop_playback(async_exch_t *exch, unsigned id)
+	return async_req_3_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
+	    IPC_M_AUDIO_PCM_START_PLAYBACK, sample_rate, packed);
+}
+
+int audio_pcm_stop_playback(async_exch_t *exch)
 {
 	if (!exch)
 		return EINVAL;
-	return async_req_2_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
-	    IPC_M_AUDIO_PCM_STOP_PLAYBACK, id);
-}
-
-int audio_pcm_start_record(async_exch_t *exch, unsigned id, unsigned parts,
+	return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
+	    IPC_M_AUDIO_PCM_STOP_PLAYBACK);
+}
+
+int audio_pcm_start_record(async_exch_t *exch, unsigned parts,
     unsigned channels, unsigned sample_rate, pcm_sample_format_t format)
 {
@@ -150,14 +149,14 @@
 	const sysarg_t packed =
 	    (parts << 24) | (channels << 16) | (format & UINT16_MAX);
-	return async_req_4_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
-	    IPC_M_AUDIO_PCM_START_RECORD, id, sample_rate, packed);
-}
-
-int audio_pcm_stop_record(async_exch_t *exch, unsigned id)
+	return async_req_3_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
+	    IPC_M_AUDIO_PCM_START_RECORD, sample_rate, packed);
+}
+
+int audio_pcm_stop_record(async_exch_t *exch)
 {
 	if (!exch)
 		return EINVAL;
-	return async_req_2_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
-	    IPC_M_AUDIO_PCM_STOP_RECORD, id);
+	return async_req_1_0(exch, DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE),
+	    IPC_M_AUDIO_PCM_STOP_RECORD);
 }
 
@@ -233,7 +232,6 @@
 	void *buffer = NULL;
 	size_t size = DEV_IPC_GET_ARG1(*call);
-	unsigned id = 0;
-	int ret = pcm_iface->get_buffer(fun, &buffer, &size, &id);
-	async_answer_2(callid, ret, size, id);
+	int ret = pcm_iface->get_buffer(fun, &buffer, &size);
+	async_answer_1(callid, ret, size);
 	if (ret != EOK || size == 0)
 		return;
@@ -246,5 +244,5 @@
 	if (!async_share_in_receive(&share_id, &share_size)) {
 		ddf_msg(LVL_DEBUG, "Failed to share pcm buffer.");
-		pcm_iface->release_buffer(fun, id);
+		pcm_iface->release_buffer(fun);
 		async_answer_0(share_id, EPARTY);
 		return;
@@ -254,5 +252,5 @@
 	if (share_size != size) {
 		ddf_msg(LVL_DEBUG, "Incorrect pcm buffer size requested.");
-		pcm_iface->release_buffer(fun, id);
+		pcm_iface->release_buffer(fun);
 		async_answer_0(share_id, ELIMIT);
 		return;
@@ -264,5 +262,5 @@
 	if (ret != EOK) {
 		ddf_msg(LVL_DEBUG, "Failed to share buffer.");
-		pcm_iface->release_buffer(fun, id);
+		pcm_iface->release_buffer(fun);
 		return;
 	}
@@ -277,12 +275,12 @@
 		if (sess == NULL) {
 			ddf_msg(LVL_DEBUG, "Failed to create event callback");
-			pcm_iface->release_buffer(fun, id);
+			pcm_iface->release_buffer(fun);
 			async_answer_0(callid, EAGAIN);
 			return;
 		}
-		ret = pcm_iface->set_event_session(fun, id, sess);
+		ret = pcm_iface->set_event_session(fun, sess);
 		if (ret != EOK) {
 			ddf_msg(LVL_DEBUG, "Failed to set event callback.");
-			pcm_iface->release_buffer(fun, id);
+			pcm_iface->release_buffer(fun);
 			async_answer_0(callid, ret);
 			return;
@@ -298,7 +296,6 @@
 	const audio_pcm_iface_t *pcm_iface = iface;
 
-	const unsigned id = DEV_IPC_GET_ARG1(*call);
 	const int ret = pcm_iface->release_buffer ?
-	    pcm_iface->release_buffer(fun, id) : ENOTSUP;
+	    pcm_iface->release_buffer(fun) : ENOTSUP;
 	async_answer_0(callid, ret);
 }
@@ -309,12 +306,11 @@
 	const audio_pcm_iface_t *pcm_iface = iface;
 
-	const unsigned id = DEV_IPC_GET_ARG1(*call);
-	const unsigned rate = DEV_IPC_GET_ARG2(*call);
-	const unsigned parts = (DEV_IPC_GET_ARG3(*call) >> 24) & UINT8_MAX;
-	const unsigned channels = (DEV_IPC_GET_ARG3(*call) >> 16) & UINT8_MAX;
-	const pcm_sample_format_t format =DEV_IPC_GET_ARG3(*call) & UINT16_MAX;
+	const unsigned rate = DEV_IPC_GET_ARG1(*call);
+	const unsigned parts = (DEV_IPC_GET_ARG2(*call) >> 24) & UINT8_MAX;
+	const unsigned channels = (DEV_IPC_GET_ARG2(*call) >> 16) & UINT8_MAX;
+	const pcm_sample_format_t format = DEV_IPC_GET_ARG2(*call) & UINT16_MAX;
 
 	const int ret = pcm_iface->start_playback
-	    ? pcm_iface->start_playback(fun, id, parts, channels, rate, format)
+	    ? pcm_iface->start_playback(fun, parts, channels, rate, format)
 	    : ENOTSUP;
 	async_answer_0(callid, ret);
@@ -326,7 +322,6 @@
 	const audio_pcm_iface_t *pcm_iface = iface;
 
-	const unsigned id = DEV_IPC_GET_ARG1(*call);
 	const int ret = pcm_iface->stop_playback ?
-	    pcm_iface->stop_playback(fun, id) : ENOTSUP;
+	    pcm_iface->stop_playback(fun) : ENOTSUP;
 	async_answer_0(callid, ret);
 }
@@ -337,12 +332,11 @@
 	const audio_pcm_iface_t *pcm_iface = iface;
 
-	const unsigned id = DEV_IPC_GET_ARG1(*call);
-	const unsigned rate = DEV_IPC_GET_ARG2(*call);
-	const unsigned parts = (DEV_IPC_GET_ARG3(*call) >> 24) & UINT8_MAX;
-	const unsigned channels = (DEV_IPC_GET_ARG3(*call) >> 16) & UINT8_MAX;
-	const pcm_sample_format_t format =DEV_IPC_GET_ARG3(*call) & UINT16_MAX;
+	const unsigned rate = DEV_IPC_GET_ARG1(*call);
+	const unsigned parts = (DEV_IPC_GET_ARG2(*call) >> 24) & UINT8_MAX;
+	const unsigned channels = (DEV_IPC_GET_ARG2(*call) >> 16) & UINT8_MAX;
+	const pcm_sample_format_t format = DEV_IPC_GET_ARG2(*call) & UINT16_MAX;
 
 	const int ret = pcm_iface->start_record
-	    ? pcm_iface->start_record(fun, id, parts, channels, rate, format)
+	    ? pcm_iface->start_record(fun, parts, channels, rate, format)
 	    : ENOTSUP;
 	async_answer_0(callid, ret);
@@ -354,7 +348,6 @@
 	const audio_pcm_iface_t *pcm_iface = iface;
 
-	const unsigned id = DEV_IPC_GET_ARG1(*call);
 	const int ret = pcm_iface->stop_record ?
-	    pcm_iface->stop_record(fun, id) : ENOTSUP;
+	    pcm_iface->stop_record(fun) : ENOTSUP;
 	async_answer_0(callid, ret);
 }
Index: uspace/lib/drv/include/audio_pcm_iface.h
===================================================================
--- uspace/lib/drv/include/audio_pcm_iface.h	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/lib/drv/include/audio_pcm_iface.h	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -52,28 +52,28 @@
 
 int audio_pcm_get_info_str(async_exch_t *, const char **);
-int audio_pcm_get_buffer(async_exch_t *, void **, size_t *, unsigned *,
+int audio_pcm_get_buffer(async_exch_t *, void **, size_t *,
     async_client_conn_t, void *);
-int audio_pcm_release_buffer(async_exch_t *, unsigned);
+int audio_pcm_release_buffer(async_exch_t *);
 
-int audio_pcm_start_playback(async_exch_t *, unsigned, unsigned,
+int audio_pcm_start_playback(async_exch_t *, unsigned,
     unsigned, unsigned, pcm_sample_format_t);
-int audio_pcm_stop_playback(async_exch_t *, unsigned);
+int audio_pcm_stop_playback(async_exch_t *);
 
-int audio_pcm_start_record(async_exch_t *, unsigned, unsigned,
+int audio_pcm_start_record(async_exch_t *, unsigned,
     unsigned, unsigned, pcm_sample_format_t);
-int audio_pcm_stop_record(async_exch_t *, unsigned);
+int audio_pcm_stop_record(async_exch_t *);
 
 /** Audio pcm communication interface. */
 typedef struct {
 	int (*get_info_str)(ddf_fun_t *, const char **);
-	int (*get_buffer)(ddf_fun_t *, void **, size_t *, unsigned *);
-	int (*release_buffer)(ddf_fun_t *, unsigned);
-	int (*set_event_session)(ddf_fun_t *, unsigned, async_sess_t *);
-	int (*start_playback)(ddf_fun_t *, unsigned, unsigned,
+	int (*get_buffer)(ddf_fun_t *, void **, size_t *);
+	int (*release_buffer)(ddf_fun_t *);
+	int (*set_event_session)(ddf_fun_t *, async_sess_t *);
+	int (*start_playback)(ddf_fun_t *, unsigned,
 	    unsigned, unsigned, pcm_sample_format_t);
-	int (*stop_playback)(ddf_fun_t *, unsigned);
-	int (*start_record)(ddf_fun_t *, unsigned, unsigned,
+	int (*stop_playback)(ddf_fun_t *);
+	int (*start_record)(ddf_fun_t *, unsigned,
 	    unsigned, unsigned, pcm_sample_format_t);
-	int (*stop_record)(ddf_fun_t *, unsigned);
+	int (*stop_record)(ddf_fun_t *);
 } audio_pcm_iface_t;
 
Index: uspace/srv/audio/hound/audio_device.c
===================================================================
--- uspace/srv/audio/hound/audio_device.c	(revision 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/srv/audio/hound/audio_device.c	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -80,5 +80,4 @@
 	fibril_mutex_initialize(&dev->buffer.guard);
 	fibril_condvar_initialize(&dev->buffer.wc);
-	dev->buffer.id = 0;
 	dev->buffer.base = NULL;
 	dev->buffer.position = NULL;
@@ -232,5 +231,5 @@
 	async_exch_t *exch = async_exchange_begin(dev->sess);
 	const int ret = audio_pcm_get_buffer(exch, &dev->buffer.base,
-	    &dev->buffer.size, &dev->buffer.id, device_event_callback, dev);
+	    &dev->buffer.size, device_event_callback, dev);
 	async_exchange_end(exch);
 	return ret;
@@ -256,5 +255,5 @@
 
 	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_release_buffer(exch, dev->buffer.id);
+	const int ret = audio_pcm_release_buffer(exch);
 	async_exchange_end(exch);
 	if (ret == EOK) {
@@ -274,5 +273,5 @@
 
 	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_start_playback(exch, dev->buffer.id,
+	const int ret = audio_pcm_start_playback(exch,
 	    BUFFER_BLOCKS, dev->sink.format.channels,
 	    dev->sink.format.sampling_rate, dev->sink.format.sample_format);
@@ -286,5 +285,5 @@
 
 	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_stop_playback(exch, dev->buffer.id);
+	const int ret = audio_pcm_stop_playback(exch);
 	async_exchange_end(exch);
 	return ret;
@@ -296,5 +295,5 @@
 
 	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_start_record(exch, dev->buffer.id,
+	const int ret = audio_pcm_start_record(exch,
 	    BUFFER_BLOCKS, dev->sink.format.channels,
 	    dev->sink.format.sampling_rate, dev->sink.format.sample_format);
@@ -308,5 +307,5 @@
 
 	async_exch_t *exch = async_exchange_begin(dev->sess);
-	const int ret = audio_pcm_stop_record(exch, dev->buffer.id);
+	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 44d13113c58c0326c9815eee97a00f42642449bb)
+++ uspace/srv/audio/hound/audio_device.h	(revision b4970183584d3b011f21b3b9d7baa1d10beca9b6)
@@ -55,5 +55,4 @@
 		fibril_mutex_t guard;
 		fibril_condvar_t wc;
-		unsigned id;
 		void *base;
 		size_t size;
