mapper is not optional; use identity mapper if omited