Refactoring & implement copy