minor change: return type should use defined type
moved members to pimpl class