Started abstracting components for better testability.