Index: uspace/srv/audio/hound/audio_device.c
===================================================================
--- uspace/srv/audio/hound/audio_device.c	(revision afd4fc7a43884adea65e30f6c1f606fc848d32fe)
+++ uspace/srv/audio/hound/audio_device.c	(revision 5c98bb285ea6f97fbb497faf9555138f22a7ff04)
@@ -79,4 +79,5 @@
 	dev->buffer.position = NULL;
 	dev->buffer.size = 0;
+	dev->buffer.fragment_size = 0;
 
 	log_verbose("Initialized device (%p) '%s' with id %u.",
@@ -111,9 +112,7 @@
 		    dev->buffer.base, dev->buffer.size);
 
-		log_verbose("Mixed inputs: %zu/(%u * %u)",
-		    dev->buffer.size, BUFFER_PARTS, pcm_format_frame_size(&dev->sink.format));
-		const unsigned frames = dev->buffer.size /
-		    (BUFFER_PARTS * pcm_format_frame_size(&dev->sink.format));
-		log_verbose("FRAME COUNT %u", frames);
+		const unsigned frames = dev->buffer.fragment_size /
+		    pcm_format_frame_size(&dev->sink.format);
+		log_verbose("Fragment frame count %u", frames);
 		ret = audio_pcm_start_playback_fragment(dev->sess, frames,
 		    dev->sink.format.channels, dev->sink.format.sampling_rate,
@@ -151,5 +150,5 @@
 	assert(source);
 	audio_device_t *dev = source->private_data;
-	if (new && list_count(&source->connections)) {
+	if (new && list_count(&source->connections) == 1) {
 		int ret = get_buffer(dev);
 		if (ret != EOK) {
@@ -158,6 +157,6 @@
 			return ret;
 		}
-		const unsigned frames = dev->buffer.size /
-		    (BUFFER_PARTS * pcm_format_frame_size(&dev->sink.format));
+		const unsigned frames = dev->buffer.fragment_size /
+		    pcm_format_frame_size(&dev->sink.format);
 		ret = audio_pcm_start_capture_fragment(dev->sess, frames,
 		    dev->sink.format.channels, dev->sink.format.sampling_rate,
@@ -208,5 +207,5 @@
 			if (dev->buffer.position) {
 				dev->buffer.position +=
-				    (dev->buffer.size / BUFFER_PARTS);
+				    dev->buffer.fragment_size;
 			}
 			if ((!dev->buffer.position) ||
@@ -217,5 +216,5 @@
 			}
 			audio_sink_mix_inputs(&dev->sink, dev->buffer.position,
-			    dev->buffer.size / BUFFER_PARTS);
+			    dev->buffer.fragment_size);
 			struct timeval time2;
 			getuptime(&time2);
@@ -261,6 +260,10 @@
 	dev->buffer.size = 0;
 
-	return audio_pcm_get_buffer(dev->sess, &dev->buffer.base,
+	const int ret = audio_pcm_get_buffer(dev->sess, &dev->buffer.base,
 	    &dev->buffer.size);
+	if (ret == EOK)
+		dev->buffer.fragment_size = dev->buffer.size / BUFFER_PARTS;
+	return ret;
+
 }
 
Index: uspace/srv/audio/hound/audio_device.h
===================================================================
--- uspace/srv/audio/hound/audio_device.h	(revision afd4fc7a43884adea65e30f6c1f606fc848d32fe)
+++ uspace/srv/audio/hound/audio_device.h	(revision 5c98bb285ea6f97fbb497faf9555138f22a7ff04)
@@ -58,4 +58,5 @@
 		size_t size;
 		void *position;
+		size_t fragment_size;
 	} buffer;
 	audio_source_t source;
