Add __hash__, do some polishing
Rename decorators, add with_init