Cleaned up equals() and hashCode(), per code review