make part iteration generic; *really* validate parts, fix now failing test