fix most cases
Uncertain cases. All the rest may change the `self` intentionally.