throw exception instead of return false