public void run(double duration) {
    double endtime = _currentTime + duration;
    while ((!empty()) && (_head.next.waketime <= endtime)) {
//      if ((_head.next.waketime - _currentTime) <= 1e-05) {
//        super.setChanged();
//        super.notifyObservers();
//      }
    if ((_currentTime - _lastUpdate) > (MP.simulationTimeStep * .1)) {
    	_lastUpdate = _currentTime;
        super.setChanged();
        super.notifyObservers();
      }
      //System.out.println("Time is now " + _currentTime + " vs " + _head.next.waketime + " " + (_currentTime - _head.next.waketime) + " LU: " + _lastUpdate);
      _currentTime = _head.next.waketime;
      
      dequeue().run();
      //super.setChanged();
      //super.notifyObservers();
    }
    _currentTime = endtime;
  }