Rebased4 fix replay

Right, hopefully I've taken on-board all the points raised about #200 others have made with the exception of:
* Not not renaming some variables/members: _I felt that the names I changed were justified despite the fact that it might make it harder to trace the other changes.  In one case the convention of prefixing class members with an 'm' (and pointers with 'p') pointed out to me where a method's local variable (which erroneously had an 'm' prefix) was masking a class member with the same name which would cause issue when the member was used when it had not been set to the wanted value._
* For a method that returned messages about the action it did or the error that prevented it from doing so that required two different style of message depending on the caller, _returning both types and allowing the caller to choose which to use_ was not the optimum solution because it also had to configure whether another method would send a further message or not when _that_ had finished. In other circumstances it might have been worth considering but not this time!