anchor.diff:    begin
       if Assigned(cmdmsg.OnStatusReply) then
       begin
  -      try
  -        cmdmsg.OnStatusReply(cmdmsg, cmdmsg, atype, msg);
  -      finally
  -        cmdmsg.ReleaseData;
  +      if cmdmsg.SyncReply and cmdmsg.IsAsync then
  +      begin
  +        if not Assigned(tmlSyncCallCritSect) then
  +        begin
  +          tmlSyncCallCritSect := TSyncExecuteCritSec.Create;
  +        end;
  +        if Assigned(tmlSyncCallCritSect) then
  +        begin
  +          tmlSyncCallCritSect.Enter;
  +          try
  +            tmlSyncCallCritSect.Clear;
  +            tmlSyncCallCritSect.CmdMsg             := cmdmsg;
  +            tmlSyncCallCritSect.i1                 := atype;
  +            tmlSyncCallCritSect.s1                 := msg;
  +            tmlSyncCallCritSect.CmdStatusMethod    := cmdmsg.OnStatusReply;
  +            {$if  defined(FPC)}
  +              TThread.Synchronize(nil, @tmlSyncCallCritSect.SyncExecute);
  +            {$else}
  +              TThread.Synchronize(nil, tmlSyncCallCritSect.SyncExecute);
  +            {$ifend}
  +          finally
  +            tmlSyncCallCritSect.Leave;
  +          end;
  +        end;
  +      end
  +      else
  +      begin
  +        try
  +          cmdmsg.OnStatusReply(cmdmsg, cmdmsg, atype, msg);
  +        finally
  +          cmdmsg.ReleaseData;
  +        end;
         end;
       end;
     end;
  
positive.code:     tmlDesignInfos[FDesignIndex].LogLevel        := TML_LOG_OFF;
    end;
  
    FOnProgress     := nil;
    FOnCommandReady := nil;
    FOnStatusReply  := nil;
  
    SetLength(FProfiles, 0);
  
  
negative.code:     if Assigned(cmdmsg.TMLCore) then
      begin
        if Assigned(cmdmsg.TMLCore.OnCommandReady) then
          if cmdmsg.TMLCore.SyncReply and cmdmsg.IsAsync then
          begin
            if not Assigned(tmlSyncCallCritSect) then
            begin
              tmlSyncCallCritSect := TSyncExecuteCritSec.Create;
            end;
            if Assigned(tmlSyncCallCritSect) then
            begin
              tmlSyncCallCritSect.Enter;
              try
                tmlSyncCallCritSect.Clear;
                tmlSyncCallCritSect.CmdMsg        := cmdmsg;
                tmlSyncCallCritSect.CmdRdyMethod  := cmdmsg.TMLCore.OnCommandReady;
                tmlSyncCallCritSect.Core          := cmdmsg.TMLCore;
                {$if  defined(FPC)}
                  TThread.Synchronize(nil, @tmlSyncCallCritSect.SyncExecute);
                {$else}
                  TThread.Synchronize(nil, tmlSyncCallCritSect.SyncExecute);
                {$ifend}
              finally
                tmlSyncCallCritSect.Leave;
              end;
            end;
          end
          else
          begin
            try
              cmdmsg.TMLCore.OnCommandReady(cmdmsg.TMLCore, cmdmsg);
            finally
              cmdmsg.ReleaseData;
            end;
          end;
      end;
      // command finished - free the command and the handle...
      if cmdmsg.IsAsync then
  