added better song logic, and some validation functions