split into multiple objects, added essential code from xsbt-zipper