ChucK does not have cloning for reference object, right? That is, the semantic equivalent of an this explicit copy-constructor pseudocode: class A {...} A a0; ... new A(a0) @=> A a1; That is, instead of merely setting a1 to the same reference as that of a0, create a new independent copy, and set its references to that of a0 (shallow copy). It is a problem in the program I wrote, scale.ck: if modifying tuning data, one actually manipulates the data of the original tuning loaded into memory. This is cool, but if I want to be able to reload the original data, I will have to write my own cloning operator. The difference is illustrated in the code below. First I make a shallow copy of a to b, which means that I can change b without changing a. Then I set a reference of a to b, after which changing b also changes a. Hans ---- clone.ck ---- class A { string s; } A a; "a" @=> a.s; A b; "b" @=> b.s; chout <= "a.s = " <= a.s <= ", b.s = " <= b.s <= ".\n"; "c" @=> b.s; chout <= "\"c\" @=> b.s; a = " <= a.s <= ", b = " <= b.s <= ".\n"; a.s @=> b.s; chout <= "a.s @=> b.s; a.s = " <= a.s <= ", b.s = " <= b.s <= ".\n"; "d" @=> b.s; chout <= "\"d\" @=> b.s; a.s = " <= a.s <= ", b.s = " <= b.s <= ".\n"; a @=> b; chout <= "a @=> b; a.s = " <= a.s <= ", b.s = " <= b.s <= ".\n"; "e" @=> b.s; chout <= "\"e\" @=> b.s; a.s = " <= a.s <= ", b.s = " <= b.s <= ".\n"; ---- run ---- $ chuck clone.ck a.s = a, b.s = b. "c" @=> b.s; a = a, b = c. a.s @=> b.s; a.s = a, b.s = a. "d" @=> b.s; a.s = a, b.s = d. a @=> b; a.s = a, b.s = a. "e" @=> b.s; a.s = e, b.s = e. --------