Some refactoring

- Add abstract Basis type
- Add supported()
- Nicer code in general