added __hash__