dev->capture_type = 0;
                                dev->vbi_read = 0;
                                em28xx_isocdbg("VBI START HEADER!!!\n");
-                               dev->cur_field = p[2];
+                               dev->top_field = !(p[2] & 1);
                                p += 4;
                                len -= 4;
                        } else if (p[0] == 0x88 && p[1] == 0x88 &&
                                len -= 4;
                        } else if (p[0] == 0x22 && p[1] == 0x5a) {
                                /* start video */
+                               dev->capture_type = 1;
+                               dev->top_field = !(p[2] & 1);
                                p += 4;
                                len -= 4;
                        }
                                em28xx_isocdbg("dev->vbi_read > vbi_size\n");
                        } else if ((dev->vbi_read + len) < vbi_size) {
                                /* This entire frame is VBI data */
-                               if (dev->vbi_read == 0 &&
-                                   (!(dev->cur_field & 1))) {
+                               if (dev->vbi_read == 0 && dev->top_field) {
                                        /* Brand new frame */
                                        if (vbi_buf != NULL)
                                                vbi_buffer_filled(dev,
 
                                if (dev->vbi_read == 0) {
                                        vbi_dma_q->pos = 0;
-                                       if (vbi_buf != NULL) {
-                                               if (dev->cur_field & 1)
-                                                       vbi_buf->top_field = 0;
-                                               else
-                                                       vbi_buf->top_field = 1;
-                                       }
+                                       if (vbi_buf != NULL)
+                                               vbi_buf->top_field = dev->top_field;
                                }
 
                                dev->vbi_read += len;
 
                if (dev->capture_type == 1) {
                        dev->capture_type = 2;
-                       if (dev->progressive || !(dev->cur_field & 1)) {
+                       if (dev->progressive || dev->top_field) {
                                if (buf != NULL)
                                        buffer_filled(dev, dma_q, buf);
                                get_next_buf(dma_q, &buf);
                                else
                                        outp = videobuf_to_vmalloc(&buf->vb);
                        }
-                       if (buf != NULL) {
-                               if (dev->cur_field & 1)
-                                       buf->top_field = 0;
-                               else
-                                       buf->top_field = 1;
-                       }
+                       if (buf != NULL)
+                               buf->top_field = dev->top_field;
 
                        dma_q->pos = 0;
                }
                urb_init = 1;
 
        if (urb_init) {
+               dev->capture_type = -1;
                if (em28xx_vbi_supported(dev) == 1)
                        rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE,
                                                  dev->analog_xfer_bulk,