Very impressive abstraction and encapsulation skills!