moved copy logic into implementors
moved Preconditions into .util