break out into modules, prevent nested task exec