Refactored components, properties, and added some validation