refactor incomplete