struct xc2028_config      cfg = {
                .i2c_adap  = &adap->dev->i2c_adap,
                .i2c_addr  = 0x61,
-               .video_dev = adap->dev,
                .callback  = dvico_bluebird_xc2028_callback,
        };
        static struct xc2028_ctrl ctl = {
 
                        struct xc2028_config cfg = {
                                .i2c_adap  = &i2c_bus->i2c_adap,
                                .i2c_addr  = 0x61,
-                               .video_dev = port,
                                .callback  = cx23885_hvr1500_xc3028_callback,
                        };
                        static struct xc2028_ctrl ctl = {
 
        struct xc2028_config cfg = {
                .i2c_adap  = &dev->core->i2c_adap,
                .i2c_addr  = addr,
-               .video_dev = dev->core->i2c_adap.algo_data,
        };
 
        if (!dev->dvb.frontend) {
                        struct xc2028_config cfg = {
                                .i2c_adap  = &dev->core->i2c_adap,
                                .i2c_addr  = 0x61,
-                               .video_dev = dev->core,
                                .callback  = cx88_pci_nano_callback,
                        };
                        static struct xc2028_ctrl ctl = {
 
                struct xc2028_config cfg = {
                        .i2c_adap  = t->i2c->adapter,
                        .i2c_addr  = t->i2c->addr,
-                       .video_dev = c->adapter->algo_data,
                        .callback  = t->tuner_callback,
                };
                if (!xc2028_attach(&t->fe, &cfg)) {
 
        if (debug)
                printk(KERN_DEBUG "xc2028: Xcv2028/3028 init called!\n");
 
-       if (NULL == cfg || NULL == cfg->video_dev)
+       if (NULL == cfg)
                return NULL;
 
        if (!fe) {
                return NULL;
        }
 
-       video_dev = cfg->video_dev;
+       video_dev = cfg->i2c_adap->algo_data;
+
+       if (debug)
+               printk(KERN_DEBUG "xc2028: video_dev =%p\n", video_dev);
 
        mutex_lock(&xc2028_list_mutex);
 
        list_for_each_entry(priv, &xc2028_list, xc2028_list) {
-               if (priv->video_dev == cfg->video_dev) {
+               if (&priv->i2c_props.adap->dev == &cfg->i2c_adap->dev) {
                        video_dev = NULL;
+                       if (debug)
+                               printk(KERN_DEBUG "xc2028: reusing device\n");
+
                        break;
                }
        }
        fe->tuner_priv = priv;
        priv->count++;
 
+       if (debug)
+               printk(KERN_DEBUG "xc2028: usage count is %i\n", priv->count);
+
        memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops,
               sizeof(xc2028_dvb_tuner_ops));