abstract events