returns -1 if error