added tons of unit tests