this can return -1