anchor.diff:        e.target.value = '';
       });
       
  -    globalEvent$.where((e) => e.details.containsKey('isTyping'))
  -          .listen((e) {
  -          _updateString(e);
  -    });
  -
  +    globalEvent$.where((e) => e.details.containsKey('isTyping')
  +                            && receivers.contains(e.details['owner']))
  +                    .listen((e) {
  +                    _updateString(e);
  +              });
    }
     
     User owner;
  
positive.code:   }
     
    _updateString(e) {
      _typingString = e.details['owner'].name + " is typing...";
      repaint();
    }
    
  
negative.code:           .where((e) => e.keyCode == KeyCode.ENTER && e.target.value != '');
     
      lifeCycle$.where((e) => e is WillMountEvent).listen((onData) {
        publishStream(_input.keyboard$.map((e) 
                    => new GlobalEvent(details:{'owner': owner, 'isTyping': true})));    
        
        globalEvent$.listen((m) {
          if(!m.details.containsKey('isTyping')) {
            messages.add(m);
            repaint();
            scrollToBottom();
          }
        });
      });
      
      publishStream(_input.focus$.map((e) 
  