fe_modulation_t current_modulation;
 
        u32 current_frequency;
+       int if_freq;
 
        u32 is_qam_locked;
        u32 qam_state;
        return 0;
 }
 
+#define S5H1409_VSB_IF_FREQ 5380
+#define S5H1409_QAM_IF_FREQ state->config->qam_if
+
 static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz)
 {
        struct s5h1409_state* state = fe->demodulator_priv;
                ret = -1;
        }
 
+       if (0 == ret)
+               state->if_freq = KHz;
+
        return ret;
 }
 
        switch(m) {
        case VSB_8:
                dprintk("%s() VSB_8\n", __FUNCTION__);
+               if (state->if_freq != S5H1409_VSB_IF_FREQ)
+                       s5h1409_set_if_freq(fe, S5H1409_VSB_IF_FREQ);
                s5h1409_writereg(state, 0xf4, 0);
                break;
        case QAM_64:
        case QAM_256:
                dprintk("%s() QAM_AUTO (64/256)\n", __FUNCTION__);
+               if (state->if_freq != S5H1409_QAM_IF_FREQ)
+                       s5h1409_set_if_freq(fe, S5H1409_QAM_IF_FREQ);
                s5h1409_writereg(state, 0xf4, 1);
                s5h1409_writereg(state, 0x85, 0x110);
                break;
                s5h1409_writereg(state, 0xab, 0x0); /* Parallel */
 
        s5h1409_set_spectralinversion(fe, state->config->inversion);
-       s5h1409_set_if_freq(fe, state->config->if_freq);
+       s5h1409_set_if_freq(fe, state->if_freq);
        s5h1409_set_gpio(fe, state->config->gpio);
        s5h1409_softreset(fe);
 
        state->config = config;
        state->i2c = i2c;
        state->current_modulation = 0;
+       state->if_freq = S5H1409_VSB_IF_FREQ;
 
        /* check if the demod exists */
        if (s5h1409_readreg(state, 0x04) != 0x0066)
 
        .demod_address = 0x32 >> 1,
        .output_mode   = S5H1409_SERIAL_OUTPUT,
        .gpio          = S5H1409_GPIO_ON,
-       .if_freq       = 44000,
+       .qam_if        = 44000,
        .inversion     = S5H1409_INVERSION_OFF,
        .status_mode   = S5H1409_DEMODLOCKING
 };
        .demod_address = 0x32 >> 1,
        .output_mode   = S5H1409_SERIAL_OUTPUT,
        .gpio          = S5H1409_GPIO_OFF,
-       .if_freq       = 44000,
+       .qam_if        = 44000,
        .inversion     = S5H1409_INVERSION_OFF,
        .status_mode   = S5H1409_DEMODLOCKING
 };