BUG: revise convert semantics in internals to always return a copy