Index: uspace/srv/audio/hound/audio_device.c
===================================================================
--- uspace/srv/audio/hound/audio_device.c	(revision 9b2ac3d03cc02fb5c915ea8a9e6e333456f091c4)
+++ uspace/srv/audio/hound/audio_device.c	(revision fd5c0b787d3290fdca836fd13a32c863fea60267)
@@ -183,20 +183,32 @@
 		ipc_callid_t callid = async_get_call(&call);
 		async_answer_0(callid, EOK);
-		if (IPC_GET_IMETHOD(call) != IPC_FIRST_USER_METHOD) {
-			log_debug("Unknown event.\n");
-			continue;
-		}
-		// Assume playback for now
-		if (dev->buffer.position) {
-			dev->buffer.position += dev->buffer.size / BUFFER_BLOCKS;
-		}
-		if (!dev->buffer.position ||
-		    dev->buffer.position >= dev->buffer.base + dev->buffer.size)
-		{
-			dev->buffer.position = dev->buffer.base;
-		}
-		audio_sink_mix_inputs(
-		    &dev->sink, dev->buffer.base,
-		    dev->buffer.size / BUFFER_BLOCKS);
+		switch(IPC_GET_IMETHOD(call)) {
+		case PCM_EVENT_PLAYBACK_DONE: {
+			if (dev->buffer.position) {
+				dev->buffer.position +=
+				    dev->buffer.size / BUFFER_BLOCKS;
+			}
+			if (!dev->buffer.position ||
+			    dev->buffer.position >=
+			        dev->buffer.base + dev->buffer.size)
+			{
+				dev->buffer.position = dev->buffer.base;
+			}
+			audio_sink_mix_inputs(&dev->sink, dev->buffer.position,
+			    dev->buffer.size / BUFFER_BLOCKS);
+			break;
+		}
+		case PCM_EVENT_PLAYBACK_TERMINATED: {
+			log_verbose("Playback terminated!");
+			return;
+			break;
+		}
+		case PCM_EVENT_RECORDING_DONE: {
+			break;
+		}
+		case PCM_EVENT_RECORDING_TERMINATED:
+			log_verbose("Recording terminated!");
+			break;
+		}
 
 	}
