task uses Task_Base since it's simpler syntax