Index: uspace/lib/hound/include/hound/client.h
===================================================================
--- uspace/lib/hound/include/hound/client.h	(revision 13318d14ea814c2e26f60d4c76e3b4bb5b88a91a)
+++ uspace/lib/hound/include/hound/client.h	(revision 7294b5beee98f9d703c3bd5df37d6954a88845c2)
@@ -58,6 +58,9 @@
 int hound_context_set_main_stream_format(hound_context_t *hound,
     unsigned channels, unsigned rate, pcm_sample_format_t format);
-int hound_get_output_targets(const char **names, size_t *count);
-int hound_get_input_targets(const char **names, size_t *count);
+
+int hound_context_get_available_targets(hound_context_t *hound,
+    const char ***names, size_t *count);
+int hound_context_get_connected_targets(hound_context_t *hound,
+    const char ***names, size_t *count);
 
 int hound_context_connect_target(hound_context_t *hound, const char* target);
Index: uspace/lib/hound/src/client.c
===================================================================
--- uspace/lib/hound/src/client.c	(revision 13318d14ea814c2e26f60d4c76e3b4bb5b88a91a)
+++ uspace/lib/hound/src/client.c	(revision 7294b5beee98f9d703c3bd5df37d6954a88845c2)
@@ -95,5 +95,5 @@
 		new_context->id = hound_service_register_context(
 		    new_context->session, new_context->name, record);
-		if (new_context->id <= 0) {
+		if (hound_context_id_err(new_context->id) != EOK) {
 			free(new_context->name);
 			free(new_context);
@@ -136,16 +136,23 @@
 }
 
-int hound_get_output_targets(const char **names, size_t *count)
-{
+int hound_context_get_available_targets(hound_context_t *hound,
+    const char ***names, size_t *count)
+{
+	assert(hound);
 	assert(names);
 	assert(count);
-	return ENOTSUP;
-}
-
-int hound_get_input_targets(const char **names, size_t *count)
-{
+	return hound_service_get_list_all(hound->session, names, count,
+	    hound->record ? HOUND_SOURCE_DEVS : HOUND_SINK_DEVS);
+}
+
+int hound_context_get_connected_targets(hound_context_t *hound,
+    const char ***names, size_t *count)
+{
+	assert(hound);
 	assert(names);
 	assert(count);
-	return ENOTSUP;
+	return hound_service_get_list(hound->session, names, count,
+	    HOUND_CONNECTED | (hound->record ?
+	        HOUND_SOURCE_DEVS : HOUND_SINK_DEVS), hound->name);
 }
 
@@ -153,5 +160,10 @@
 {
 	assert(hound);
-	return ENOTSUP;
+	if (hound->record)
+		return hound_service_connect_source_sink(
+		    hound->session, target, hound->name);
+	else
+		return hound_service_connect_source_sink(
+		    hound->session, hound->name, target);
 }
 
@@ -159,5 +171,10 @@
 {
 	assert(hound);
-	return ENOTSUP;
+	if (hound->record)
+		return hound_service_disconnect_source_sink(
+		    hound->session, target, hound->name);
+	else
+		return hound_service_disconnect_source_sink(
+		    hound->session, hound->name, target);
 }
 
