Index: uspace/lib/c/generic/async_sess.c
===================================================================
--- uspace/lib/c/generic/async_sess.c	(revision d3a1ade3c73fdb219ddf9d38ba153ae1626addf9)
+++ uspace/lib/c/generic/async_sess.c	(revision d1c041a5086a834c796fe8fef337b4b257b1fc8e)
@@ -146,6 +146,20 @@
 void async_session_destroy(async_sess_t *sess)
 {
+	conn_node_t *conn;
+
+	/* We did not connect the phone so we do not hang it up either. */
 	sess->sess_phone = -1;
-	/* todo */
+
+	/* Tear down all data connections. */
+	while (!list_empty(&sess->conn_head)) {
+		conn = list_get_instance(sess->conn_head.next, conn_node_t,
+		    conn_link);
+
+		list_remove(&conn->conn_link);
+		list_remove(&conn->global_link);
+		
+		ipc_hangup(conn->data_phone);
+		free(conn);
+	}
 }
 
