efficiency, use reference instead of copy