add more error check