Index: uspace/srv/audio/hound/hound_ctx.c
===================================================================
--- uspace/srv/audio/hound/hound_ctx.c	(revision b893cd6e38419778cf2a6ff28cf08e07a9b8a4db)
+++ uspace/srv/audio/hound/hound_ctx.c	(revision aab8e3d30693d2db733f2887b6b850c66fe275d3)
@@ -39,11 +39,4 @@
 #include "hound_ctx.h"
 
-static void hound_ctx_init_common(hound_ctx_t *ctx)
-{
-	if (!ctx)
-		return;
-	link_initialize(&ctx->link);
-}
-
 hound_ctx_t *hound_record_ctx_get(const char *name)
 {
@@ -54,5 +47,20 @@
 {
 	hound_ctx_t *ctx = malloc(sizeof(hound_ctx_t));
-	hound_ctx_init_common(ctx);
+	if (ctx) {
+		link_initialize(&ctx->link);
+		ctx->sink = NULL;
+		ctx->source = malloc(sizeof(audio_source_t));
+		if (!ctx->source) {
+			free(ctx);
+			return NULL;
+		}
+		const int ret = audio_source_init(ctx->source, name, ctx, NULL,
+		    NULL, &AUDIO_FORMAT_ANY);
+		if (ret != EOK) {
+			free(ctx->source);
+			free(ctx);
+			return NULL;
+		}
+	}
 	return ctx;
 }
@@ -62,4 +70,10 @@
 	assert(ctx);
 	assert(!link_in_use(&ctx->link));
+	if (ctx->source)
+		audio_source_fini(ctx->source);
+	if (ctx->sink)
+		audio_sink_fini(ctx->sink);
+	free(ctx->source);
+	free(ctx->sink);
 	free(ctx);
 }
Index: uspace/srv/audio/hound/hound_ctx.h
===================================================================
--- uspace/srv/audio/hound/hound_ctx.h	(revision b893cd6e38419778cf2a6ff28cf08e07a9b8a4db)
+++ uspace/srv/audio/hound/hound_ctx.h	(revision aab8e3d30693d2db733f2887b6b850c66fe275d3)
@@ -39,12 +39,17 @@
 #include <adt/list.h>
 #include <hound/protocol.h>
+#include "audio_source.h"
+#include "audio_sink.h"
 
 typedef struct {
 	link_t link;
+	list_t streams;
+	audio_source_t *source;
+	audio_sink_t *sink;
 } hound_ctx_t;
 
 static inline hound_ctx_t *hound_ctx_from_link(link_t *l)
 {
-	return list_get_instance(l, hound_ctx_t, link);
+	return l ? list_get_instance(l, hound_ctx_t, link) : NULL;
 }
 
