some ideas about tidying up _execute() - UNTESTED