transaction can also be started with listener