anchor.diff:          if (debugShape != null) {
             debugShape = debugShape.clone();
             debugShape.fill = null;
  -          debugShape.stroke = Color.spectrum[actor.id % Color.spectrum.length];
  +          debugShape.stroke = Color.spectrum[actor._id % Color.spectrum.length];
             pencil.move(actor.position.x, actor.position.y).rotate(actor.rotation).shape(debugShape).draw();
           }
         }
       }
     }
     
  -  int _nextId = 0;
  -  
  -  Actor addActor(Actor actor) {
  -    actor.id = _nextId++;
  -    actors.add(actor);
  -    return actor;
  -  }
  -}
  -
  -class Actor<T extends Shape> {
  -  int id = -1;
  +  void start();
  +  void update(num dt);
  +}
  +
  +class Actor<T extends Shape> extends SafeListItem {
  +  int _id;
     Vector position;
     num rotation;
  -  num depth;  
  +  num depth;
  +  num get priority => depth;
  +  void set priority(num v) { priority = v; }
     T shape;
     Sprite sprite;
     
  
positive.code:   void update(num dt) { }
  }
  
  class System {
    ActorList list;
    num priority;
    
    System(Page page) {
      page.systems.add(this);
    }
    
    bool isRelevant(Actor actor) { return false; }
    
  
negative.code:   bool _destroyed = false;
    bool get destroyed => _destroyed;
    
    Actor({Vector position, num rotation, num depth, T shape, Sprite sprite}) {
      if (position != null) this.position = new Vector.from(position);
      else this.position = Vector.zero;
      this.rotation = rotation ?? 0.0;
      this.depth = depth ?? 0;
      this.sprite = sprite ?? null;
      this.shape = shape ?? null;
    }
    
    void destroy() {
  