diff -urN ivtv-0.4.0/driver/ivtv-driver.h ivtv-0.4.0-rick/driver/ivtv-driver.h
--- ivtv-0.4.0/driver/ivtv-driver.h	2005-10-09 06:50:56.000000000 -0400
+++ ivtv-0.4.0-rick/driver/ivtv-driver.h	2005-11-19 17:59:55.000000000 -0500
@@ -708,6 +708,7 @@
 #define IVTV_F_T_DEC_VBI_RUNNING    14 /* Decoder VBI is running */
 #define IVTV_F_T_ENC_RAWVID_STARTED    15/* Encoder has been started */
 #define IVTV_F_T_ENC_RAWAUD_STARTED    16/* Encoder has been started */
+#define IVTV_F_T_DEC_DMA_NEEDED     2
 
 /* firmware-reset, r_flags */
 #define FW_RESET_NEEDED        	0
diff -urN ivtv-0.4.0/driver/ivtv-irq.c ivtv-0.4.0-rick/driver/ivtv-irq.c
--- ivtv-0.4.0/driver/ivtv-irq.c	2005-10-09 06:50:56.000000000 -0400
+++ ivtv-0.4.0-rick/driver/ivtv-irq.c	2005-11-19 17:08:28.000000000 -0500
@@ -160,7 +160,7 @@
 		   		jiffies,
 		   		atomic_read(&itv->dec_dma_stat.intr),
 		   		itv->dec_dma_stat.wq_runs);
-
+			set_bit(IVTV_F_T_DEC_DMA_NEEDED, &itv->t_flags);
 			dec_schedule_work(itv);
 		}
 	}
diff -urN ivtv-0.4.0/driver/ivtv-kthreads.c ivtv-0.4.0-rick/driver/ivtv-kthreads.c
--- ivtv-0.4.0/driver/ivtv-kthreads.c	2005-10-09 06:50:56.000000000 -0400
+++ ivtv-0.4.0-rick/driver/ivtv-kthreads.c	2005-11-19 17:08:16.000000000 -0500
@@ -397,6 +397,13 @@
 void dec_work_handler(void *arg)
 {
 	struct ivtv *itv = (struct ivtv *)arg;
+	
+		/* VIDEO or VBI */
+        set_bit(IVTV_F_T_DEC_RUNNING, &itv->t_flags);
+	if (test_and_clear_bit(IVTV_F_T_DEC_DMA_NEEDED, &itv->t_flags)) {
+
+	
+	
 	int type = IVTV_DEC_STREAM_TYPE_MPG;
 	struct ivtv_stream *stream;
 	int ret = -1;
@@ -429,7 +436,7 @@
             return;
 	}
 
-	set_bit(IVTV_F_T_DEC_RUNNING, &itv->t_flags);
+	//set_bit(IVTV_F_T_DEC_RUNNING, &itv->t_flags);
 	/* YUV or MPG Stream? */
 	if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags)) {
 		type = IVTV_DEC_STREAM_TYPE_YUV;
@@ -1035,7 +1042,11 @@
 		   jiffies, (jiffies - then));
 
 	unlock_TO_dma(itv, stream->type);
+        //clear_bit(IVTV_F_T_DEC_RUNNING, &itv->t_flags);
+		  
+	}
         clear_bit(IVTV_F_T_DEC_RUNNING, &itv->t_flags);
+
 	return;
 }
 
