deb_ts("setting pid: %5d %04x at index %d '%s'\n",
                        pid, pid, index, onoff ? "on" : "off");
 
+       /* First 6 can be buggy - skip over them if option set */
+       if (fc->skip_6_hw_pid_filter)
+               index += 6;
+
        /* We could use bit magic here to reduce source code size.
         * I decided against it, but to use the real register names */
        switch (index) {
 int flexcop_pid_feed_control(struct flexcop_device *fc,
                struct dvb_demux_feed *dvbdmxfeed, int onoff)
 {
-       int max_pid_filter = 6 + fc->has_32_hw_pid_filter*32;
+       int max_pid_filter = 6;
+
+       max_pid_filter -= 6 * fc->skip_6_hw_pid_filter;
+       max_pid_filter += 32 * fc->has_32_hw_pid_filter;
 
        fc->feedcount += onoff ? 1 : -1; /* the number of PIDs/Feed currently requested */
        if (dvbdmxfeed->index >= max_pid_filter)
 {
        int i;
        flexcop_ibi_value v;
-       for (i = 0; i < 6 + 32*fc->has_32_hw_pid_filter; i++)
+       int max_pid_filter = 6;
+
+       max_pid_filter -= 6 * fc->skip_6_hw_pid_filter;
+       max_pid_filter += 32 * fc->has_32_hw_pid_filter;
+
+       for (i = 0; i < max_pid_filter; i++)
                flexcop_pid_control(fc, i, 0x1fff, 0);
 
        flexcop_pid_group_filter(fc, 0, 0x1fe0);