[Demonstration 1]

[Buggy Method]
private void startBot() {
    Set<String> channels = new HashSet<>();
    channels.add("#" + PropertyGetter.getUSERNAME());
    ChannelStats.getStats().put("#" + PropertyGetter.getUSERNAME(), new UserChannel(0));
    for (User u : JpaRepository.findUsersToAutoJoin()) {
        channels.add("#" + u.getName().toLowerCase());
        ChannelStats.getStats().put("#" + u.getName().toLowerCase(), new UserChannel(u.whisperSettings()));
    }
    String[] channelArray = new String[channels.size()];
    int i = 0;
    for (String s : channels) {
        channelArray[i++] = s;
    }
    while (true) {
        try {
            TwitchBot bot = new TwitchBot(PropertyGetter.getUSERNAME(), PropertyGetter.getOAUTH(), channelArray);
            bot.setUseTwitchCapabilities(true);
            bot.addListener(new DefaultListener());
            bot.addListener(new CommandListener());
            bot.startBot();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
    //restarts the bot
}

[Buggy Hunk]
bot.addListener(new CommandListener());

[Patch]
bot.addListener(new EventListener(channels));

[Demonstration 2]

[Buggy Method]
public void start() {
    int assignedPort = 0;
    try {
        JSch jsch = new JSch();
        String username = config.getProperty(CONFIG_USERNAME);
        String password = config.getProperty(CONFIG_PASSWORD);
        String keyPrivate = config.getProperty(CONFIG_KEY_PRIVATE);
        String keyPublic = config.getProperty(CONFIG_KEY_PUBLIC);
        String passphrase = config.getProperty(CONFIG_PASSPHRASE);
        String knownHosts = config.getProperty(CONFIG_KNOWN_HOSTS);
        String host = config.getProperty(CONFIG_HOST);
        Integer port = Integer.valueOf(config.getProperty(CONFIG_PORT));
        assert host != null;
        assert port != null;
        boolean useKey = (keyPrivate != null && !"".equals(keyPrivate.trim()));
        session = jsch.getSession(username, host, port);
        jsch.setKnownHosts(knownHosts);
        if (useKey) {
            if (passphrase == null || "".equals(passphrase.trim())) {
                jsch.addIdentity(keyPrivate, keyPublic);
            } else {
                jsch.addIdentity(keyPrivate, keyPublic, passphrase.getBytes());
            }
        } else {
            session.setPassword(password);
        }
        session.setConfig(config.getProperties());
        session.setDaemonThread(true);
        // Connect
        session.connect();
        Channel channel = session.openChannel("shell");
        channel.connect();
        String forwardHost = config.getProperty(CONFIG_HOST_REMOTE);
        Integer remotePort = Integer.valueOf(config.getProperty(CONFIG_PORT_REMOTE));
        int nextPort = localPort.incrementAndGet();
        // NOTE: scan max next 10 ports
        for (int i = 0; i < 10; i++) {
            if (isPortOpen("127.0.0.1", nextPort)) {
                break;
            }
            nextPort = localPort.incrementAndGet();
        }
        assignedPort = session.setPortForwardingL(localPort.incrementAndGet(), forwardHost, remotePort);
        if (logger.isDebugEnabled()) {
            logger.debug("Server version: {}", session.getServerVersion());
            logger.debug("Client version: {}", session.getClientVersion());
            logger.debug("Host          : {}", session.getHost());
            logger.debug("Port          : {}", session.getPort());
            logger.debug("Forwarding    : {}", session.getPortForwardingL());
            logger.debug("Connected     : {}", session.isConnected());
            logger.debug("Private key   : {}", useKey);
        }
    } catch (Exception e) {
        logger.error(e.toString(), e);
    }
    if (assignedPort == 0) {
        throw new RuntimeException("Port forwarding failed !");
    }
}

[Buggy Hunk]
assignedPort = session.setPortForwardingL(localPort.incrementAndGet(), forwardHost, remotePort);

[Patch]
assignedPort = session.setPortForwardingL(nextPort, forwardHost, remotePort);

[Demonstration 3]

[Buggy Method]
private void passEventToBoardManagerOrDelay(JirbanIssueEvent event) throws IndexException {
    if (event.isRecalculateState()) {
        //Delay the processing of the event as outlined in the class javadoc
        currentEvt = event;
    } else {
        //We can handle the event right away
        boardManager.handleEvent(event);
    }
}

[Buggy Hunk]
if (event.isRecalculateState()) {

[Patch]
if (event.isRecalculateState() && !event.isRerankOnly()) {