Refactored into a common frontend, with 2 different backends.