rearrange; improve