anchor.diff:    }
   }
   
  -class ActorList<T extends Actor> extends ListBase {
  -  
  -  ActorList(Page page) {
  -    page._lists.add(this);
  -  }
  -  
  +class ActorList<T extends Actor> extends SafeList<T> {  
  +  void _update() {
  +    _removeList.addAll(_objs.where((T obj) => obj._destroyed));
  +    super._update();
  +  }
  +  
  +  void setVisible(bool visible) {
  +    for (T actor in _objs) actor.visible = visible;
  +  }
  +  
  +  void destroy() {
  +    for (T actor in _objs) actor.destroy();
  +  }
  +}
  +
  +class SystemList<T extends System> extends SafeList<T> {
  +  
  +}
  +
  +class SafeListItem {
  +  Page page;
  +  num priority = 0.0;
  +}
  +
  +class SafeList<T extends SafeListItem> extends ListBase with SafeListItem {
     List<T> _objs = new List<T>();
     List<T> _addList = new List<T>();
     Set<T> _removeList = new Set<T>();
     
  -  void add(T obj) => _addList.add(obj);
  +  void add(T obj) {
  +    obj.page = page;
  +    _addList.add(obj);
  +  }
     
     bool remove(T obj) {
  -    _removeList.add(obj);
  -    return _objs.contains(obj);
  +    bool contains = _objs.contains(obj);
  +    if (contains) _removeList.add(obj);
  +    return contains;
     }
     
     int get length => _objs.length;
  
positive.code:         if (debugShape != null) {
            debugShape = debugShape.clone();
            debugShape.fill = null;
            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;
    Vector position;
    num rotation;
    num depth;  
    T shape;
    Sprite sprite;
    
  
negative.code:   void update(num dt) { }
  }
  
  class System extends SafeListItem {
    ActorList list;
    num priority = 0.0;
    
    bool isRelevant(Actor actor) { return false; }
    
  