@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    public void onBlockBreak(final BlockBreakEvent breaking) {
        if (breaking.getBlock().getTypeId() != Material.WALL_SIGN.getId() && breaking.getBlock().getTypeId() != Material.SIGN_POST.getId()) return;

        final List<String> worldFilters = this.worlds.get(breaking.getBlock().getWorld().getName());
        if (worldFilters == null) return;

        final String[] lines = ((org.bukkit.block.Sign) breaking.getBlock().getState()).getLines();
        for (final String filterName : worldFilters) {
            if (this.filters.get(filterName).accepts(lines)) {
                this.signChanges.add(new SignRemoval(filterName, breaking.getBlock().getLocation(), System.currentTimeMillis()));
                this.stale = true;
            }
        }
    }