only generates new uuid if it's absent