- Item * o_l = o->access_Item ();
- Item * n_l = n? n->access_Item () : 0;
- head_l_arr_.substitute ((Note_head*)o_l, (Note_head*)n_l);
- rest_l_arr_.substitute ((Rest*)o_l, (Rest*)n_l);
+ if (Note_head*h=dynamic_cast<Note_head*> (o))
+ head_l_arr_.substitute (h, dynamic_cast<Note_head*>(n));
+ if (Rest *r=dynamic_cast<Rest*> (o))
+ rest_l_arr_.substitute (r, dynamic_cast<Rest*>(n));
+ if (Beam* b = dynamic_cast<Beam*> (o))
+ {
+ if (b == beam_l_)
+ {
+ beam_l_ = dynamic_cast<Beam*> (n);
+ if (!beam_l_)
+ {
+ beams_i_drul_[LEFT] = 0;
+ beams_i_drul_[RIGHT] = 0;
+ mult_i_ = 0;
+ }
+ }
+ }
+ Staff_symbol_referencer::do_substitute_element_pointer (o,n);
+