use the embedded struct to minimize code repetition