use copy constructors rather than assignment ops