Excellent abstraction, good job.