big commit, the basic works at least on desktop, not tested on arduino