added tons of validation...