Problem engine

Merging James' branch - where he has been working on *a* feature