Refactor a bit and add documentation
Implement crazy-slots