anchor.diff:        setPosition(taotie, i, mousePos.x, mousePos.y);
         _taoties.add(taotie);
   
  -      StreamExt.delay(mouseMove, new Duration(milliseconds : i * 100))
  -        ..listen((evt) => setPosition(taotie, i, evt.offset.x, evt.offset.y));
  +      var streamSub = StreamExt
  +                        .delay(mouseMove, new Duration(milliseconds : i * 100))
  +                        .listen((evt) => setPosition(taotie, i, evt.offset.x, evt.offset.y));
  +      _taotieStreams.add(streamSub);
       }
   
       Taotie.onHit.listen((HitEvent evt) {
         evt.starium.explode();
  +
  +      removeChild(evt.taotie);
  +
         if (evt.taotie.isBoss) {
           _gameOver();
         } else {
  -        removeChild(evt.taotie);
  -
           // once the taotie object's removed, let's play the taotie break flipbook in its place to show
           // taotie breaking!
           var textureAtlas = _resourceManager.getTextureAtlas("${Characters.TAOTIE}_break_atlas");
  
positive.code:   double _minStariumTime  = 8.0;
    double _maxStariumTime  = 5.0;
    List<Taotie> _taoties   = new List<Taotie>();
    List<Starium> _stariums = new List<Starium>();
  
    Game(this._resourceManager) {
      new Bitmap(_resourceManager.getBitmapData("background"))
  
negative.code:                    "..but it looks like we have a STARIUM shower inbound.." ]),
        new Dialog(Characters.BOSS,
                   [ "Don't get hit by them STARIUMs or you'll CRACK!!",
                     "Follow me lads, I have a cunning plan..",
                     "...",
                     "RUN!!" ])];
      return DialogWindow.Singleton
  