use setImmediate if it's possible
add isStarted method