[Demonstration 1]

[Buggy Method]
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    logger.debug("channel read {}", msg);
    ProtocolTransport transport = new ProtocolTransport(ctx.channel(), (ByteBuf) msg);
    if (transport.getSession() == null) {
        userExecutor.execute(new AuthTask(ctx, transport));
    } else {
        ctx.fireChannelRead(msg);
    }
}

[Buggy Hunk]
logger.debug("channel read {}", msg);

[Patch]
logger.info("channel read {}", msg);

[Demonstration 2]

[Buggy Method]
private void info(String msg) {
    logger.info(msg);
}

[Buggy Hunk]
logger.info(msg);

[Patch]
logger.debug(msg);

[Demonstration 3]

[Buggy Method]
@Override
public void initialize() {
    logger.debug("Initialize MeterHandler for Thing {}", getThing());
    Configuration config = getThing().getConfiguration();
    DSMRMeterDescriptor meterDescriptor = null;
    if (config.containsKey(KEY_METERTYPE) && config.containsKey(KEY_CHANNEL) && config.containsKey(KEY_IDSTRING)) {
        DSMRMeterType meterType = null;
        Integer channel = null;
        String idString = null;
        try {
            meterType = DSMRMeterType.valueOf((String) config.get(KEY_METERTYPE));
        } catch (Exception exception) {
            logger.error("Invalid meterType in configuration", exception);
        }
        try {
            channel = ((Integer) config.get(KEY_CHANNEL)).intValue();
        } catch (Exception exception) {
            logger.error("Invalid channel in configuration", exception);
        }
        try {
            idString = (String) config.get(KEY_METERTYPE);
        } catch (Exception exception) {
            logger.error("Invalid idString in configuration", exception);
        }
        if (meterType != null && channel != null && idString != null) {
            meterDescriptor = new DSMRMeterDescriptor(meterType, channel, idString);
        }
    }
    if (meterDescriptor != null) {
        meter = new DSMRMeter(meterDescriptor, this);
        // Initialize timeout timer
        valueReceivedTimer = new Timer(meter.toString(), true);
        valueReceivedTimer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                if (System.currentTimeMillis() - lastValuesReceivedTs > DSMRMeterConstants.METER_VALUES_RECEIVED_TIMEOUT) {
                    if (!getThing().getStatus().equals(ThingStatus.OFFLINE)) {
                        updateStatus(ThingStatus.OFFLINE);
                    }
                }
            }
        }, DSMRMeterConstants.METER_VALUES_TIMER_PERIOD, DSMRMeterConstants.METER_VALUES_TIMER_PERIOD);
        updateStatus(ThingStatus.OFFLINE);
    } else {
        logger.error("Invalid configuration for this thing. Delete Thing if the problem persists.");
        updateStatus(ThingStatus.UNKNOWN, ThingStatusDetail.CONFIGURATION_ERROR, "Invalid configuration for this thing. Delete Thing if the problem persists.");
    }
}

[Buggy Hunk]
channel = ((Integer) config.get(KEY_CHANNEL)).intValue();

[Patch]
channel = ((BigDecimal) config.get(KEY_CHANNEL)).intValue();