in some cases, scheme can be null!