- (ObjectToHome*)doWorkWithTasks:(NSMutableArray*)tasks
{
    @try
    {
        [(Task*)[tasks lastObject] done];

        [tasks removeLastObject];

        return [tasks count] > 0 ? [self doWorkWithTasks: tasks] : self ;

    } 
    @catch (NSException * exception)
    {
        [tasks insertObject: [Task taskWithException: exception] atIndex:0];

        [self doWorkWithTasks: tasks];
    }
    @finally
    {}
}