anchor.diff:    String target;
     Timer last;
     Spinner spin;
  -
  -  Status(Settings optz, this.obj, String env, String svc, this.spin) {
  +  Monitor mon;
  +  String slug;
  +
  +  Status(Settings optz, this.obj, String env, String svc, this.spin, this.mon) {
  +    slug = "$svc-$env";
       obj.classes.add('status');
       obj.onClick.listen((e) => run());
       this.target = optz.svcz[svc].replaceFirst("\$", optz.envz[env]);
  
positive.code:   Settings options = new Settings();
    TableElement table = new TableElement();
    document.body.append(table);
    options.onChange.listen((e) => draw(table, options));
    draw(table, options);
  }
  
  draw(TableElement table, Settings optz) {
    table.setInnerHtml(''); // clear
    TableRowElement thead = table.createTHead().addRow();
    thead.addCell(); // empty corner
    for (var env in optz.envz.keys) {
      thead.addCell().text = env;
    }
    TableSectionElement tbody = table.createTBody();
    for (var key in optz.svcz.keys) {
      createRow(optz, tbody.addRow(), key);
    }
  }
  
  createRow(Settings optz, TableRowElement row, String svc) {
    row.addCell().text = svc;
    for (var env in optz.envz.keys) {
      row.addCell().append(new StatusElement(optz, env, svc));
    }
  }
  
  
negative.code:     } else {
        obj.classes.add('status-bad');
      }
      mon.setState(slug, status);
  
      // Set text + timeouts based on response
      if (status < 200) {
  