anchor.diff:      });
     }
     
  -  _buildPresenters() => model.map((t) => new TaskPresenter(t, new Element.tag("li")));
  +  _buildPresenters() => modelList.map((t) => _buildPresenter(t));
  +  _buildPresenter(t) => new TaskPresenter(repo, modelList, t, new Element.tag("li"));
   }
   
   main() {
  +  var storage = new smvp.RestfulStorage({
  +    "find": "/api/tasks",
  +    "read": "/api/task",
  +    "create": "/api/tasks",
  +    "update": "/api/task",
  +    "destroy": "/api/task"
  +  });
  +
  +  var repo = new TasksRepository(storage);
     var tasks = new Tasks();
  -  var newTaskPresenter = new NewTaskPresenter(tasks, new Element.tag("div"));
  -  var tasksPresenter = new TasksPresenter(tasks, new Element.tag("div"));
  +
  +  var newTaskPresenter = new NewTaskPresenter(repo, tasks, new Element.tag("div"));
  +  var tasksPresenter = new TasksPresenter(repo, tasks, new Element.tag("div"));
     
     query("#container").elements.addAll([newTaskPresenter.render().el, tasksPresenter.render().el]);
   }
positive.code:     var textField = el.query(".task-text");
  
      var task = new Task.fromText(textField.value);
      model.add(task);
      task.save();
  
      textField.value = "";
    }
  }
  
  class TasksPresenter extends smvp.Presenter<Tasks>{
    TasksPresenter(tasks, el) : super(tasks, el, taskListTemplate){
      model.fetch();
    }
  
    subscribeToModelEvents(){
  
negative.code:     "click a.complete": _onComplete
    };
  
    _onDelete(event){
      tasks.remove(model);
      repo.destroy(model);
    }
  
    _onComplete(event){
      model.isCompleted ? model.inProgress() : model.complete();
      repo.save(model);
    }
  }
  
  class NewTaskPresenter extends smvp.Presenter {
    TasksRepository repo;
    Tasks tasks;
  
    NewTaskPresenter(this.repo, this.tasks, el) :super(null, el, newTaskTemplate);
  
    get events => {
      "click button": _addNewTask,
  