abstract backend layer.