Index: uspace/lib/c/generic/io/log.c
===================================================================
--- uspace/lib/c/generic/io/log.c	(revision d6ddeb7d7df07c3b7a80fe9eed08ad79ab2e62d3)
+++ uspace/lib/c/generic/io/log.c	(revision cba45affa1185205ef668562c3239439a610819d)
@@ -62,4 +62,6 @@
 #define MESSAGE_BUFFER_SIZE 4096
 
+static sysarg_t toplog_id;
+
 static int logger_register(async_sess_t *session, const char *prog_name)
 {
@@ -69,5 +71,6 @@
 	}
 
-	aid_t reg_msg = async_send_0(exchange, LOGGER_REGISTER, NULL);
+	ipc_call_t answer;
+	aid_t reg_msg = async_send_0(exchange, LOGGER_WRITER_CREATE_TOPLEVEL_LOG, &answer);
 	int rc = async_data_write_start(exchange, prog_name, str_size(prog_name));
 	sysarg_t reg_msg_rc;
@@ -80,5 +83,10 @@
 	}
 
-	return reg_msg_rc;
+	if (reg_msg_rc != EOK)
+		return reg_msg_rc;
+
+	toplog_id = IPC_GET_ARG1(answer);
+
+	return EOK;
 }
 
@@ -90,6 +98,6 @@
 	}
 
-	aid_t reg_msg = async_send_2(exchange, LOGGER_MESSAGE,
-	    ctx, level, NULL);
+	aid_t reg_msg = async_send_3(exchange, LOGGER_WRITER_MESSAGE,
+	    toplog_id, ctx, level, NULL);
 	int rc = async_data_write_start(exchange, message, str_size(message));
 	sysarg_t reg_msg_rc;
@@ -183,5 +191,5 @@
 
 	ipc_call_t answer;
-	aid_t reg_msg = async_send_0(exchange, LOGGER_CREATE_CONTEXT, &answer);
+	aid_t reg_msg = async_send_1(exchange, LOGGER_WRITER_CREATE_SUB_LOG, toplog_id, &answer);
 	int rc = async_data_write_start(exchange, name, str_size(name));
 	sysarg_t reg_msg_rc;
Index: uspace/lib/c/generic/io/logctl.c
===================================================================
--- uspace/lib/c/generic/io/logctl.c	(revision d6ddeb7d7df07c3b7a80fe9eed08ad79ab2e62d3)
+++ uspace/lib/c/generic/io/logctl.c	(revision cba45affa1185205ef668562c3239439a610819d)
@@ -90,5 +90,5 @@
 		return rc;
 
-	aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_NAMESPACE_LEVEL,
+	aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_TOP_LOG_LEVEL,
 	    new_level, NULL);
 	rc = async_data_write_start(exchange, namespace, str_size(namespace));
@@ -112,5 +112,5 @@
 		return rc;
 
-	aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_CONTEXT_LEVEL,
+	aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_LOG_LEVEL,
 	    new_level, NULL);
 	rc = async_data_write_start(exchange, namespace, str_size(namespace));
Index: uspace/lib/c/include/ipc/logger.h
===================================================================
--- uspace/lib/c/include/ipc/logger.h	(revision d6ddeb7d7df07c3b7a80fe9eed08ad79ab2e62d3)
+++ uspace/lib/c/include/ipc/logger.h	(revision cba45affa1185205ef668562c3239439a610819d)
@@ -37,15 +37,15 @@
 
 typedef enum {
-	LOGGER_CTL_GET_DEFAULT_LEVEL = IPC_FIRST_USER_METHOD,
-	LOGGER_CTL_SET_DEFAULT_LEVEL,
-	LOGGER_CTL_SET_NAMESPACE_LEVEL,
-	LOGGER_CTL_SET_CONTEXT_LEVEL
+	LOGGER_CTL_SET_DEFAULT_LEVEL = IPC_FIRST_USER_METHOD,
+	LOGGER_CTL_SET_TOP_LOG_LEVEL,
+	LOGGER_CTL_SET_LOG_LEVEL
 } logger_control_request_t;
 
 typedef enum {
-	LOGGER_REGISTER = IPC_FIRST_USER_METHOD,
-	LOGGER_CREATE_CONTEXT,
-	LOGGER_MESSAGE
-} logger_sink_request_t;
+	/** Followed by STRING, returns ID to be used for CREATE_SUB_LOG */
+	LOGGER_WRITER_CREATE_TOPLEVEL_LOG = IPC_FIRST_USER_METHOD,
+	LOGGER_WRITER_CREATE_SUB_LOG,
+	LOGGER_WRITER_MESSAGE
+} logger_writer_request_t;
 
 typedef enum {
