You're violating the contracts in `Object` by specifying `equals()` but not `hashCode()`. (Two equal objects must have the same hashcode.)

This is going to be tough due to the mirroring requirement, though...