event construction through factory