java version agnostic