do not modified self