added tons of validation