change to return false when failed.