@Command(command = "freeze",
			arguments = {"target player[s]"},
			description = "freezes the target players in their place",
			permissions = {"freeze"})
	public static boolean freeze(CommandSender sender, String targetPlayer) throws EssentialsCommandException {
		// get a list of all target players
		ArrayList<Player> targetPlayers = PlayerSelector.selectPlayersExact(targetPlayer);
		
		// make sure we have at least one target player
		if(targetPlayers.size() == 0) {
			throw new EssentialsCommandException("I couldn't find / parse target player[s] '%s' to freeze!", targetPlayer);
		}
		
		// loop through all target players
		for(Iterator<Player> it = targetPlayers.iterator(); it.hasNext();) {
			// get the player
			Player target = it.next();
			
			// only if they aren't already frozen
			if(isFrozen(target)) {
				if(sender.getName().equals(target.getName())) {
					ColourHandler.sendMessage(target, "&bYou are already frozen!");
				}
				else {
					ColourHandler.sendMessage(sender, "&b" + target.getName() + " was already frozen!");
				}
				continue;
			}
			
			// enable the frozen metadata on them
			target.setMetadata("frozen", new FixedMetadataValue(MCNSAEssentials.getInstance(), true));
			
			// alert them
			if(sender.getName().equals(target.getName())) {
				ColourHandler.sendMessage(target, "&bYou froze yourself!");
			}
			else {
				ColourHandler.sendMessage(target, "&bYou have been frozen by %s! You may only talk until you are unfrozen!", sender.getName());
				ColourHandler.sendMessage(sender, "&b" + target.getName() + " has been frozen!");
			}
		}
		
		return true;
	}