Index: uspace/drv/audio/sb16/dsp.c
===================================================================
--- uspace/drv/audio/sb16/dsp.c	(revision e1534533984f325caaf96b4c90e037655f5943e2)
+++ uspace/drv/audio/sb16/dsp.c	(revision 22dfd380be327d91cff2394cd2f3d9143dd73a90)
@@ -34,5 +34,5 @@
 
 #include <as.h>
-#include <bool.h>
+#include <stdbool.h>
 #include <ddi.h>
 #include <devman.h>
@@ -159,5 +159,5 @@
 {
 	async_sess_t *sess = devman_parent_device_connect(EXCHANGE_ATOMIC,
-	    dsp->sb_dev->handle, IPC_FLAG_BLOCKING);
+	    ddf_dev_get_handle(dsp->sb_dev), IPC_FLAG_BLOCKING);
 
 	const int ret = hw_res_dma_channel_setup(sess,
@@ -182,5 +182,5 @@
 	}
 
-	ddf_log_verbose("Setup dma buffer at %p(%p).", buffer, pa, size);
+	ddf_log_verbose("Setup dma buffer at %p(%p) %zu.", buffer, pa, size);
 	assert((uintptr_t)pa < (1 << 25));
 
@@ -301,5 +301,5 @@
 	assert(dsp->buffer.data);
 	async_sess_t *sess = devman_parent_device_connect(EXCHANGE_ATOMIC,
-	    dsp->sb_dev->handle, IPC_FLAG_BLOCKING);
+	    ddf_dev_get_handle(dsp->sb_dev), IPC_FLAG_BLOCKING);
 
 	// TODO: Assumes DMA 16
Index: uspace/drv/audio/sb16/main.c
===================================================================
--- uspace/drv/audio/sb16/main.c	(revision e1534533984f325caaf96b4c90e037655f5943e2)
+++ uspace/drv/audio/sb16/main.c	(revision 22dfd380be327d91cff2394cd2f3d9143dd73a90)
@@ -49,5 +49,5 @@
 
 static int sb_add_device(ddf_dev_t *device);
-static int sb_get_res(const ddf_dev_t *device, uintptr_t *sb_regs,
+static int sb_get_res(ddf_dev_t *device, uintptr_t *sb_regs,
     size_t *sb_regs_size, uintptr_t *mpu_regs, size_t *mpu_regs_size,
     int *irq, int *dma8, int *dma16);
@@ -75,5 +75,5 @@
 {
 	printf(NAME": HelenOS SB16 audio driver.\n");
-	ddf_log_init(NAME, LVL_DEBUG2);
+	ddf_log_init(NAME);
 	return ddf_driver_main(&sb_driver);
 }
@@ -82,6 +82,7 @@
 {
 	assert(dev);
-	assert(dev->driver_data);
-	sb16_interrupt(dev->driver_data);
+	sb16_t *sb16_dev = ddf_dev_data_get(dev);
+	assert(sb16_dev);
+	sb16_interrupt(sb16_dev);
 }
 
@@ -166,5 +167,5 @@
 }
 
