Features 1+2+3

Relies on:

- [x] #7 
- [x] #8 
- [x] #9 
- [x] #10