[Demonstration 1]

[Buggy Method]
@RequestMapping("/{id}")
public String board(@PathVariable Long id, @RequestParam(value = "page", required = false) Integer page, Model model) {
    Board board = boardService.findOne(id);
    if (page == null) {
        page = 0;
    }
    // ToDo: Paging introduced a bug. All topics are now added to view regardless to what board they belong
    Page p = topicService.findAll(new PageRequest(page, 5));
    ArrayList<Integer> pages = new ArrayList<>();
    IntStream.range(0, p.getTotalPages()).forEach(pages::add);
    model.addAttribute("board", board);
    model.addAttribute("topics", p.getContent());
    model.addAttribute("pages", pages);
    model.addAttribute("currentPage", page);
    return "board";
}

[Buggy Hunk]
Page p = topicService.findAll(new PageRequest(page, 5));

[Patch]
Page p = topicService.findByBoard(board, new PageRequest(page, 5));

[Demonstration 2]

[Buggy Method]
@Override
public void exec(Sys sys, User user, Group group, String used, String[] args, Message message) {
    JavaOMDB omdb = SuperBotController.OMDB;
    String search = "";
    int page = 1;
    for (String arg : args) {
        if (arg.startsWith("-page=")) {
            String pg = arg.substring(6);
            try {
                page = Integer.parseInt(pg);
            } catch (NumberFormatException ex) {
                group.sendMessage(sys.message().escaped("Invalid page number (" + pg + ")"));
                return;
            }
        } else {
            if (!search.isEmpty()) {
                search += " ";
            }
            search += arg;
        }
    }
    if (search.length() > 0) {
        SearchResults res = omdb.search(search);
        if (res == null || res.getPageCount() == 0) {
            group.sendMessage(sys.message().escaped("No results."));
            return;
        }
        int maxPages = Math.min(10, res.getPageCount());
        if (page <= 0 || page > maxPages) {
            group.sendMessage(sys.message().escaped("Invalid page: %d, not in [%d, %d]", page, 1, maxPages));
            return;
        }
        if (maxPages > 0) {
            List<MessageBuilder> lines = new LinkedList<>();
            for (int i = 1; i <= maxPages; i++) {
                SearchResultsPage pa = res.getPage(i);
                for (SearchResult sr : pa) {
                    MessageBuilder m = sys.message();
                    m.bold(true).escaped(sr.getTitle()).bold(false);
                    m.escaped(" (" + sr.getYear() + "): " + sr.getImdbId() + ", a " + sr.getType());
                    lines.add(m);
                }
            }
            PaginatedData pages = new PaginatedData(lines, 20);
            pages.send(sys, group, page - 1);
        } else {
            group.sendMessage(sys.message().escaped("No results."));
        }
    } else {
        this.sendUsage(sys, user, group);
    }
}

[Buggy Hunk]
pages.send(sys, group, page - 1);

[Patch]
pages.send(sys, group, page - 1, false);

[Demonstration 3]

[Buggy Method]
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == VIEW_TYPE_LOADING) {
        return new ListLoadingViewHolder(inflater.inflate((getAdapterErrorLoadingErrorViewId() == 0 ? R.layout.nammarinetwork__list_endless_loading_view : getAdapterErrorLoadingErrorViewId()), parent, false));
    } else {
        return mainAdapter.onCreateViewHolder(parent, viewType - 1);
    }
}

[Buggy Hunk]
return mainAdapter.onCreateViewHolder(parent, viewType - 1);

[Patch]
return mainAdapter.onCreateViewHolder(parent, viewType);