complete refactor (animation is still missing)