Index: uspace/lib/graph/graph.c
===================================================================
--- uspace/lib/graph/graph.c	(revision c8ea6eca1c41df9b67e9c83a3b830bb036e10da8)
+++ uspace/lib/graph/graph.c	(revision e90cfa68438860942f686f82beddadc619e11d9a)
@@ -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);
 }
 
Index: uspace/lib/graph/graph.h
===================================================================
--- uspace/lib/graph/graph.h	(revision c8ea6eca1c41df9b67e9c83a3b830bb036e10da8)
+++ uspace/lib/graph/graph.h	(revision e90cfa68438860942f686f82beddadc619e11d9a)
@@ -40,5 +40,6 @@
 #include <loc.h>
 #include <async.h>
-#include <atomic.h>
+#include <stdatomic.h>
+#include <refcount.h>
 #include <fibril_synch.h>
 #include <adt/list.h>
@@ -121,5 +122,5 @@
 	 * Field is fully managed by libgraph.
 	 */
-	atomic_t ref_cnt;
+	atomic_flag claimed;
 
 	/**
@@ -272,5 +273,5 @@
 	link_t link;
 
-	atomic_t ref_cnt;
+	atomic_refcount_t ref_cnt;
 
 	sysarg_t reg_svc_handle;
