works without transaction