better abstraction, yay.