total refactor
hash