Index: uspace/drv/isa/isa.c
===================================================================
--- uspace/drv/isa/isa.c	(revision bab63886b1d1a9c8c49900dc50c39ee2b0c64763)
+++ uspace/drv/isa/isa.c	(revision 97a62fec5ae8981a95bc5036a2fda4084d6bea01)
@@ -106,5 +106,5 @@
 };
 
-static isa_fun_t *isa_fun_create()
+static isa_fun_t *isa_fun_create(device_t *dev, const char *name)
 {
 	isa_fun_t *fun = calloc(1, sizeof(isa_fun_t));
@@ -112,5 +112,5 @@
 		return NULL;
 
-	function_t *fnode = create_function();
+	function_t *fnode = ddf_fun_create(dev, fun_inner, name);
 	if (fnode == NULL) {
 		free(fun);
@@ -417,13 +417,9 @@
 		return NULL;
 
-	isa_fun_t *fun = isa_fun_create();
+	isa_fun_t *fun = isa_fun_create(dev, fun_name);
 	if (fun == NULL) {
 		free(fun_name);
 		return NULL;
 	}
-
-	function_t *fnode = fun->fnode;
-	fnode->name = fun_name;
-	fnode->ftype = fun_inner;
 
 	/* Allocate buffer for the list of hardware resources of the device. */
@@ -447,9 +443,10 @@
 
 	/* Set device operations to the device. */
-	fnode->ops = &isa_fun_ops;
-
-	printf(NAME ": register_function(fun, dev); function is %s.\n",
-	    fnode->name);
-	register_function(fnode, dev);
+	fun->fnode->ops = &isa_fun_ops;
+
+	printf(NAME ": Binding function %s.\n", fun->fnode->name);
+
+	/* XXX Handle error */
+	(void) ddf_fun_bind(fun->fnode);
 
 	return fun_conf;
@@ -482,8 +479,14 @@
 	printf(NAME ": adding a 'ctl' function\n");
 
-	function_t *ctl = create_function();
-	ctl->ftype = fun_exposed;
-	ctl->name = "ctl";
-	register_function(ctl, dev);
+	function_t *ctl = ddf_fun_create(dev, fun_exposed, "ctl");
+	if (ctl == NULL) {
+		printf(NAME ": Error creating control function.\n");
+		return EXDEV;
+	}
+
+	if (ddf_fun_bind(ctl) != EOK) {
+		printf(NAME ": Error binding control function.\n");
+		return EXDEV;
+	}
 
 	/* Add functions as specified in the configuration file. */
