ref #1, added support for multiple backends. experimental!