add more error handle