Rearrange stuff a bit.
Add __weak where needed.