isEqual implemented
full implementation