add @SafeVarargs to avoid annoying warning