avoid freshening when unnecessary; rerefactor