add nil backend and abstract backend
merge upstream changes