Index: uspace/drv/char/msim-con/msim-con.c
===================================================================
--- uspace/drv/char/msim-con/msim-con.c	(revision cf3a905cae8433ab4e89de18f9432cc8cbaa8deb)
+++ uspace/drv/char/msim-con/msim-con.c	(revision 4f87a85ae8e0c4b41a1e0120338b46dd9654fc9c)
@@ -85,4 +85,5 @@
 	irq_cmd_t *msim_cmds = NULL;
 	errno_t rc;
+	bool bound = false;
 
 	circ_buf_init(&con->cbuf, con->buf, msim_con_buf_size, 1);
@@ -143,5 +144,12 @@
 	}
 
-	ddf_fun_add_to_category(fun, "console");
+	bound = true;
+
+	rc = ddf_fun_add_to_category(fun, "console");
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "Error adding function 'a' to category "
+		    "'console'.");
+		goto error;
+	}
 
 	return EOK;
@@ -149,4 +157,6 @@
 	if (CAP_HANDLE_VALID(con->irq_handle))
 		async_irq_unsubscribe(con->irq_handle);
+	if (bound)
+		ddf_fun_unbind(fun);
 	if (fun != NULL)
 		ddf_fun_destroy(fun);
Index: uspace/drv/char/ns8250/ns8250.c
===================================================================
--- uspace/drv/char/ns8250/ns8250.c	(revision cf3a905cae8433ab4e89de18f9432cc8cbaa8deb)
+++ uspace/drv/char/ns8250/ns8250.c	(revision 4f87a85ae8e0c4b41a1e0120338b46dd9654fc9c)
@@ -829,4 +829,5 @@
 	bool need_cleanup = false;
 	bool need_unreg_intr_handler = false;
+	bool bound = false;
 	errno_t rc;
 
@@ -909,7 +910,12 @@
 	}
 
+	bound = true;
 	ns->fun = fun;
 
-	ddf_fun_add_to_category(fun, "serial");
+	rc = ddf_fun_add_to_category(fun, "serial");
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "Error adding function to category 'serial'.");
+		goto fail;
+	}
 
 	ddf_msg(LVL_NOTE, "Device %s successfully initialized.",
@@ -918,4 +924,6 @@
 	return EOK;
 fail:
+	if (bound)
+		ddf_fun_unbind(fun);
 	if (fun != NULL)
 		ddf_fun_destroy(fun);
Index: uspace/drv/char/ski-con/ski-con.c
===================================================================
--- uspace/drv/char/ski-con/ski-con.c	(revision cf3a905cae8433ab4e89de18f9432cc8cbaa8deb)
+++ uspace/drv/char/ski-con/ski-con.c	(revision 4f87a85ae8e0c4b41a1e0120338b46dd9654fc9c)
@@ -112,7 +112,12 @@
 	}
 
-	ddf_fun_add_to_category(fun, "console");
-
 	bound = true;
+
+	rc = ddf_fun_add_to_category(fun, "console");
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "Error adding function 'a' to category "
+		    "'console'.");
+		goto error;
+	}
 
 	fid = fibril_create(ski_con_fibril, con);
Index: uspace/drv/char/sun4v-con/sun4v-con.c
===================================================================
--- uspace/drv/char/sun4v-con/sun4v-con.c	(revision cf3a905cae8433ab4e89de18f9432cc8cbaa8deb)
+++ uspace/drv/char/sun4v-con/sun4v-con.c	(revision 4f87a85ae8e0c4b41a1e0120338b46dd9654fc9c)
@@ -74,4 +74,5 @@
 	ddf_fun_t *fun = NULL;
 	errno_t rc;
+	bool bound = false;
 
 	con->res = *res;
@@ -113,5 +114,12 @@
 	}
 
-	ddf_fun_add_to_category(fun, "console");
+	bound = true;
+
+	rc = ddf_fun_add_to_category(fun, "console");
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "Error adding function 'a' to category "
+		    "'console'.");
+		goto error;
+	}
 
 	return EOK;
@@ -122,4 +130,7 @@
 	if (con->output_buffer != (niagara_output_buffer_t *) AS_AREA_ANY)
 		physmem_unmap((void *) con->output_buffer);
+
+	if (bound)
+		ddf_fun_unbind(fun);
 
 	if (fun != NULL)
