comments and refactor to avoid POD