anchor.diff:      return playingSound;
     }
   
  -  void stop(Object tag) {
  -    for (int i = _playingSounds.length; i >= 0; i--) {
  -      SoundEffectStream playingSound = _playingSounds[i];
  -      if (playingSound.tag == tag) {
  -        playingSound._player.ptr.pause();
  -        _playingSounds.removeAt(i);
  -      }
  -    }
  -  }
  -
  -  List<SoundEffectStream> playingSoundsForTag(Object tag) {
  -    List<SoundEffectStream> list = [];
  -    for (SoundEffectStream playingSound in _playingSounds) {
  -      if (playingSound.tag == tag) {
  -        list.add(playingSound);
  -      }
  -    }
  -    return list;
  +  void stop(SoundEffectStream stream) {
  +    stream._player.ptr.pause();
  +    _soundEffectStreams.remove(stream);
     }
   
     void stopAll() {
  -    for (SoundEffectStream playingSound in _playingSounds) {
  +    for (SoundEffectStream playingSound in _soundEffectStreams) {
         playingSound._player.ptr.pause();
       }
  -    _playingSounds = [];
  +    _soundEffectStreams = [];
     }
   }
   
  
positive.code:   double volume = 1.0;
    double pitch = 1.0;
    double pan = 0.0;
    Object tag;
  
    // TODO: Implement completion callback. On completion, sounds should
    // also be removed from the list of playing sounds.
  
negative.code:   }
  
    MediaServiceProxy _mediaService;
    List<SoundEffectStream> _soundEffectStreams = [];
  
    // TODO: This should no longer be needed when moving to SoundPool backing
    Map<SoundEffect,MediaPlayerProxy> _mediaPlayers = {};
  