public boolean matches(ObjectTags itags) {
   if (itags == null) return false;
   for (EnumTag tag : tags.getAspects()) {
     if (itags.getAmount(tag) < tags.getAmount(tag)) return false;
   }
   return true;
 }
  public ObjectTags removeMatching(ObjectTags itags) {
    ObjectTags temptags = new ObjectTags();
    temptags.tags.putAll(itags.tags);

    for (EnumTag tag : tags.getAspects()) {
      if (!temptags.reduceAmount(tag, tags.getAmount(tag))) return null;
    }

    itags = temptags;
    return itags;
  }