u16 new_stereo_mode;
        const u16 stereo_mask = 0x0300;
        const u16 dual = 0x0200;
+       u32 h;
 
        new_stereo_mode = cx->params.audio_properties & stereo_mask;
        memset(&vt, 0, sizeof(vt));
        if (new_stereo_mode == cx->dualwatch_stereo_mode)
                return;
 
-       new_bitmap = new_stereo_mode | (cx->params.audio_properties & ~stereo_mask);
+       new_bitmap = new_stereo_mode
+                       | (cx->params.audio_properties & ~stereo_mask);
 
-       CX18_DEBUG_INFO("dualwatch: change stereo flag from 0x%x to 0x%x. new audio_bitmask=0x%ux\n",
-                          cx->dualwatch_stereo_mode, new_stereo_mode, new_bitmap);
+       CX18_DEBUG_INFO("dualwatch: change stereo flag from 0x%x to 0x%x. "
+                       "new audio_bitmask=0x%ux\n",
+                       cx->dualwatch_stereo_mode, new_stereo_mode, new_bitmap);
 
-       if (cx18_vapi(cx, CX18_CPU_SET_AUDIO_PARAMETERS, 2,
-                               cx18_find_handle(cx), new_bitmap) == 0) {
+       h = cx18_find_handle(cx);
+       if (h == CX18_INVALID_TASK_HANDLE) {
+               CX18_DEBUG_INFO("dualwatch: can't find valid task handle\n");
+               return;
+       }
+
+       if (cx18_vapi(cx,
+                     CX18_CPU_SET_AUDIO_PARAMETERS, 2, h, new_bitmap) == 0) {
                cx->dualwatch_stereo_mode = new_stereo_mode;
                return;
        }
 
 void cx18_mute(struct cx18 *cx)
 {
-       if (atomic_read(&cx->ana_capturing))
-               cx18_vapi(cx, CX18_CPU_SET_AUDIO_MUTE, 2,
-                               cx18_find_handle(cx), 1);
+       u32 h;
+       if (atomic_read(&cx->ana_capturing)) {
+               h = cx18_find_handle(cx);
+               if (h != CX18_INVALID_TASK_HANDLE)
+                       cx18_vapi(cx, CX18_CPU_SET_AUDIO_MUTE, 2, h, 1);
+               else
+                       CX18_ERR("Can't find valid task handle for mute\n");
+       }
        CX18_DEBUG_INFO("Mute\n");
 }
 
 void cx18_unmute(struct cx18 *cx)
 {
+       u32 h;
        if (atomic_read(&cx->ana_capturing)) {
-               cx18_msleep_timeout(100, 0);
-               cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 2,
-                               cx18_find_handle(cx), 12);
-               cx18_vapi(cx, CX18_CPU_SET_AUDIO_MUTE, 2,
-                               cx18_find_handle(cx), 0);
+               h = cx18_find_handle(cx);
+               if (h != CX18_INVALID_TASK_HANDLE) {
+                       cx18_msleep_timeout(100, 0);
+                       cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 2, h, 12);
+                       cx18_vapi(cx, CX18_CPU_SET_AUDIO_MUTE, 2, h, 0);
+               } else
+                       CX18_ERR("Can't find valid task handle for unmute\n");
        }
        CX18_DEBUG_INFO("Unmute\n");
 }
 
 {
        struct cx18_open_id *id = fh;
        struct cx18 *cx = id->cx;
+       u32 h;
 
        switch (enc->cmd) {
        case V4L2_ENC_CMD_START:
                        return -EPERM;
                if (test_and_set_bit(CX18_F_I_ENC_PAUSED, &cx->i_flags))
                        return 0;
+               h = cx18_find_handle(cx);
+               if (h == CX18_INVALID_TASK_HANDLE) {
+                       CX18_ERR("Can't find valid task handle for "
+                                "V4L2_ENC_CMD_PAUSE\n");
+                       return -EBADFD;
+               }
                cx18_mute(cx);
-               cx18_vapi(cx, CX18_CPU_CAPTURE_PAUSE, 1, cx18_find_handle(cx));
+               cx18_vapi(cx, CX18_CPU_CAPTURE_PAUSE, 1, h);
                break;
 
        case V4L2_ENC_CMD_RESUME:
                        return -EPERM;
                if (!test_and_clear_bit(CX18_F_I_ENC_PAUSED, &cx->i_flags))
                        return 0;
-               cx18_vapi(cx, CX18_CPU_CAPTURE_RESUME, 1, cx18_find_handle(cx));
+               h = cx18_find_handle(cx);
+               if (h == CX18_INVALID_TASK_HANDLE) {
+                       CX18_ERR("Can't find valid task handle for "
+                                "V4L2_ENC_CMD_RESUME\n");
+                       return -EBADFD;
+               }
+               cx18_vapi(cx, CX18_CPU_CAPTURE_RESUME, 1, h);
                cx18_unmute(cx);
                break;
 
 
        s->cx = cx;
        s->type = type;
        s->name = cx18_stream_info[type].name;
-       s->handle = 0xffffffff;
+       s->handle = CX18_INVALID_TASK_HANDLE;
 
        s->dma = cx18_stream_info[type].dma;
        s->buf_size = cx->stream_buf_size[type];
        clear_bit(CX18_F_S_STREAMING, &s->s_flags);
 
        cx18_vapi(cx, CX18_DESTROY_TASK, 1, s->handle);
-       s->handle = 0xffffffff;
+       s->handle = CX18_INVALID_TASK_HANDLE;
 
        if (atomic_read(&cx->tot_capturing) > 0)
                return 0;
        for (i = 0; i < CX18_MAX_STREAMS; i++) {
                struct cx18_stream *s = &cx->streams[i];
 
-               if (s->v4l2dev && s->handle)
+               if (s->v4l2dev && (s->handle != CX18_INVALID_TASK_HANDLE))
                        return s->handle;
        }
-       return 0;
+       return CX18_INVALID_TASK_HANDLE;
 }