Initial implementation

Do not merge until:
- [x] at least 2 :shipit: