Pretty big refactor to abstract some of the animation functionality