anchor.diff:                    : "${speech.speaker} to...");
         }
   
  -      speech.onRemove.listen((_) => speechElement.remove());
  +      speech.onRemove.listen((_) => _beforeNextPaint(speechElement.remove));
   
         UListElement repliesElement = null;
   
         speech.onReplyAvailable.listen((reply) {
  -        if (repliesElement == null) {
  -          repliesElement = new UListElement()..classes.add('replies');
  -          speechElement.children.add(repliesElement);
  -        }
  -
           var replyElement = new LIElement()
             ..children.add(new SpanElement()
               ..classes.addAll(['reply', 'reply-available'])
               ..innerHtml = reply.markup
               ..onClick.listen((_) => reply.use()));
   
  -        repliesElement.children.add(replyElement);
  +        if (repliesElement == null) {
  +          repliesElement = new UListElement()..classes.add('replies');
  +          repliesElement.children.add(replyElement);
  +          _beforeNextPaint(() => speechElement.children.add(repliesElement));
  +        } else {
  +          _beforeNextPaint(() => repliesElement.children.add(replyElement));
  +        }
   
           // TODO consider alternate behavior vs used and removed vs just removed
           // vs unavailable due to exclusive reply use
  -        reply.onRemove.listen((_) => replyElement.remove());
  +        reply.onRemove.listen((_) => _beforeNextPaint(replyElement.remove));
         });
       });
   
  
positive.code:         _optionsContainer.children.add(optionElement);
        });
  
        o.onUnavailable.first.then((_) {
          _beforeNextPaint(() {
            optionElement.remove();
          });
        });
      });
    }
  
    // TODO: not sure if this is really helping anything
    _beforeNextPaint(void domUpdate()) {
      _domQueue.add(domUpdate);
      window.animationFrame.then((_) {
        while (_domQueue.isNotEmpty) {
          _domQueue.removeFirst()();
        }
      });
    }
  }
  
negative.code: /// Quick hacked together UI
  class SimpleHtmlUi {
    final HtmlElement _container;
    final _dialogContainer = new DivElement()..classes.add('dialog');
    final _optionsContainer = new UListElement()
      ..classes.add('options');
  
    var _domQueue = new Queue<Function>();
  