refactor; make some members final