if (io & (NGENE_IO_TSIN | NGENE_IO_TSOUT)) {
                if (nr >= STREAM_AUDIOIN1)
                        chan->DataFormatFlags = DF_SWAP32;
-               if (nr == 0 || !one_adapter) {
+               if (nr == 0 || !one_adapter || dev->first_adapter == NULL) {
                        adapter = &dev->adapter[nr];
                        ret = dvb_register_adapter(adapter, "nGene",
                                                   THIS_MODULE,
                                                   adapter_nr);
                        if (ret < 0)
                                return ret;
+                       if (dev->first_adapter == NULL)
+                               dev->first_adapter = adapter;
                } else {
-                       adapter = &dev->adapter[0];
+                       adapter = dev->first_adapter;
                }
 
                ret = my_dvb_dmx_ts_card_init(dvbdemux, "SW demux",
        int i, j;
 
        for (i = 0; i < MAX_STREAM; i++) {
+               dev->channel[i].number = i;
                if (init_channel(&dev->channel[i]) < 0) {
                        for (j = i - 1; j >= 0; j--)
                                release_channel(&dev->channel[j]);
 
        spinlock_t            cmd_lock;
 
        struct dvb_adapter    adapter[MAX_STREAM];
+       struct dvb_adapter    *first_adapter; /* "one_adapter" modprobe opt */
        struct ngene_channel  channel[MAX_STREAM];
 
        struct ngene_info    *card_info;