@Override
	public AbilityLimits getCommonSkillRemainders(MOB student)
	{
		final AbilityLimits aL = getCommonSkillLimit(student);
		final CharStats CS=student.charStats();
		if(CS.getCurrentClass()==null) return aL;
		final HashSet culturalAbilities=new HashSet();
		final PairVector<String,Integer> culturalAbilitiesDV = student.baseCharStats().getMyRace().culturalAbilities();
		for(int i=0;i<culturalAbilitiesDV.size();i++)
			culturalAbilities.add(culturalAbilitiesDV.getFirst(i).toLowerCase());
		for(int a=0;a<student.numAbilities();a++)
		{
			final Ability A2=student.fetchAbility(a);
			if(A2 instanceof CommonSkill)
			{
				if(culturalAbilities.contains(A2.ID().toLowerCase()))
					continue;
				boolean foundInAClass=false;
				for(int c=0;c<CS.numClasses();c++)
					if(CMLib.ableMapper().getQualifyingLevel(CS.getMyClass(c).ID(), false, A2.ID())>=0)
					{
						foundInAClass=true;
						break;
					}
				if(foundInAClass)
					continue;
				aL.commonSkills--;
				if((A2.classificationCode()&Ability.ALL_DOMAINS)==Ability.DOMAIN_CRAFTINGSKILL)
					aL.craftingSkills--;
				else
					aL.nonCraftingSkills--;
			}
		}
		return aL;
	}