more pimpl refactor