fix: use callback for new and copy