more abstraction in scheduler