First pass at reactive API.
- Needs work!