Simon's proposal
more complete usage
rearange for clarity
merge conflicts
merge conflicts