some new refactor background