avoid allocate unnecessary new objects