anchor.diff:  ;;;  ------------------------------------------------- event-channel -------
   
   (defclass EVENT-CHANNEL (CosEventChannelAdmin:EventChannel-servant)
  -  ((consumers  :initform '() :accessor consumers)
  -   (suppliers  :initform '() :accessor suppliers)
  -   (consumer-admin :initform nil :accessor consumer-admin)
  -   (supplier-admin :initform nil :accessor supplier-admin)))
  +  ((consumers           :initform '()   :accessor consumers-of)
  +   (suppliers           :initform '()   :accessor suppliers-of)
  +   (consumer-admin  )
  +   (supplier-admin  )))
   
   (define-method for_consumers ((servant event-channel))
  -  (or (consumer-admin servant)
  -      (setf (consumer-admin servant) 
  -        (make-instance 'consumer-admin :channel servant))))
  +  (with-cache-slot (servant consumer-admin)
  +    (make-instance 'consumer-admin :channel servant)))
   
   (define-method for_suppliers ((servant event-channel))
  -  (or (supplier-admin servant)
  -      (setf (supplier-admin servant)
  -        (make-instance 'supplier-admin :channel servant))))
  +  (with-cache-slot (servant supplier-admin)
  +    (make-instance 'supplier-admin :channel servant)))
   
   (define-method destroy ((servant event-channel))
     (values))
   
  +
  +(defgeneric add-event (recipient event))
  +
   (defmethod add-event ((ch event-channel) event)
     (mapc (lambda (subs) (add-event subs event))
  -        (consumers ch)))
  +        (consumers-of ch)))
   
   
   
  
positive.code:   (let ((sreq (pending-pull self)))
      (if sreq
          (progn (setf (pending-pull self) nil)
                 (set-request-result sreq (list event))
                 (send-response sreq))
        (push event (events self)))))
  
  
  (define-method pull ((self pull-supplier))
    (if (events self)
        (pop (events self))
      (progn (setf (pending-pull self) *current-server-request*)
             'defer)))
  
  (define-method try_pull ((self pull-supplier))
    (let ((res (CORBA:Any :any-typecode CORBA:tc_null))
          (has-event nil))
      (when (events self)
        (setq res (pop (events self)))
  
negative.code: 
  (defclass CONSUMER ()
    ((state :initarg :channel :accessor channel)
     (supplier :accessor supplier-of)))
  
  (defmethod connect-supplier ((self consumer) supplier)
    (when (slot-boundp self 'supplier)
      (error (coseventchanneladmin:alreadyconnected)))
    (push self (suppliers-of (channel self)))
    (setf (supplier-of self) supplier))
  
  (defmethod disconnect ((self consumer))
    (slot-makunbound self 'supplier)
    (purge (suppliers-of (channel self)) self)
    (op:deactivate_object (op:_poa self) (op:_object_id self)))
  
  
  ;;;; ------------------------------------------------- push-consumer -------
  
  (defclass PUSH-CONSUMER (consumer
                           CosEventChannelAdmin:ProxyPushConsumer-servant)
    ())
  
  (define-method push ((self push-consumer) any)
  