anchor.diff:        FFiniteStateMachine : IFiniteStateMachine;
         FLock : TObject;
       private
  +      procedure InternalLock; inline;
  +      procedure InternalUnlock; inline;
  +
         function  GetCurrentState : TState;
         function  GetPreviousState : TState;
  -    strict protected
  -      procedure Lock;
  -      procedure Unlock;
  -
  -      property  FiniteStateMachine : IFiniteStateMachine read FFiniteStateMachine;
       public
         constructor Create; overload;
         constructor Create(const StateMachine : IFiniteStateMachine); overload;
  
positive.code: 
  procedure TThreadFiniteStateMachine<TState, TCommand, ErrorClass>.Unlock;
  begin
    TMonitor.Exit(FLock);
  end;
  
  end.
  
negative.code: function TThreadFiniteStateMachine<TState, TCommand, ErrorClass>.RemoveTransition(const FromState : TState;
    const OnCommand : TCommand) : IFiniteStateMachine;
  begin
    InternalLock;
    try
      FFiniteStateMachine.RemoveTransition(FromState, OnCommand);
    finally
      InternalUnlock;
    end;
  
    Result := Self;
  