implement WITH-EVENT-SLOT