public static boolean clean(final Player player, Item item, final int slotId) {
		final Herbs herb = getHerb(item.getId());
		if (herb == null)
			return false;
		if (player.getSkills().getLevel(Skills.HERBLORE) < herb.getLevel()) {
			player.getPackets().sendGameMessage(
					"You do not have the required level to clean this.", true);
			return true;
		}
		WorldTasksManager.schedule(new WorldTask() {
			@Override
			public void run() {
				Item i = player.getInventory().getItem(slotId);
				if (i == null)
					return;
				if (i.getId() != herb.getHerbId())
					return;
				i.setId(herb.getCleanId());
				
				player.getInventory().refresh(slotId);
				player.getInventory().addItem(995, 1000);
				player.HERBS_CLEANED++;
				if (player.HERBS_CLEANED == 2500) {
					for (Player players : World.getPlayers()) {
						players.getPackets().sendGameMessage(
								"<img=8> <col=996600>"
								              + player.getDisplayName() + " cleaned 2,500 herbs!");
				}
				}
				
				player.getSkills().addXp(Skills.HERBLORE, herb.getExperience());
				player.getPackets()
						.sendGameMessage("You clean the herb.", true);
			}

		});
		return true;
	}