uses reflection by default