React

Thought I'd open this as a PR to make it easier to compare

All work was done by @petehunt