+Part_combine_iterator::substitute_one (Music_iterator *iter,
+ const char *voice_id)
+{
+ Context *c = iter->get_outlet ();
+ if (!c)
+ {
+ programming_error ("no context");
+ return;
+ }
+ c = c->get_parent_context ();
+ if (!c)
+ {
+ programming_error ("no parent context");
+ return;
+ }
+ c = find_context_below (c, ly_symbol2scm("Voice"), voice_id);
+ if (!c)
+ {
+ string s = "can not find Voice context: ";
+ s += voice_id;
+ programming_error (s);
+ return;
+ }
+ iter->substitute_outlet (iter->get_outlet (), c);
+}
+
+void
+Part_combine_iterator::substitute_both (const char *part1_voice_id,
+ const char *part2_voice_id)