split out areas, made it lazy

- added small test
- general refactor