refactor to abstract release class