anchor.diff:  
   //preda soupravu v jizdni ceste dalsimu bloku v poradi
   procedure TJC.MoveTrainToNextTrack();
  -var UsekActual, UsekDalsi, Nav: TBlk;
  +var trackActual, trackNext, signal: TBlk;
       train: TTrain;
    begin
     if (Self.destroyBlock = 0) then
      begin
  -    Blocks.GetBlkByID(Self.m_data.signalId, Nav);
  -    UsekActual := (Nav as TBlkSignal).track;
  -    train := Self.GetTrain(Nav, UsekActual);
  -    if ((UsekActual as TBlkTrack).IsTrain()) then
  -      if (train.front <> UsekActual) then
  +    Blocks.GetBlkByID(Self.m_data.signalId, signal);
  +    trackActual := (signal as TBlkSignal).track;
  +    train := Self.GetTrain(signal, trackActual);
  +    if ((trackActual as TBlkTrack).IsTrain()) then
  +      if (train.front <> trackActual) then
            Exit();
      end else begin
  -    Blocks.GetBlkByID(Self.m_data.tracks[Self.destroyBlock-1], UsekActual);
  -    train := TBlkTrack(UsekActual).train;
  +    Blocks.GetBlkByID(Self.m_data.tracks[Self.destroyBlock-1], trackActual);
  +    train := TBlkTrack(trackActual).train;
      end;
   
  -  Blocks.GetBlkByID(Self.m_data.tracks[Self.destroyBlock], UsekDalsi);
  -  if (not (UsekActual as TBlkTrack).IsTrain()) then Exit();
  -
  -  (UsekDalsi as TBlkTrack).slowingReady := true;
  -  (UsekDalsi as TBlkTrack).AddTrainL(train);
  -  (UsekDalsi as TBlkTrack).train.front := UsekDalsi;
  -  (UsekDalsi as TBlkTrack).houkEvEnabled := true;
  -  Self.Log('Predana souprava '+(UsekDalsi as TBlkTrack).train.name+
  -      ' z bloku '+UsekActual.name+' do bloku '+UsekDalsi.name, WR_SPRPREDAT);
  -
  -  Self.CheckLoopBlock(UsekDalsi);
  +  Blocks.GetBlkByID(Self.m_data.tracks[Self.destroyBlock], trackNext);
  +  if (not (trackActual as TBlkTrack).IsTrain()) then Exit();
  +
  +  (trackNext as TBlkTrack).slowingReady := true;
  +  (trackNext as TBlkTrack).AddTrainL(train);
  +  (trackNext as TBlkTrack).train.front := trackNext;
  +  (trackNext as TBlkTrack).houkEvEnabled := true;
  +  Self.Log('Predana souprava '+(trackNext as TBlkTrack).train.name+
  +      ' z bloku '+trackActual.name+' do bloku '+trackNext.name, WR_SPRPREDAT);
  +
  +  Self.CheckLoopBlock(trackNext);
    end;
   
   procedure TJC.CheckLoopBlock(blk: TBlk);
  
positive.code:     if ((TBlkLinker(TBlkRailway(Blk).linkerA).stations.Count > 0) and
          (TBlkLinker(TBlkRailway(Blk).linkerA).stations[0] = Self.m_state.senderOR) and
          (TBlkLinker(TBlkRailway(Blk).linkerA).note <> '')) then
        bariery.Add(Self.JCBarrier(_JCB_TRAT_STITEK, TBlkLinker(TBlkRailway(Blk).linkerA),
            TBlkLinker(TBlkRailway(Blk).linkerA).id));
  
      if ((TBlkLinker(TBlkRailway(Blk).linkerB).stations.Count > 0) and
          (TBlkLinker(TBlkRailway(Blk).linkerB).stations[0] = Self.m_state.senderOR) and
          (TBlkLinker(TBlkRailway(Blk).linkerB).note <> '')) then
        bariery.Add(Self.JCBarrier(_JCB_TRAT_STITEK, TBlkLinker(TBlkRailway(Blk).linkerB),
            TBlkLinker(TBlkRailway(Blk).linkerB).id));
  
      // stitky a vyluky na tratovych usecich
  
negative.code:   end;
   end;
  
   for turnoutZav in Self.m_data.turnouts do
    begin
     newObj := json.A['turnouts'].AddObject();
     newObj['block'] := turnoutZav.block;
     case (turnoutZav.position) of
      TTurnoutPosition.plus: newObj['position'] := '+';
      TTurnoutPosition.minus: newObj['position'] := '-';
     end;
  