working together w/ Massimiliano Ziccardi on this feature, we need to unify the branch from the two of us.
this is basically: