[Demonstration 1]

[Buggy Method]
public ActionResult createServerSocket() {
    new Thread(new Runnable() {

        @Override
        public void run() {
            boolean socketCreated = false;
            try {
                Socket clientSocket;
                InetAddress inetAddress;
                serverSocket = new ServerSocket(SERVER_PORT);
                socketCreated = true;
                if (serverListener != null)
                    Utility.postOnMainThread(new Runnable() {

                        @Override
                        public void run() {
                            serverListener.onSocketCreated();
                        }
                    });
                while (!Thread.currentThread().isInterrupted()) {
                    clientSocket = serverSocket.accept();
                    inetAddress = clientSocket.getInetAddress();
                    if (inetAddress != null) {
                        final ClientDevice newClient = setClientSocket(inetAddress.getHostAddress(), clientSocket);
                        if (newClient != null) {
                            if (serverListener != null)
                                Utility.postOnMainThread(new Runnable() {

                                    @Override
                                    public void run() {
                                        serverListener.onClientConnected(newClient);
                                    }
                                });
                            new InputStreamHandler(new DataInputStream(newClient.getInputStream()), receiveMessageListener, serverListener, newClient).start();
                        }
                    }
                }
            } catch (IOException | NullPointerException e) {
                e.printStackTrace();
                if (serverListener != null) {
                    if (socketCreated)
                        Utility.postOnMainThread(new Runnable() {

                            @Override
                            public void run() {
                                serverListener.onSocketClosed();
                            }
                        });
                    else
                        Utility.postOnMainThread(new Runnable() {

                            @Override
                            public void run() {
                                serverListener.onSocketCreateFailure();
                            }
                        });
                }
            }
        }
    }).start();
    return ActionResult.SUCCESS;
}

[Buggy Hunk]
final ClientDevice newClient = setClientSocket(inetAddress.getHostAddress(), clientSocket);

[Patch]
final ClientDevice newClient = clientScanner.setClientSocket(inetAddress.getHostAddress(), clientSocket);

[Demonstration 2]

[Buggy Method]
@Override
public void disconnect() throws CommandException {
    this.capacityCheckThread = null;
    this.recordingManager.destroy();
    this.connectionState = ConnectionState.DISCONNECTED;
    this.logout();
}

[Buggy Hunk]
this.capacityCheckThread = null;

[Patch]
this.capacityCheckThreadReference.set(null);

[Demonstration 3]

[Buggy Method]
private void updateTradeOfferFromJSON(JSONObject json, List<Player> players) {
    if (json.containsKey("tradeOffer")) {
        JSONObject tradeOffer = (JSONObject) json.get("tradeOffer");
        TradeOffer otherOffer;
        try {
            otherOffer = new TradeOffer(players, tradeOffer);
            if (model.getTradeOffer() == null || !model.getTradeOffer().equals(otherOffer)) {
                model.setTradeOffer(otherOffer);
                for (IModelListener listener : listeners) {
                    try {
                        listener.tradeOfferChanged(otherOffer);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        } catch (SchemaMismatchException e) {
            e.printStackTrace();
        }
    } else if (model.getTradeOffer() != null) {
        model.setTradeOffer(null);
        for (IModelListener listener : listeners) {
            try {
                listener.tradeOfferChanged(null);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

[Buggy Hunk]
else if (model.getTradeOffer() != null) {

[Patch]
else{// if (model.getTradeOffer() != null) {