pretty significant design changes, see changelog