splitting gweled engine functionality to make it more modular