The TaskScheduler and the SchedulerBackend reference each other, so they're initialized as:

a = new TaskScheduler()
b = new SchedulerBackend()
a.initialize(b)

The SchedulerBackend could be created in the TaskScheduler constructor -- but that would require adding a bunch more constructor params to allow for different kind of SchedulerBackends -- which I think is more ugly