public int hashCode() {
        int hash = 1;
        if (isSpeedRequired()) hash *= 2;
        if (isCourseRequired()) hash *= 3;
        if (isAltitudeReguired()) hash *= 5;
        if (isCostAllowed()) hash *= 7;
        
        if (getAccuracy() <= ACCURACY_EXCELLENT) hash *= 11;
        else if (getAccuracy() <= ACCURACY_GOOD) hash *= 13;
        else if (getAccuracy() <= ACCURACY_BAD) hash *= 17;
        else hash *= 19;
        
        return hash;
    }