Actually, I wasn't thinking of OTL at all - but that would be worth looking into.
I attached a generic scheduler though. I had to clean out some proprietary code, but not much.
The idea is that the generic type T is an enumerated type like f.x. TJob = (jobUnknown, jobUpdateFiles, jobPublishPage, jobCleanupOldData, jobEtcEtcEtc);
The actual task manager is a different story. It would take me quite some time to "unproprietaryize" that one - and that is really where the work is.
GenericScheduler.pas