anchor.diff:  
   function TFiniteStateMachine<TState, TCommand, ErrorClass>.GetReachableState(const FromState : TState;
     const OnCommand : TCommand) : TState;
  -begin
  -  //TODO: implement
  +  var
  +    T : TTransition;
  +begin
  +  Result := GetReachableState(FromState, OnCommand, T);
  +end;
  +
  +function TFiniteStateMachine<TState, TCommand, ErrorClass>.GetReachableState(const FromState : TState;
  +  const OnCommand : TCommand; out Transition : TTransition) : TState;
  +begin
  +  if HasTransition(FromState, OnCommand, Transition) then
  +    Result := FTransitionTable[Transition]
  +  else
  +    //TODO: raise exception
   end;
   
   function TFiniteStateMachine<TState, TCommand, ErrorClass>.GetReachableState(const OnCommand : TCommand) : TState;
   begin
     Result := GetReachableState(FCurrentState, OnCommand);
  +end;
  +
  +function TFiniteStateMachine<TState, TCommand, ErrorClass>.HasTransition(const FromState : TState;
  +  const OnCommand : TCommand) : Boolean;
  +  var
  +    T : TTransition;
  +begin
  +  Result := HasTransition(FromState, OnCommand, T);
   end;
   
   function TFiniteStateMachine<TState, TCommand, ErrorClass>.HasTransition(const FromState : TState;
  
positive.code:       procedure AfterExecute(const Command : TCommand); virtual;
        procedure BeforeExecute(const Command : TCommand); virtual;
        function  FindTransition(const FromState : TState; const OnCommand : TCommand) : TTransition;
        function  HasTransition(const FromState : TState; const OnCommand : TCommand;
          out Found : TTransition) : Boolean; overload;
      public
  
negative.code: end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.Execute(const Command : TCommand) : IFiniteStateMachine;
    var
      NewState : TState;
      Transition : TTransition;
  begin
    Result := Self;
    NewState := GetReachableState(FCurrentState, Command, Transition);
  
    BeforeExecute(Command);
    Transition.PerformExitStateAction(NewState);
    FPreviousState := FCurrentState;
    FCurrentState  := NewState;
    Transition.PerformEnterStateAction(NewState);
    AfterExecute(Command);
  
    //TODO: raise outer exception
  end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.FindTransition(const FromState : TState;
  