-static int sb_get_res(const ddf_dev_t *device, uintptr_t *sb_regs,
+static int sb_get_res(ddf_dev_t *device, uintptr_t *sb_regs,
     size_t *sb_regs_size, uintptr_t *mpu_regs, size_t *mpu_regs_size,
     int *irq, int *dma8, int *dma16)
@@ -172,7 +173,6 @@
 	assert(device);
 
-	async_sess_t *parent_sess =
-	    devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle,
-            IPC_FLAG_BLOCKING);
+	async_sess_t *parent_sess = devman_parent_device_connect(
+	    EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
 	if (!parent_sess)
 		return ENOMEM;
@@ -245,7 +245,6 @@
 int sb_enable_interrupts(ddf_dev_t *device)
 {
-	async_sess_t *parent_sess =
-	    devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle,
-	    IPC_FLAG_BLOCKING);
+	async_sess_t *parent_sess = devman_parent_device_connect(
+	    EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
 	if (!parent_sess)
 		return ENOMEM;
Index: uspace/drv/audio/sb16/mixer.c
===================================================================
--- uspace/drv/audio/sb16/mixer.c	(revision e1534533984f325caaf96b4c90e037655f5943e2)
+++ uspace/drv/audio/sb16/mixer.c	(revision 22dfd380be327d91cff2394cd2f3d9143dd73a90)
@@ -28,5 +28,5 @@
 
 #include <assert.h>
-#include <bool.h>
+#include <stdbool.h>
 #include <errno.h>
 #include <libarch/ddi.h>
Index: uspace/drv/audio/sb16/mixer_iface.c
===================================================================
--- uspace/drv/audio/sb16/mixer_iface.c	(revision e1534533984f325caaf96b4c90e037655f5943e2)
+++ uspace/drv/audio/sb16/mixer_iface.c	(revision 22dfd380be327d91cff2394cd2f3d9143dd73a90)
@@ -41,6 +41,6 @@
 {
 	assert(fun);
-	assert(fun->driver_data);
-	const sb_mixer_t *mixer = fun->driver_data;
+	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
+	assert(mixer);
 	if (name)
 		*name = sb_mixer_type_str(mixer->type);
@@ -55,6 +55,6 @@
 {
 	assert(fun);
-	assert(fun->driver_data);
-	const sb_mixer_t *mixer = fun->driver_data;
+	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
+	assert(mixer);
 	return
 	    sb_mixer_get_control_item_info(mixer, item, name, channels);
@@ -65,6 +65,6 @@
 {
 	assert(fun);
-	assert(fun->driver_data);
-	const sb_mixer_t *mixer = fun->driver_data;
+	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
+	assert(mixer);
 	return sb_mixer_get_channel_info(mixer, item, channel, name, levels);
 }
@@ -87,6 +87,6 @@
 {
 	assert(fun);
-	assert(fun->driver_data);
-	const sb_mixer_t *mixer = fun->driver_data;
+	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
+	assert(mixer);
 	return sb_mixer_set_volume_level(mixer, item, channel, volume);
 }
@@ -96,6 +96,6 @@
 {
 	assert(fun);
-	assert(fun->driver_data);
-	const sb_mixer_t *mixer = fun->driver_data;
+	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
+	assert(mixer);
 	unsigned levels;
 	const int ret =
Index: uspace/drv/audio/sb16/pcm_iface.c
===================================================================
--- uspace/drv/audio/sb16/pcm_iface.c	(revision e1534533984f325caaf96b4c90e037655f5943e2)
+++ uspace/drv/audio/sb16/pcm_iface.c	(revision 22dfd380be327d91cff2394cd2f3d9143dd73a90)
@@ -43,6 +43,7 @@
 {
 	assert(fun);
-	assert(fun->driver_data);
-	return fun->driver_data;
+	sb_dsp_t *dsp = ddf_fun_data_get(fun);
+	assert(dsp);
+	return dsp;
 }
 
Index: uspace/drv/audio/sb16/sb16.c
===================================================================
--- uspace/drv/audio/sb16/sb16.c	(revision e1534533984f325caaf96b4c90e037655f5943e2)
+++ uspace/drv/audio/sb16/sb16.c	(revision 22dfd380be327d91cff2394cd2f3d9143dd73a90)
@@ -27,4 +27,6 @@
  */
 
+#define _DDF_DATA_IMPLANT
+
 #include <errno.h>
 #include <str_error.h>
@@ -115,6 +117,7 @@
 		return ret;
 	}
-	dsp_fun->driver_data = &sb->dsp;
-	dsp_fun->ops = &sb_pcm_ops;
+	//TODO remove data implant
+	ddf_fun_data_implant(dsp_fun, &sb->dsp);
+	ddf_fun_set_ops(dsp_fun, &sb_pcm_ops);
 	ddf_log_note("Sound blaster DSP (%x.%x) initialized.",
 	    sb->dsp.version.major, sb->dsp.version.minor);
@@ -124,5 +127,5 @@
 		ddf_log_error(
 		    "Failed to bind PCM function: %s.", str_error(ret));
-		dsp_fun->driver_data = NULL;
+		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		return ret;
@@ -133,6 +136,6 @@
 		ddf_log_error("Failed register PCM function in category: %s.",
 		    str_error(ret));
-		dsp_fun->driver_data = NULL;
-		ddf_fun_unbind(dsp_fun);
+		ddf_fun_unbind(dsp_fun);
+		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		return ret;
@@ -147,5 +150,5 @@
 		ddf_log_error("Failed to create mixer function.");
 		ddf_fun_unbind(dsp_fun);
-		dsp_fun->driver_data = NULL;
+		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		return ENOMEM;
@@ -156,5 +159,5 @@
 		    str_error(ret));
 		ddf_fun_unbind(dsp_fun);
-		dsp_fun->driver_data = NULL;
+		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		ddf_fun_destroy(mixer_fun);
@@ -164,6 +167,6 @@
 	ddf_log_note("Initialized mixer: %s.",
 	    sb_mixer_type_str(sb->mixer.type));
-	mixer_fun->driver_data = &sb->mixer;
-	mixer_fun->ops = &sb_mixer_ops;
+	ddf_fun_data_implant(mixer_fun, &sb->mixer);
+	ddf_fun_set_ops(mixer_fun, &sb_mixer_ops);
 
 	ret = ddf_fun_bind(mixer_fun);
@@ -171,9 +174,9 @@
 		ddf_log_error(
 		    "Failed to bind mixer function: %s.", str_error(ret));
-		mixer_fun->driver_data = NULL;
+		// TODO implanted data
 		ddf_fun_destroy(mixer_fun);
 
 		ddf_fun_unbind(dsp_fun);
-		dsp_fun->driver_data = NULL;
+		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		return ret;
