anchor.diff:  
       if (Self.fproperties.TypCesty = TJCType.vlak) then
        begin
  -      Blk := (Navestidlo as TBlkSCom).UsekPred;
  -      Blky.GetBlkByID(Self.fproperties.Useky[Self.fproperties.Useky.Count-1], Blk2);
  -      spri := Self.GetSoupravaIndex(Navestidlo, Blk);
  +      usek := navestidlo.UsekPred as TBlkUsek;
  +      Blky.GetBlkByID(Self.fproperties.Useky[Self.fproperties.Useky.Count-1], TBlk(lastUsek));
  +      spri := Self.GetSoupravaIndex(Navestidlo, usek);
   
         // a)
  -      if ((Blk2.typ = _BLK_USEK) and (TBlkUsek(Blk2).Stav.stanicni_kolej) and
  -          (not TBlkUsek(Blk2).SoupravyFull())) then
  +      if ((lastUsek.typ = _BLK_USEK) and (lastUsek.Stav.stanicni_kolej) and
  +          (not lastUsek.SoupravyFull())) then
          begin
  -        if (TBlkUsek(Blk).IsSouprava()) then
  +        if (usek.IsSouprava()) then
            begin
  -          if ((Blk.typ = _BLK_TU) and (TBlkTU(Blk).InTrat > -1)) then
  +          if ((usek.typ = _BLK_TU) and (TBlkTU(usek).InTrat > -1)) then
              begin
  -            Blky.GetBlkByID((Blk as TBlkTU).InTrat, Trat);
  -            (Trat as TBlkTrat).RemoveSpr(spri);
  +            Blky.GetBlkByID((usek as TBlkTU).InTrat, TBlk(trat));
  +            trat.RemoveSpr(spri);
              end;
   
             // na dopravni kolej vlozime soupravu blize vjezdovemu navestidlu
  -          if (TBlkSCom(Navestidlo).Smer = THVStanoviste.lichy) then
  -            (Blk2 as TBlkUsek).AddSoupravaL(spri)
  +          if (navestidlo.Smer = THVStanoviste.lichy) then
  +            lastUsek.AddSoupravaL(spri)
             else
  -            (Blk2 as TBlkUsek).AddSoupravaS(spri);
  -
  -          (Blk as TBlkUsek).RemoveSouprava(spri);
  +            lastUsek.AddSoupravaS(spri);
  +
  +          usek.RemoveSouprava(spri);
            end;
           Self.fstaveni.RozpadBlok := -6;
          end;
   
         // b)
  -      if ((Blk2.typ = _BLK_TU) and ((Blk2 as TBlkTU).InTrat > -1)) then
  -        Blky.GetBlkByID((Blk2 as TBlkTU).InTrat, Trat)
  +      if ((lastUsek.typ = _BLK_TU) and ((lastUsek as TBlkTU).InTrat > -1)) then
  +        Blky.GetBlkByID((lastUsek as TBlkTU).InTrat, TBlk(trat))
         else
  -        Trat := nil;
  -
  -      if ((Trat <> nil) and ((Blk as TBlkUsek).IsSouprava()) and (not (Blk2 as TBlkUsek).IsSouprava()) and
  -          (Blk2.typ = _BLK_TU) and ((Blk2 as TBlkTU).InTrat = Self.data.Trat) and
  -          ((Trat as TBlkTrat).Smer = Self.data.TratSmer) and ((Trat as TBlkTrat).BP)) then
  +        trat := nil;
  +
  +      if ((trat <> nil) and (usek.IsSouprava()) and (not lastUsek.IsSouprava()) and
  +          (lastUsek.typ = _BLK_TU) and ((lastUsek as TBlkTU).InTrat = Self.data.Trat) and
  +          (trat.Smer = Self.data.TratSmer) and (trat.BP)) then
          begin
  -        (Trat as TBlkTrat).AddSpr(TBlkTratSouprava.Create(spri));
  -        (Blk2 as TBlkTU).poruchaBP := true;
  -        (Trat as TBlkTrat).Change();
  -
  -        (Blk2 as TBlkUsek).AddSoupravaL(spri); // tady je jedno jestli zavolat L nebo S
  -                                               // v trati muze byt na jednom useku vzdy jen jedna souprava
  -                                               // kontrolovano vyse
  -        (Blk as TBlkUsek).RemoveSouprava(spri);
  +        trat.AddSpr(TBlkTratSouprava.Create(spri));
  +        (lastUsek as TBlkTU).poruchaBP := true;
  +        trat.Change();
  +
  +        lastUsek.AddSoupravaL(spri); // tady je jedno jestli zavolat L nebo S
  +                                     // v trati muze byt na jednom useku vzdy jen jedna souprava
  +                                     // kontrolovano vyse
  +        usek.RemoveSouprava(spri);
          end;
        end;//if typcesty = vlak
   
  
positive.code:            // prejezd neuzaviram -> pridam pozadavek na zavreni pri obsazeni do vsech aktivacnich useku
             for uzavBlok in prjZaver.uzaviraci do
              begin
               Blky.GetBlkByID(uzavBlok, Blk2);
               if (not TBlkUsek(Blk2).EventsOnObsaz.Contains(CreateChangeEvent(Self.UsekClosePrj, i))) then
                 TBlkUsek(Blk2).AddChangeEvent((Blk2 as TBlkUsek).EventsOnObsaz, CreateChangeEvent(Self.UsekClosePrj, i));
              end;
  
             writelog('Krok 12 : prejezd '+Blk.name+' - zadny aktivacni usek neobsazen - nechavam otevreny', WR_VC);
            end;
          end;//for i
  
  
negative.code: 
        aZaver := Self.fproperties.TypCesty;
  
        for usekZaver in Self.fproperties.Useky do
         begin
          Blky.GetBlkByID(usekZaver, TBlk(usek));
          usek.Zaver := TZaver(aZaver);
  
          // kontrola pritomnosti soupravy na usecich - toto je potreba delat pro dodatecne navesti
          // mame zaruceno, ze se na usecich vyskytuje maximalne jedna souprava
          // (to zarucuje kontorla podminek a kontrola DN)
          if ((Self.fproperties.TypCesty = TJCType.vlak) and (usek.IsSouprava())) then
           begin
            if (Blky.GetBlkWithSpr(usek.Souprava).Count = 1) then
              Soupravy.RemoveSpr(usek.Souprava)
            else
              usek.RemoveSoupravy();
           end;
         end;//for cyklus
  
        navestidlo.DNjc := Self;
  
        if (Self.PorusenaKritickaPodminka()) then
         begin
  