+(defparameter *source-component* nil)
+
+(defclass standard-basic-action (basic-action)
+ ((source-component :accessor action-source-component))
+ (:metaclass mopp:funcallable-standard-class))
+
+(defmethod shared-initialize :before ((action standard-basic-action) slots &rest args)
+ (declare (ignore slots args))
+ (setf (action-source-component action) *source-component*))
+
+(defmethod handle-action :around ((action standard-basic-action) a s f)
+ (let ((*source-component* (action-source-component action)))
+ (call-next-method)))
+
+(defmethod render :around (component)
+ (let ((*source-component* component))
+ (call-next-method)))
+
+
+(defun/cc call (name &rest args)
+ (call-component *source-component*
+ (apply #'make-instance name args)))
+
+(defun/cc answer (&optional val)
+ (let ((child *source-component*))
+ (setf *source-component* (ucw::component.calling-component child))
+ (answer-component child val)))
+
+(defclass described-component-class (described-class standard-component-class )