modified from D:
fix conflict