Index: daemon/graph.c
===================================================================
--- daemon/graph.c (revision dd822c7476d99ae99aae0264ab774609ed0ef896)
+++ daemon/graph.c (revision e06f5b73dda002bb01796ae8e6370256f7412929)
@@ -30,4 +30,5 @@
 #include "../dbus/error.h"
 #include "../dbus_constants.h"
+#include "virtualizer.h"
 
 struct ladish_graph_port
@@ -2171,5 +2172,5 @@
     client_ptr = list_entry(client_node_ptr, struct ladish_graph_client, siblings);
 
-    if (skip_hidden && client_ptr->hidden)
+    if (skip_hidden && client_ptr->hidden && !ladish_client_has_app(client_ptr->client))
     {
       continue;
@@ -2206,5 +2207,5 @@
       port_ptr = list_entry(port_node_ptr, struct ladish_graph_port, siblings_client);
 
-      if (skip_hidden && port_ptr->hidden)
+      if (skip_hidden && port_ptr->hidden && !ladish_client_has_app(port_ptr->client_ptr->client))
       {
         continue;
@@ -2238,4 +2239,17 @@
 }
 
+static bool is_system_client(ladish_client_handle client)
+{
+  uuid_t uuid;
+  ladish_client_get_uuid(client, uuid);
+  return ladish_virtualizer_is_system_client(uuid);
+}
+
+#define is_port_interesting(port_ptr) (                     \
+    ladish_client_has_app(port_ptr->client_ptr->client) ||  \
+    ladish_port_is_link(port_ptr->port) ||                  \
+    is_system_client(port_ptr->client_ptr->client)          \
+    )
+
 bool
 ladish_graph_iterate_connections(
@@ -2257,5 +2271,8 @@
     connection_ptr = list_entry(node_ptr, struct ladish_graph_connection, siblings);
 
-    if (skip_hidden && connection_ptr->hidden)
+    if (skip_hidden &&
+        connection_ptr->hidden &&
+        (!is_port_interesting(connection_ptr->port1_ptr) ||
+         !is_port_interesting(connection_ptr->port2_ptr)))
     {
       continue;
Index: daemon/virtualizer.c
===================================================================
--- daemon/virtualizer.c (revision ac1de1cc6ac4cf9a23690ce7da836191ef3bb9c4)
+++ daemon/virtualizer.c (revision e06f5b73dda002bb01796ae8e6370256f7412929)
@@ -458,4 +458,6 @@
   uuid_t jclient_uuid;
   uuid_t vclient_uuid;
+  bool has_app;
+  uuid_t app_uuid;
   char * alsa_client_name;
   char * alsa_port_name;
@@ -484,4 +486,6 @@
     goto exit;
   }
+
+  has_app = ladish_client_get_app(jack_client, app_uuid);
 
   /* find the virtual graph that owns the app that owns the client that owns the appeared port */
@@ -707,4 +711,9 @@
 
       ladish_client_interlink(vclient, jack_client);
+
+      if (has_app)
+      {
+        ladish_client_set_app(vclient, app_uuid);
+      }
 
       if (!ladish_graph_add_client(vgraph, vclient, jack_client_name, false))
@@ -1255,2 +1264,19 @@
 }
 #undef vgraph
+
+bool
+ladish_virtualizer_is_system_client(
+  uuid_t uuid)
+{
+  if (uuid_compare(uuid, g_system_capture_uuid) == 0)
+  {
+    return true;
+  }
+
+  if (uuid_compare(uuid, g_system_playback_uuid) == 0)
+  {
+    return true;
+  }
+
+  return false;
+}
Index: daemon/virtualizer.h
===================================================================
--- daemon/virtualizer.h (revision ac1de1cc6ac4cf9a23690ce7da836191ef3bb9c4)
+++ daemon/virtualizer.h (revision e06f5b73dda002bb01796ae8e6370256f7412929)
@@ -68,4 +68,8 @@
   const char * new_app_name);
 
+bool
+ladish_virtualizer_is_system_client(
+  uuid_t uuid);
+
 void
 ladish_virtualizer_destroy(
