device controller now uses forward declarations