static int ivtv_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
 {
-       struct ivtv *itv = container_of(ctrl->handler, struct ivtv, hdl_out);
+       struct ivtv *itv = container_of(ctrl->handler, struct ivtv, cxhdl.hdl);
 
        switch (ctrl->id) {
        /* V4L2_CID_MPEG_VIDEO_DEC_PTS and V4L2_CID_MPEG_VIDEO_DEC_FRAME
 
 static int ivtv_s_ctrl(struct v4l2_ctrl *ctrl)
 {
-       struct ivtv *itv = container_of(ctrl->handler, struct ivtv, hdl_out);
+       struct ivtv *itv = container_of(ctrl->handler, struct ivtv, cxhdl.hdl);
 
        switch (ctrl->id) {
        /* V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK and MULTILINGUAL_PLAYBACK
 
        itv->tuner_std = itv->std;
 
        if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
-               v4l2_ctrl_handler_init(&itv->hdl_out, 50);
-               itv->ctrl_pts = v4l2_ctrl_new_std(&itv->hdl_out, &ivtv_hdl_out_ops,
+               struct v4l2_ctrl_handler *hdl = itv->v4l2_dev.ctrl_handler;
+
+               itv->ctrl_pts = v4l2_ctrl_new_std(hdl, &ivtv_hdl_out_ops,
                                V4L2_CID_MPEG_VIDEO_DEC_PTS, 0, 0, 1, 0);
-               itv->ctrl_frame = v4l2_ctrl_new_std(&itv->hdl_out, &ivtv_hdl_out_ops,
+               itv->ctrl_frame = v4l2_ctrl_new_std(hdl, &ivtv_hdl_out_ops,
                                V4L2_CID_MPEG_VIDEO_DEC_FRAME, 0, 0x7fffffff, 1, 0);
                /* Note: V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO is not supported,
                   mask that menu item. */
                itv->ctrl_audio_playback =
-                       v4l2_ctrl_new_std_menu(&itv->hdl_out, &ivtv_hdl_out_ops,
+                       v4l2_ctrl_new_std_menu(hdl, &ivtv_hdl_out_ops,
                                V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK,
                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO,
                                1 << V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO,
                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO);
                itv->ctrl_audio_multilingual_playback =
-                       v4l2_ctrl_new_std_menu(&itv->hdl_out, &ivtv_hdl_out_ops,
+                       v4l2_ctrl_new_std_menu(hdl, &ivtv_hdl_out_ops,
                                V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK,
                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO,
                                1 << V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO,
                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT);
-               v4l2_ctrl_add_handler(&itv->hdl_out, &itv->cxhdl.hdl);
-               if (itv->hdl_out.error) {
-                       retval = itv->hdl_out.error;
+               if (hdl->error) {
+                       retval = hdl->error;
                        goto free_i2c;
                }
                v4l2_ctrl_cluster(2, &itv->ctrl_pts);
 free_irq:
        free_irq(itv->pdev->irq, (void *)itv);
 free_i2c:
-       if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)
-               v4l2_ctrl_handler_free(&itv->hdl_out);
        v4l2_ctrl_handler_free(&itv->cxhdl.hdl);
        exit_ivtv_i2c(itv);
 free_io:
        ivtv_streams_cleanup(itv, 1);
        ivtv_udma_free(itv);
 
-       if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)
-               v4l2_ctrl_handler_free(&itv->hdl_out);
        v4l2_ctrl_handler_free(&itv->cxhdl.hdl);
 
        exit_ivtv_i2c(itv);
 
        }
        IVTV_INFO("Tuner:  %s\n",
                test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags) ? "Radio" : "TV");
-       if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)
-               v4l2_ctrl_handler_log_status(&itv->hdl_out, itv->v4l2_dev.name);
-       else
-               v4l2_ctrl_handler_log_status(&itv->cxhdl.hdl, itv->v4l2_dev.name);
+       v4l2_ctrl_handler_log_status(&itv->cxhdl.hdl, itv->v4l2_dev.name);
        IVTV_INFO("Status flags:    0x%08lx\n", itv->i_flags);
        for (i = 0; i < IVTV_MAX_STREAMS; i++) {
                struct ivtv_stream *s = &itv->streams[i];