refactor, extend featues