introduce dependency types
use dependency type to schedule tasks