else if (priv->state == STATE_ACTIVE_TC)
                cxd2841er_read_status_tc(fe, &status);
 
+       cxd2841er_read_signal_strength(fe, &strength);
+       p->strength.stat[0].scale = FE_SCALE_RELATIVE;
+       p->strength.stat[0].uvalue = strength;
+
        if (status & FE_HAS_LOCK) {
-               cxd2841er_read_signal_strength(fe, &strength);
-               p->strength.len = 1;
-               p->strength.stat[0].scale = FE_SCALE_RELATIVE;
-               p->strength.stat[0].uvalue = strength;
                cxd2841er_read_snr(fe, &snr);
-               p->cnr.len = 1;
                p->cnr.stat[0].scale = FE_SCALE_DECIBEL;
                p->cnr.stat[0].svalue = snr;
+
                cxd2841er_read_ucblocks(fe, &errors);
-               p->block_error.len = 1;
                p->block_error.stat[0].scale = FE_SCALE_COUNTER;
                p->block_error.stat[0].uvalue = errors;
+
                cxd2841er_read_ber(fe, &ber);
-               p->post_bit_error.len = 1;
                p->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
                p->post_bit_error.stat[0].uvalue = ber;
        } else {
-               p->strength.len = 1;
-               p->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
-               p->cnr.len = 1;
                p->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
-               p->block_error.len = 1;
                p->block_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
-               p->post_bit_error.len = 1;
                p->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
        }
        return 0;
                        __func__, carr_offset);
        }
 done:
+       /* Reset stats */
+       p->strength.stat[0].scale = FE_SCALE_RELATIVE;
+       p->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
+       p->block_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
+       p->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
+
        return ret;
 }
 
        return DVBFE_ALGO_HW;
 }
 
+static void cxd2841er_init_stats(struct dvb_frontend *fe)
+{
+       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
+
+       p->strength.len = 1;
+       p->strength.stat[0].scale = FE_SCALE_RELATIVE;
+       p->cnr.len = 1;
+       p->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
+       p->block_error.len = 1;
+       p->block_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
+       p->post_bit_error.len = 1;
+       p->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
+}
+
+
 static int cxd2841er_init_s(struct dvb_frontend *fe)
 {
        struct cxd2841er_priv *priv = fe->demodulator_priv;
        /* SONY_DEMOD_CONFIG_SAT_IFAGCNEG set to 1 */
        cxd2841er_write_reg(priv, I2C_SLVT, 0x00, 0xa0);
        cxd2841er_set_reg_bits(priv, I2C_SLVT, 0xb9, 0x01, 0x01);
+
+       cxd2841er_init_stats(fe);
+
        return 0;
 }
 
        /* SONY_DEMOD_CONFIG_PARALLEL_SEL = 1 */
        cxd2841er_write_reg(priv, I2C_SLVT, 0x00, 0x00);
        cxd2841er_set_reg_bits(priv, I2C_SLVT, 0xc4, 0x00, 0x80);
+
+       cxd2841er_init_stats(fe);
+
        return 0;
 }