Index: uspace/srv/logger/logger.h
===================================================================
--- uspace/srv/logger/logger.h	(revision f6bc83a793a7ad8abd2ad83063d699b6dfce0754)
+++ uspace/srv/logger/logger.h	(revision ef5be68dd7938b18402735c2a602b0087f9b704c)
@@ -62,4 +62,5 @@
 void namespace_destroy(logging_namespace_t *);
 logging_namespace_t *namespace_reader_attach(const char *);
+logging_namespace_t *namespace_writer_attach(const char *);
 void namespace_reader_detach(logging_namespace_t *);
 void namespace_writer_detach(logging_namespace_t *);
Index: uspace/srv/logger/main.c
===================================================================
--- uspace/srv/logger/main.c	(revision f6bc83a793a7ad8abd2ad83063d699b6dfce0754)
+++ uspace/srv/logger/main.c	(revision ef5be68dd7938b18402735c2a602b0087f9b704c)
@@ -47,5 +47,5 @@
 #include "logger.h"
 
-static logging_namespace_t *register_namespace(void)
+static logging_namespace_t *find_namespace_and_attach_writer(void)
 {
 	ipc_call_t call;
@@ -65,5 +65,5 @@
 	}
 
-	logging_namespace_t *result = namespace_create((const char *) name);
+	logging_namespace_t *result = namespace_writer_attach((const char *) name);
 
 	free(name);
@@ -224,5 +224,5 @@
 		/* First call has to be the registration. */
 		async_answer_0(iid, EOK);
-		namespace = register_namespace();
+		namespace = find_namespace_and_attach_writer();
 		if (namespace == NULL) {
 			fprintf(stderr, NAME ": failed to register namespace.\n");
Index: uspace/srv/logger/namespace.c
===================================================================
--- uspace/srv/logger/namespace.c	(revision f6bc83a793a7ad8abd2ad83063d699b6dfce0754)
+++ uspace/srv/logger/namespace.c	(revision ef5be68dd7938b18402735c2a602b0087f9b704c)
@@ -42,5 +42,5 @@
 struct logging_namespace {
 	fibril_mutex_t guard;
-	bool has_writer;
+	size_t writers_count;
 	bool has_reader;
 	const char *name;
@@ -114,5 +114,5 @@
 	prodcons_initialize(&namespace->messages);
 	namespace->has_reader = false;
-	namespace->has_writer = true;
+	namespace->writers_count = 0;
 	link_initialize(&namespace->link);
 
@@ -135,5 +135,5 @@
 
 	fibril_mutex_lock(&namespace->guard);
-	if (namespace->has_reader || namespace->has_writer) {
+	if (namespace->has_reader || (namespace->writers_count > 0)) {
 		fibril_mutex_unlock(&namespace->guard);
 		fibril_mutex_unlock(&namespace_list_guard);
@@ -175,4 +175,25 @@
 }
 
+logging_namespace_t *namespace_writer_attach(const char *name)
+{
+	logging_namespace_t *namespace = NULL;
+
+	fibril_mutex_lock(&namespace_list_guard);
+
+	namespace = namespace_find_no_lock(name);
+
+	if (namespace == NULL) {
+		namespace = namespace_create(name);
+	}
+
+	fibril_mutex_lock(&namespace->guard);
+	namespace->writers_count++;
+	fibril_mutex_unlock(&namespace->guard);
+
+	fibril_mutex_unlock(&namespace_list_guard);
+
+	return namespace;
+}
+
 void namespace_reader_detach(logging_namespace_t *namespace)
 {
@@ -187,5 +208,6 @@
 {
 	fibril_mutex_lock(&namespace->guard);
-	namespace->has_writer = false;
+	assert(namespace->writers_count > 0);
+	namespace->writers_count--;
 	fibril_mutex_unlock(&namespace->guard);
 
