Support multiple backends and add alloc backend

... elsewhere too