anchor.diff:     HV.EmergencyStop(TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                       TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                       Sender);
  -  end
  -
  - else if (parsed[3] = 'TOTAL') then
  -   HV.ruc := (parsed[4] = '1')
  -
  - else if (parsed[3] = 'EXPECTED-SPEED') then
  -   Self.SendExpectedSpeed(Sender, HV)
  -
  - else if (parsed[3] = 'NAV') then
  -   Self.SendPredictedSignal(Sender, HV);
  -
  +   Exit();
  +  end;
  +
  + if (parsed[3] = 'TOTAL') then
  +  begin
  +   HV.ruc := (parsed[4] = '1');
  +   Exit();
  +  end;
  +
  + // ---- Total control is required for commands below ----
  +
  + if (not HV.ruc) then
  +  begin
  +   PanelServer.SendLn(Sender, '-;LOK;'+parsed[2]+';RESP;err;Loko '+parsed[2]+' není v ručním řízení');
  +   Exit();
  +  end;
  +
  + if (parsed[3] = 'SP') then
  +  begin
  +   GetMem(LokResponseData, SizeOf(TLokResponseData));
  +   TLokResponseData(LokResponseData^).addr := HV.addr;
  +   TLokResponseData(LokResponseData^).conn := Sender;
  +
  +   HV.SetSpeed(StrToInt(parsed[4]),
  +               TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
  +               TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
  +               Sender);
  +   Exit();
  +  end;
  +
  + if (parsed[3] = 'SPD') then
  +  begin
  +   GetMem(LokResponseData, SizeOf(TLokResponseData));
  +   TLokResponseData(LokResponseData^).addr := HV.addr;
  +   TLokResponseData(LokResponseData^).conn := Sender;
  +
  +   HV.SetSpeedDir(StrToInt(parsed[4]), parsed[5] = '1',
  +                  TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
  +                  TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
  +                  Sender);
  +   Exit();
  +  end;
  +
  + if (parsed[3] = 'SP-S') then
  +  begin
  +   GetMem(LokResponseData, SizeOf(TLokResponseData));
  +   TLokResponseData(LokResponseData^).addr := HV.addr;
  +   TLokResponseData(LokResponseData^).conn := Sender;
  +
  +   HV.SetSpeedStepDir(StrToInt(parsed[4]), HV.direction,
  +                      TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
  +                      TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
  +                      Sender);
  +   Exit();
  +  end;
  +
  + if (parsed[3] = 'SPD-S') then
  +  begin
  +   GetMem(LokResponseData, SizeOf(TLokResponseData));
  +   TLokResponseData(LokResponseData^).addr := HV.addr;
  +   TLokResponseData(LokResponseData^).conn := Sender;
  +
  +   HV.SetSpeedStepDir(StrToInt(parsed[4]), parsed[5] = '1',
  +                      TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
  +                      TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
  +                      Sender);
  +   Exit();
  +  end;
  +
  + if (parsed[3] = 'D') then
  +  begin
  +   GetMem(LokResponseData, SizeOf(TLokResponseData));
  +   TLokResponseData(LokResponseData^).addr := HV.addr;
  +   TLokResponseData(LokResponseData^).conn := Sender;
  +
  +   HV.SetDirection(parsed[4] = '1',
  +                   TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
  +                   TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
  +                   Sender);
  +   Exit();
  +  end;
   end;
   
   ////////////////////////////////////////////////////////////////////////////////
  
positive.code:    Exit();
    end;
  
   if (HV.stolen) then
    begin
     PanelServer.SendLn(Sender, '-;LOK;'+parsed[2]+';RESP;err;Loko '+parsed[2]+' ukradeno, nenastavuji');
     Exit();
    end;
  
   // tady mame jisto, ze je loko autorizovano a ze je mone ho ridit
  
   if (parsed[3] = 'SP') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeed(StrToInt(parsed[4]),
                 TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                 TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                 Sender);
    end
  
   else if (parsed[3] = 'SPD') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedDir(StrToInt(parsed[4]), parsed[5] = '1',
                    TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                    TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                    Sender);
    end
  
   else if (parsed[3] = 'SP-S') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedStepDir(StrToInt(parsed[4]), HV.direction,
                        TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                        TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                        Sender);
    end
  
   else if (parsed[3] = 'SPD-S') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedStepDir(StrToInt(parsed[4]), parsed[5] = '1',
                        TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                        TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                        Sender);
    end
  
   else if (parsed[3] = 'D') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetDirection(parsed[4] = '1',
                     TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                     TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                     Sender);
    end
  
   else if (parsed[3] = 'F') then
    begin
     data := TStringList.Create();
     try
  
negative.code:    HV.StateFunctionsToSlotFunctions(TTrakce.Callback(PanelLOKResponseOK, LokResponseData),
                                     TTrakce.Callback(PanelLOKResponseErr, LokResponseData),
                                     Sender);
     Exit();
    end;
  
   if (parsed[3] = 'STOP') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
  