if possible, please, avoid manual memory allocation