public boolean upgradePossible(Upgrade upgrade) {
    //  Consider returning a String explaining the problem, if there is one?
    //  ...Or an error code of some kind?
    if (upgrades == null) return false ;
    boolean isSlot = false, hasReq = upgrade.required == null ;
    int numType = 0 ;
    for (Upgrade u : upgrades) {
      if (u == null) { isSlot = true ; break ; }
      if (u == upgrade.required) hasReq = true ;
      if (u == upgrade) numType++ ;
    }
    return isSlot && hasReq && numType < MAX_OF_TYPE ;
  }