anchor.diff:    DFADeadState^.Flags:=DFADeadState^.Flags or sfDFADead;
     DFAStateCache.Add(DFADeadState);
     inc(DFACountStatesCached);
  - end;
  +
  +  for Index:=0 to length(DFAStartStates)-1 do begin
  +   for SubIndex:=0 to length(DFAStartStates[Index])-1 do begin
  +    inc(Generation);
  +    GetMem(DFAStartState,DFAStateSize);
  +    FillChar(DFAStartState^,DFAStateSize,AnsiChar(#0));
  +    DFAStartState^.Flags:=SubIndex;
  +    case Index of
  +     0:begin
  +      DFAAddInstructionThread(DFAStartState,Instance.AnchoredStartInstruction);
  +     end;
  +     1:begin
  +      DFAAddInstructionThread(DFAStartState,Instance.UnanchoredStartInstruction);
  +     end;
  +     else {2:}begin
  +      DFAAddInstructionThread(DFAStartState,Instance.ReversedStartInstruction);
  +     end;
  +    end;
  +    DFAStartState^.Flags:=DFAStartState^.Flags or sfDFAStart;
  +    DFAStateCache.Add(DFAStartState);
  +    inc(DFACountStatesCached);
  +    DFAStartStates[Index,SubIndex]:=DFAStartState;
  +   end;
  +  end;
  +
  + end;
  +
   end;
   
   destructor TFLREThreadLocalStorageInstance.Destroy;
  -var State:PFLREParallelNFAState;
  +var Index,SubIndex:longint;
  +    State:PFLREParallelNFAState;
   begin
   
    while assigned(FreeParallelNFAStates) do begin
  
positive.code:  if assigned(DFADeadState) then begin
    DFAFreeState(DFADeadState);
    FreeMem(DFADeadState);
   end;
   FreeAndNil(DFAStateCache);
   SetLength(DFAStackInstructions,0);
  
negative.code: end;
  
  procedure TFLREThreadLocalStorageInstance.DFAReset;
  var Index,SubIndex:longint;
      State:PFLREDFAState;
  begin
  
   // Reset state pools
  