Factored out code from lifecycle participant

into separate component