add simulate function