@Override
	public int compareTo(Character o)
	{
		boolean someGTStat = false;
		boolean someLTStat = false;
		
		if (o == null)
			throw new NullPointerException();
		
		/* lower soul level is always better*/
		if (this.level != o.level)
			return o.level - this.level;
		
		for (String statName: stats.keySet())
		{
			int value = stats.get(statName);
			int oValue = o.stats.get(statName);
			
			if (value > oValue)
				someGTStat = true;
			else if (value < oValue)
				someLTStat = true;
		}
		
		/* 
		 * no or ambiguous stat differences
		 * (we could have taken the starting lvl into account,
		 * but the difference in souls spent is minuscule and prolly offset by starting gear)
		 */
		if (someGTStat == someLTStat)
			return 0;
		
		/* obvious stat differences */
		if (someGTStat)
			return 1;
		if (someLTStat)
			return -1;
		
		/* this is never reached */
		return 0;
	}