Index: uspace/lib/graph/graph.c
===================================================================
--- uspace/lib/graph/graph.c	(revision 984a9ba2fa05c490a7066737655ed19130c714e8)
+++ uspace/lib/graph/graph.c	(revision e3306d0477902705968eca74bbf2f4b766535c78)
@@ -70,5 +70,5 @@
 {
 	link_initialize(&vs->link);
-	atomic_set(&vs->ref_cnt, 0);
+	atomic_flag_clear(&vs->claimed);
 	vs->notif_sess = NULL;
 	fibril_mutex_initialize(&vs->mode_mtx);
@@ -83,5 +83,5 @@
 	// TODO
 	link_initialize(&rnd->link);
-	atomic_set(&rnd->ref_cnt, 0);
+	refcount_init(&rnd->ref_cnt);
 }
 
@@ -173,4 +173,7 @@
 	}
 
+	if (rnd)
+		refcount_up(&rnd->ref_cnt);
+
 	fibril_mutex_unlock(&renderer_list_mtx);
 
@@ -200,5 +203,5 @@
 void graph_destroy_visualizer(visualizer_t *vs)
 {
-	assert(atomic_get(&vs->ref_cnt) == 0);
+	assert(!atomic_flag_test_and_set(&vs->claimed));
 	assert(vs->notif_sess == NULL);
 	assert(!fibril_mutex_is_locked(&vs->mode_mtx));
@@ -214,7 +217,6 @@
 {
 	// TODO
-	assert(atomic_get(&rnd->ref_cnt) == 0);
-
-	free(rnd);
+	if (refcount_down(&rnd->ref_cnt))
+		free(rnd);
 }
 
@@ -493,5 +495,5 @@
 {
 	/* Claim the visualizer. */
-	if (!cas(&vs->ref_cnt, 0, 1)) {
+	if (atomic_flag_test_and_set(&vs->claimed)) {
 		async_answer_0(icall, ELIMIT);
 		return;
@@ -559,5 +561,5 @@
 	async_hangup(vs->notif_sess);
 	vs->notif_sess = NULL;
-	atomic_set(&vs->ref_cnt, 0);
+	atomic_flag_clear(&vs->claimed);
 }
 
@@ -567,5 +569,4 @@
 
 	/* Accept the connection. */
-	atomic_inc(&rnd->ref_cnt);
 	async_answer_0(icall, EOK);
 
@@ -588,5 +589,5 @@
 
 terminate:
-	atomic_dec(&rnd->ref_cnt);
+	graph_destroy_renderer(rnd);
 }
 
