{
        struct tm6000_dvb *dvb = dev->dvb;
 
-       dvb->frontend = zl10353_attach(config, i2c);
+       dvb->frontend = dvb_attach(zl10353_attach, config, i2c);
        if(!dvb->frontend) {
+               printk(KERN_ERR "Error during zl10353_attach!\n");
                return NULL;
        }
 
 
                return -1;
        }
 
-       if(dvb->frontend) {
-               return 0;
-       }
-       else {
-               return -1;
-       }
+       return (!dvb->frontend) ? -1 : 0;
 }
 
 int tm6000_dvb_register(struct tm6000_core *dev)
        ret = tm6000_dvb_attach_frontend(dev);
        if(ret < 0) {
                printk(KERN_ERR "tm6000: couldn't attach the frontend!\n");
-//             goto err;
+               goto err;
        }
 
        ret = dvb_register_adapter(&dvb->adapter, "Trident TVMaster 6000 DVB-T",
                        printk(KERN_ERR "tm6000: couldn't register "
                                        "frontend (xc3028)\n");
                        ret = -EINVAL;
-                       goto adapter_err;
+                       goto frontend_err;
                }
                printk(KERN_INFO "tm6000: XC2028/3028 asked to be "
                                 "attached to frontend!\n");
        dvb_dmx_release(&dvb->demux);
 frontend_err:
        if(dvb->frontend) {
+               dvb_frontend_detach(dvb->frontend);
                dvb_unregister_frontend(dvb->frontend);
-#ifdef CONFIG_DVB_CORE_ATTACH
-               symbol_put(xc3028_attach);
-#endif
        }
 adapter_err:
        dvb_unregister_adapter(&dvb->adapter);
 
 //     mutex_lock(&tm6000_driver.open_close_mutex);
        if(dvb->frontend) {
+               dvb_frontend_detach(dvb->frontend);
                dvb_unregister_frontend(dvb->frontend);
-#ifdef CONFIG_DVB_CORE_ATTACH
-               symbol_put(xc3028_attach);
-#endif
        }
 
        dvb_dmxdev_release(&dvb->dmxdev);