int range_offst, tp_freq;
 
        range_offst = internal->srch_range / 2000;
-       tp_freq = internal->freq + (internal->derot_freq * internal->mclk) / 1000;
+       tp_freq = internal->freq - (internal->derot_freq * internal->mclk) / 1000;
 
        if ((tp_freq >= params->freq - range_offst) && (tp_freq <= params->freq + range_offst)) {
                internal->status = RANGEOK;
                                                        "RANGE OK ! derot freq=%d, mclk=%d",
                                                        internal->derot_freq, internal->mclk);
 
-                                               internal->freq = params->freq + ((internal->derot_freq * internal->mclk) / 1000);
+                                               internal->freq = params->freq - ((internal->derot_freq * internal->mclk) / 1000);
                                                reg = stb0899_read_reg(state, STB0899_PLPARM);
                                                internal->fecrate = STB0899_GETFIELD(VITCURPUN, reg);
                                                dprintk(state->verbose, FE_DEBUG, 1,
 
 };
 
 enum stb0899_inversion {
-       IQ_SWAP_OFF     = 0,
-       IQ_SWAP_ON,
+       IQ_SWAP_OFF     = +1, /* inversion affects the sign of e. g. */
+       IQ_SWAP_ON      = -1, /* the derotator frequency register    */
 };
 
 #define STB0899_GPIO00                         0xf140