Refactor - split out visual component to its own file