must be remade under C++