Wip 5858 rebase

There was an additional do_op() change which I believe is a bug in the current code.

The breakdown of changes isn't as clean as I'd like.  Either we leave it alone because that happen to fall out of my development, try to make much cleaner delineation of the changes or just squash the last 5 commits into 1.