Index: uspace/srv/logger/initlvl.c
===================================================================
--- uspace/srv/logger/initlvl.c	(revision 5df257077a2eb3d939122d95f8fcecad4b07ff62)
+++ uspace/srv/logger/initlvl.c	(revision 3272be1101feae98362bf4f9837caa330107cb01)
@@ -67,5 +67,5 @@
 
 	log->logged_level = level;
-	log->ref_counter++;
+	refcount_up(&log->ref_counter);
 
 	log_unlock(log);
Index: uspace/srv/logger/logger.h
===================================================================
--- uspace/srv/logger/logger.h	(revision 5df257077a2eb3d939122d95f8fcecad4b07ff62)
+++ uspace/srv/logger/logger.h	(revision 3272be1101feae98362bf4f9837caa330107cb01)
@@ -41,4 +41,5 @@
 #include <async.h>
 #include <stdbool.h>
+#include <refcount.h>
 #include <fibril_synch.h>
 #include <stdio.h>
@@ -64,5 +65,5 @@
 	link_t link;
 
-	size_t ref_counter;
+	atomic_refcount_t ref_counter;
 
 	fibril_mutex_t guard;
Index: uspace/srv/logger/logs.c
===================================================================
--- uspace/srv/logger/logs.c	(revision 5df257077a2eb3d939122d95f8fcecad4b07ff62)
+++ uspace/srv/logger/logs.c	(revision 3272be1101feae98362bf4f9837caa330107cb01)
@@ -99,4 +99,6 @@
 	fibril_mutex_initialize(&result->guard);
 	link_initialize(&result->link);
+	refcount_init(&result->ref_counter);
+	refcount_up(&result->ref_counter);
 	result->parent = parent;
 
@@ -125,7 +127,5 @@
 		list_append(&result->link, &log_list);
 		if (result->parent != NULL) {
-			fibril_mutex_lock(&result->parent->guard);
-			result->parent->ref_counter++;
-			fibril_mutex_unlock(&result->parent->guard);
+			refcount_up(&result->parent->ref_counter);
 		}
 	}
@@ -209,12 +209,12 @@
 {
 	assert(fibril_mutex_is_locked(&log->guard));
-	assert(log->ref_counter > 0);
-
-	/* We are definitely not the last ones. */
-	if (log->ref_counter > 1) {
-		log->ref_counter--;
+
+	if (!refcount_down(&log->ref_counter)) {
+		/* We are definitely not the last ones. */
 		fibril_mutex_unlock(&log->guard);
 		return;
 	}
+
+
 
 	/*
@@ -225,4 +225,5 @@
 	 *   LOCKED(list), wants to LOCK(log)
 	 */
+	refcount_up(&log->ref_counter);
 	fibril_mutex_unlock(&log->guard);
 
@@ -234,8 +235,6 @@
 	 */
 	fibril_mutex_lock(&log->guard);
-	assert(log->ref_counter > 0);
-	log->ref_counter--;
-
-	if (log->ref_counter > 0) {
+
+	if (!refcount_down(&log->ref_counter)) {
 		/*
 		 * Meanwhile, someone else increased the ref counter.
@@ -255,6 +254,4 @@
 	 * - destroy dest (if top-level log)
 	 */
-	assert(log->ref_counter == 0);
-
 	list_remove(&log->link);
 	fibril_mutex_unlock(&log_list_guard);
@@ -314,5 +311,5 @@
 
 	assert(fibril_mutex_is_locked(&new_log->guard));
-	new_log->ref_counter++;
+	refcount_up(&new_log->ref_counter);
 
 	logs->logs[logs->logs_count] = new_log;
