Added additional model abstraction for tasks to allow them to be exchanged at runtime.