more operator overloads and improve comparisons