use move semantics for better performance