public static boolean joinCity(CommandSender sender, String playerName, String cityName, boolean force) {
    	playerName = getFormattedPlayerName(playerName);
    	if (playerName == null) {
    		sender.sendMessage(TEXTCOLOR + "This player has not yet played on our server, and yes, this plugin's too lame to switch it for you anyway :P");
    		return false;
    	}
    	City city = getCity(cityName);
    	if (city == null) {
    		sender.sendMessage(TEXTCOLOR + "Could not find target city: " + ERRORCOLOR + cityName + TEXTCOLOR + ".  Please try one of: " + CITYCOLOR + Conflict.cities);
    		return false;
    	}
    	if (!force) {
			if (!isUnassigned(playerName) && !Conflict.cooldownExpired(playerName))
			{
				sender.sendMessage(Conflict.getFormattedRemainingCooldown(playerName));
				return false;
			}
    	}
    	City oldCity = null;
    	while (Conflict.getPlayerCity(playerName) != null) {
    		oldCity = Conflict.getPlayerCity(playerName);
    		if (oldCity != null) {
    			if (oldCity.equals(city)) {
    				sender.sendMessage(TEXTCOLOR + "Already a member of " + CITYCOLOR + city.getName() + TEXTCOLOR + "!");
    				return false;
    			}
    			oldCity.removePlayer(playerName);
        		leaveChat(playerName, oldCity.getName());
    			sender.sendMessage(TEXTCOLOR + "Removing from " + CITYCOLOR + oldCity.getName());
    		}
    	};
    	
    	city.addPlayer(playerName);
    	
    	//Want to be sure to remove any dupes or different capitalizations
        removeUnassigned(playerName);

    	if (oldCity != null) {
        	Bukkit.getServer().broadcastMessage(PLAYERCOLOR + playerName + TEXTCOLOR 
        			+ " has abandoned " + CITYCOLOR + oldCity.getName() + TEXTCOLOR
        			+ " and is now a member of " + CITYCOLOR + city.getName() + TEXTCOLOR + "!");
    		
    	} else {
	    	Bukkit.getServer().broadcastMessage(PLAYERCOLOR + playerName + TEXTCOLOR + " is now a member of "
	    		+ CITYCOLOR + city.getName() + TEXTCOLOR + "!");
    	}	
    	return true;
    }