deep copy and always copy objects
rolled version