Removed Hashable compliance + big refactoring