@Override
	public void execute() {
		Forum forum;
		try {
			forum = ForumParser.parse(controller.forumDisplay(REPORTED_POSTS_FORUM_ID));
		} catch (IOException e) {
			controller.getModel().setReportSearchTask(null);
			logger.warn("Failed to parse forum.", e);
			stop();
			return;
		}

		for (ForumThread thread : forum.getForumThreads()) {
			if (!controller.getModel().cachedReportsContains(thread)) {
				Notifier.notify("New reported post by " + thread.getAuthor().getName(), thread.getPreview(), new NotificationEventAdapter() {
					@Override
					public void clicked(NotificationEvent event) {
						super.clicked(event);
						try {
							thread.open(controller);
							controller.getModel().setOpenReport(thread);
							controller.getModel().setReportSearchTask(null);
							stop();
						} catch (OpenThreadException | IOException e) {
							logger.warn("Failed to open thread:", e);
						}
					}

					@Override
					public void closed(NotificationEvent event) {
						super.closed(event);
						controller.getModel().addMissedReport(thread);
					}
				});
				controller.getModel().addCachedReport(thread);
				break;
			}
		}

		forum.getDeletedForumThreads().stream().filter(deletedThread -> controller.getModel().missedReportsContains(deletedThread)).forEach(deletedThread -> controller.getModel().removeMissedReport(deletedThread));
	}