Index: uspace/drv/infrastructure/rootmac/rootmac.c
===================================================================
--- uspace/drv/infrastructure/rootmac/rootmac.c	(revision 3795f9c7b395df216569d51f84fce8f0f98472f2)
+++ uspace/drv/infrastructure/rootmac/rootmac.c	(revision 2ee052618efd63ef34d285c7fec3254af7d6e49c)
@@ -44,8 +44,4 @@
 #define NAME  "rootmac"
 
-/** Obtain function soft-state from DDF function node */
-#define ROOTMAC_FUN(fnode) \
-	((rootmac_fun_t *) (fnode)->driver_data)
-
 typedef struct {
 	hw_resource_list_t hw_resources;
@@ -80,11 +76,17 @@
 static ddf_dev_ops_t rootmac_fun_ops;
 
+/** Obtain function soft-state from DDF function node */
+static rootmac_fun_t *rootmac_fun(ddf_fun_t *fnode)
+{
+	return ddf_fun_data_get(fnode);
+}
+
 static bool rootmac_add_fun(ddf_dev_t *dev, const char *name,
-    const char *str_match_id, rootmac_fun_t *fun)
+    const char *str_match_id, rootmac_fun_t *fun_proto)
 {
 	ddf_msg(LVL_DEBUG, "Adding new function '%s'.", name);
 	
 	ddf_fun_t *fnode = NULL;
-	match_id_t *match_id = NULL;
+	int rc;
 	
 	/* Create new device. */
@@ -93,17 +95,14 @@
 		goto failure;
 	
-	fnode->driver_data = fun;
+	rootmac_fun_t *fun = ddf_fun_data_alloc(fnode, sizeof(rootmac_fun_t));
+	*fun = *fun_proto;
 	
-	/* Initialize match id list */
-	match_id = create_match_id();
-	if (match_id == NULL)
+	/* Add match ID */
+	rc = ddf_fun_add_match_id(fnode, str_match_id, 100);
+	if (rc != EOK)
 		goto failure;
 	
-	match_id->id = str_match_id;
-	match_id->score = 100;
-	add_match_id(&fnode->match_ids, match_id);
-	
 	/* Set provided operations to the device. */
-	fnode->ops = &rootmac_fun_ops;
+	ddf_fun_set_ops(fnode, &rootmac_fun_ops);
 	
 	/* Register function. */
@@ -116,7 +115,4 @@
 	
 failure:
-	if (match_id != NULL)
-		match_id->id = NULL;
-	
 	if (fnode != NULL)
 		ddf_fun_destroy(fnode);
@@ -162,5 +158,5 @@
 static hw_resource_list_t *rootmac_get_resources(ddf_fun_t *fnode)
 {
-	rootmac_fun_t *fun = ROOTMAC_FUN(fnode);
+	rootmac_fun_t *fun = rootmac_fun(fnode);
 	assert(fun != NULL);
 	
