This was buggy but I need to move back to something closer to this as the current hashCode()/equals() are not precise enough