lxml is optional since 67aba0e19d