How to migrate a non-upgradeable ERC20 token to a new version?

Pius asked on Telegram

If someone delpoys a contract (e.g. ERC20 token contract) which is not upgradeable and he has users on it, how can he migrate the data to a new comtract?

Please ideas and links to resource materiails will be welcomed

The options appear to be:

  1. Create a new token and mint amounts for token holders based on their balance at a pre-agreed block.

    This option would work best where a token has a small number of holders and is not being used or exchanged.

  2. Create a new token and an exchange contract where token holders can exchange the original token for new ones at a specified rate. This could be 1:1 or some other rate. The old tokens could be burnt, transferred to an address without a known private key or locked in a contract.