Index: uspace/drv/audio/sb16/mixer_iface.c
===================================================================
--- uspace/drv/audio/sb16/mixer_iface.c	(revision bf9cb2ff74be98b6ea519f4cd121a9fe9ff54ebc)
+++ uspace/drv/audio/sb16/mixer_iface.c	(revision 54a1ca73a9e9c3abb6bdcc1ae84ff0213fe6f721)
@@ -33,14 +33,21 @@
  */
 
+#include <ddf/driver.h>
 #include <errno.h>
 #include <audio_mixer_iface.h>
 
 #include "mixer.h"
+#include "sb16.h"
+
+static sb_mixer_t *fun_to_mixer(ddf_fun_t *fun)
+{
+	sb16_t *sb = (sb16_t *)ddf_dev_data_get(ddf_fun_get_dev(fun));
+	return &sb->mixer;
+}
 
 static int sb_get_info(ddf_fun_t *fun, const char** name, unsigned *items)
 {
-	assert(fun);
-	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
-	assert(mixer);
+	sb_mixer_t *mixer = fun_to_mixer(fun);
+
 	if (name)
 		*name = sb_mixer_type_str(mixer->type);
@@ -54,16 +61,11 @@
     unsigned *max_level)
 {
-	assert(fun);
-	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
-	assert(mixer);
-	return
-	    sb_mixer_get_control_item_info(mixer, item, name, max_level);
+	sb_mixer_t *mixer = fun_to_mixer(fun);
+	return sb_mixer_get_control_item_info(mixer, item, name, max_level);
 }
 
 static int sb_set_item_level(ddf_fun_t *fun, unsigned item, unsigned value)
 {
-	assert(fun);
-	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
-	assert(mixer);
+	sb_mixer_t *mixer = fun_to_mixer(fun);
 	return sb_mixer_set_control_item_value(mixer, item, value);
 }
@@ -71,7 +73,5 @@
 static int sb_get_item_level(ddf_fun_t *fun, unsigned item, unsigned *value)
 {
-	assert(fun);
-	const sb_mixer_t *mixer = ddf_fun_data_get(fun);
-	assert(mixer);
+	sb_mixer_t *mixer = fun_to_mixer(fun);
 	return sb_mixer_get_control_item_value(mixer, item, value);
 }
Index: uspace/drv/audio/sb16/pcm_iface.c
===================================================================
--- uspace/drv/audio/sb16/pcm_iface.c	(revision bf9cb2ff74be98b6ea519f4cd121a9fe9ff54ebc)
+++ uspace/drv/audio/sb16/pcm_iface.c	(revision 54a1ca73a9e9c3abb6bdcc1ae84ff0213fe6f721)
@@ -39,11 +39,10 @@
 
 #include "dsp.h"
+#include "sb16.h"
 
-static inline sb_dsp_t * fun_to_dsp(ddf_fun_t *fun)
+static inline sb_dsp_t *fun_to_dsp(ddf_fun_t *fun)
 {
-	assert(fun);
-	sb_dsp_t *dsp = ddf_fun_data_get(fun);
-	assert(dsp);
-	return dsp;
+	sb16_t *sb = (sb16_t *)ddf_dev_data_get(ddf_fun_get_dev(fun));
+	return &sb->dsp;
 }
 
Index: uspace/drv/audio/sb16/sb16.c
===================================================================
--- uspace/drv/audio/sb16/sb16.c	(revision bf9cb2ff74be98b6ea519f4cd121a9fe9ff54ebc)
+++ uspace/drv/audio/sb16/sb16.c	(revision 54a1ca73a9e9c3abb6bdcc1ae84ff0213fe6f721)
@@ -27,6 +27,4 @@
  */
 
-#define _DDF_DATA_IMPLANT
-
 #include <errno.h>
 #include <str_error.h>
@@ -121,6 +119,5 @@
 		return ret;
 	}
-	//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.",
@@ -131,5 +128,4 @@
 		ddf_log_error(
 		    "Failed to bind PCM function: %s.", str_error(ret));
-		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		return ret;
@@ -141,5 +137,4 @@
 		    str_error(ret));
 		ddf_fun_unbind(dsp_fun);
-		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		return ret;
@@ -154,5 +149,4 @@
 		ddf_log_error("Failed to create mixer function.");
 		ddf_fun_unbind(dsp_fun);
-		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		return ENOMEM;
@@ -163,5 +157,4 @@
 		    str_error(ret));
 		ddf_fun_unbind(dsp_fun);
-		// TODO implanted data
 		ddf_fun_destroy(dsp_fun);
 		ddf_fun_destroy(mixer_fun);
@@ -171,5 +164,4 @@
 	ddf_log_note("Initialized mixer: %s.",
 	    sb_mixer_type_str(sb->mixer.type));
-	ddf_fun_data_implant(mixer_fun, &sb->mixer);
 	ddf_fun_set_ops(mixer_fun, &sb_mixer_ops);
 
@@ -178,9 +170,6 @@
 		ddf_log_error(
 		    "Failed to bind mixer function: %s.", str_error(ret));
-		// TODO implanted data
 		ddf_fun_destroy(mixer_fun);
-
-		ddf_fun_unbind(dsp_fun);
-		// TODO implanted data
+		ddf_fun_unbind(dsp_fun);
 		ddf_fun_destroy(dsp_fun);
 		return ret;
