Minimal refactoring for a8c3a031c068d3a356c105af42c2819dc3962124

IMO this needs further refactoring - respect separation of concerns:
it's not AbstractProject's call to trigger a node offline