+ Track **history = j->info->track_history;
+ if(j->track.track()==history[0])
+ continue;
+
+ Route *route = j->info->routes.front();
+ if(route->has_track(*j->track))
+ {
+ route = new Route(j->info->train->get_layout());
+ route->set_name("Router");
+ route->set_temporary(true);
+ for(unsigned k=2; k>0; --k)
+ route->add_track(*history[k]);
+ j->info->routes.push_front(route);
+ }
+
+ if(history[0])
+ route->add_track(*history[0]);
+ for(unsigned k=2; k>0; --k)
+ history[k] = history[k-1];
+ history[0] = j->track.track();
+
+ bool waitable = j->track.endpoint().paths!=j->track->get_type().get_paths();
+ map<Track *, SequencingInfo *>::iterator k = sequenced_tracks.find(j->track.track());
+ if(k!=sequenced_tracks.end())
+ {
+ if(!k->second->preceding)
+ {
+ k->second->preceding = j->info;
+ k->second->sequence_in = sequence;
+ }
+ j->info->sequence.push_front(SequencingInfo(j->track.track(), sequence));
+ if(waitable)
+ k->second = &j->info->sequence.front();
+ --sequence;
+ }
+ else if(waitable)
+ {
+ j->info->sequence.push_front(SequencingInfo(j->track.track(), sequence));
+ sequenced_tracks[j->track.track()] = &j->info->sequence.front();
+ --sequence;
+ }