added equals and hash code