do not use "fail" function