supports suspending functions