Index: oup/current/FileClasses/AKEV.pas
===================================================================
--- oup/current/FileClasses/AKEV.pas	(revision 244)
+++ oup/current/FileClasses/AKEV.pas	(revision 245)
@@ -18,14 +18,47 @@
 
 procedure TFile_AKEV.InitDataFields;
-var
-  tempi: Integer;
 begin
   inherited;
-  FDataFields := TBlock.Create(Self, nil, 0, 'Base', '', nil);
+  FDataFields := TBlock.Create(Self, nil, 'Base', '', []);
   with FDataFields do
   begin
-    AddField(TFileID, $00, 'FileID', '', nil);
-    AddField(TLevelID, $04, 'LevelID', '', nil);
+    AddField(TFileID, 'FileID', '', []);
+    AddField(TLevelID, 'LevelID', '', []);
+
+    AddField(TLinkByID, 'PNTA-link', 'Link to the 3D Point Array', ['PNTA']);
+    AddField(TLinkByID, 'PLEA-link', 'Link to the Plane Equation Array', ['PLEA']);
+    AddField(TLinkByID, 'TXCA-link', 'Link to the Texture Coordinate Array', ['TXCA']);
+    AddField(TLinkByID, 'AGQG-link', 'Link to the Gunk Quad General Array', ['AGQG']);
+
+    AddField(TLinkByID, 'AGQR-link', 'Link to the Gunk Quad Render Array', ['AGQR']);
+    AddField(TLinkByID, 'AGQC-link', 'Link to the Gunk Quad Collision Array', ['AGQC']);
+    AddField(TLinkByID, 'AGDB-link', 'Link to the Gunk Quad Debug Array', ['AGDB']);
+    AddField(TLinkByID, 'TXMA-link', 'Link to the Texture Map Array', ['TXMA']);
+
+    AddField(TLinkByID, 'AKVA-link', 'Link to the BNV Node Array', ['AKVA']);
+    AddField(TLinkByID, 'AKBA-link', 'Link to the Side Array', ['AKBA']);
+    AddField(TLinkByID, 'IDXA-link', 'Link to the Index Array', ['IDXA']);
+    AddField(TLinkByID, 'IDXA-link', 'Link to the Index Array', ['IDXA']);
+
+    AddField(TLinkByID, 'AKBP-link', 'Link to the BSP Node Array', ['AKBP']);
+    AddField(TLinkByID, 'ABNA-link', 'Link to the BSP Tree Node Array', ['ABNA']);
+    AddField(TLinkByID, 'AKOT-link', 'Link to the Oct Tree', ['AKOT']);
+    AddField(TLinkByID, 'AKAA-link', 'Link to the Adjacency Array', ['AKAA']);
+
+    AddField(TLinkByID, 'AKDA-link', 'Link to the Door Frame Array', ['AKDA']);
+
+
+    AddField(TFloat, 'Neg. x-coordinate', 'Maximal negative x-coordinate of the level model', []);
+    AddField(TFloat, 'Neg. y-coordinate', 'Maximal negative y-coordinate of the level model', []);
+    AddField(TFloat, 'Neg. z-coordinate', 'Maximal negative z-coordinate of the level model', []);
+
+    AddField(TFloat, 'Pos. x-coordinate', 'Maximal positive x-coordinate of the level model', []);
+    AddField(TFloat, 'Pos. y-coordinate', 'Maximal positive y-coordinate of the level model', []);
+    AddField(TFloat, 'Pos. z-coordinate', 'Maximal positive z-coordinate of the level model', []);
+
+    AddField(TUnused, 'Not used', '', [1024]);
+    AddField(TFloat, 'Unknown', 'Unknown; maybe the tolerance', []);
   end;
+  FDataFields.Update(0, -1);
   FFileStream.Free;
   FFileStream := nil;
Index: oup/current/FileClasses/BINA.pas
===================================================================
--- oup/current/FileClasses/BINA.pas	(revision 244)
+++ oup/current/FileClasses/BINA.pas	(revision 245)
@@ -4,10 +4,19 @@
 
 uses
-  _FileTypes;
+  _FileTypes, Grids;
 
 type
   TFile_BINA = class(TFile)
+      procedure SetOpened(Opened: Boolean); override;
+    private
+      maintype: String;
+      subtype: String;
+      grid: TStringGrid;
+(*      panel: TPanel;
+      save: TButton; *)
+      procedure saveclick(Sender: TObject); 
     public
       procedure InitDataFields; override;
+      procedure InitEditor; override;
   end;
 
@@ -15,21 +24,295 @@
 
 uses
-  ConnectionManager, Math, Classes, TypeDefs, _DataTypes, Forms, StdCtrls;
+  ConnectionManager, Math, Classes, TypeDefs, _DataTypes, Forms, StdCtrls, 
+  Controls, StrUtils, Functions, SysUtils;
 
 procedure TFile_BINA.InitDataFields;
-var
-  tempi: Integer;
 begin
   inherited;
-  FDataFields := TBlock.Create(Self, nil, 0, 'Base', '', nil);
+  FDataFields := TBlock.Create(Self, nil, 'Base', '', []);
   with FDataFields do
   begin
-    AddField(TFileID, $00, 'FileID', '', nil);
-    AddField(TLevelID, $04, 'LevelID', '', nil);
-  end;
+    AddField(TFileID, 'FileID', '', []);
+    AddField(TLevelID, 'LevelID', '', []);
+
+    AddField(TInt, 'RawSize', 'Size of the part in the raw file', [4]);
+    AddField(TRawLink, 'RawOffset', 'At this position starts the part in the raw/sep file', []);
+
+    AddField(TUnused, 'Not used', '', [16]);
+  end;
+  FDataFields.Update(0, -1);
   FFileStream.Free;
   FFileStream := nil;
 end;
 
+procedure TFile_BINA.InitEditor;
+var
+  subsize: Integer;
+begin
+  CacheAllRawFiles;
+  SetLength(maintype, 4);
+  FRawCaches[0].RawStream.Read(maintype[1], 4);
+  maintype := ReverseString(maintype);
+  if maintype = 'OBJC' then
+  begin
+    FRawCaches[0].RawStream.Seek($0C, soFromBeginning);
+    FRawCaches[0].RawStream.Read(subsize, 4);
+    if subsize > 0 then
+    begin
+      SetLength(subtype, 4);
+      FRawCaches[0].RawStream.Seek($10, soFromBeginning);
+      FRawCaches[0].RawStream.Read(subtype[1], 4);
+      subtype := ReverseString(subtype);
+      if subtype = 'CHAR' then
+      begin
+      end
+      else if subtype = 'CMBT' then
+      begin
+      end
+      else if subtype = 'CONS' then
+      begin
+      end
+      else if subtype = 'DOOR' then
+      begin
+      end
+      else if subtype = 'FLAG' then
+      begin
+      end
+      else if subtype = 'FURN' then
+      begin
+      end
+      else if subtype = 'MELE' then
+      begin
+      end
+      else if subtype = 'NEUT' then
+      begin
+      end
+      else if subtype = 'PART' then
+      begin
+      end
+      else if subtype = 'PATR' then
+      begin
+      end
+      else if subtype = 'PWRU' then
+      begin
+      end
+      else if subtype = 'SNDG' then
+      begin
+      end
+      else if subtype = 'TRGV' then
+      begin
+        FEditor := TFrame.Create(nil);
+        grid := TStringGrid.Create(FEditor);
+        grid.Align := alClient;
+        grid.DefaultRowHeight := 18;
+        grid.DefaultColWidth := 100;
+        grid.ColCount := 8;
+        grid.RowCount := 2;
+        grid.FixedRows := 1;
+        grid.FixedCols := 0;
+        grid.ColWidths[0] := 150;
+        grid.ColWidths[1] := 125;
+        grid.ColWidths[2] := 125;
+        grid.ColWidths[3] := 125;
+        grid.Cells[0, 0] := 'TrgName';
+        grid.Cells[1, 0] := 'FuncName Enter';
+        grid.Cells[2, 0] := 'FuncName Inside';
+        grid.Cells[3, 0] := 'FuncName Leave';
+        grid.Cells[4, 0] := 'Teams';
+        grid.Cells[5, 0] := 'Settings';
+        grid.Cells[6, 0] := 'X, Y, Z';
+        grid.Cells[7, 0] := 'Size X, Y, Z';
+        grid.Options := [goColSizing,goEditing,
+            goVertLine,goHorzLine,goFixedVertLine,goFixedHorzLine];
+        grid.Parent := FEditor;
+      end
+      else if subtype = 'TRIG' then
+      begin
+      end
+      else if subtype = 'TURR' then
+      begin
+      end
+      else if subtype = 'WEAP' then
+      begin
+      end;
+    end;
+  end
+  else if maintype = 'ONIE' then
+  begin
+  end
+  else if maintype = 'PAR3' then
+  begin
+  end
+  else if maintype = 'SABD' then
+  begin
+  end
+  else if maintype = 'TMBD' then
+  begin
+  end;
+
+  DiscardAllRawCaches;
+
+(*
+  panel := TPanel.Create(FEditor);
+  panel.Align := alBottom;
+  panel.Height := 30;
+  panel.Parent := FEditor;
+  save := TButton.Create(panel);
+  save.Top := 2;
+  save.Left := 2;
+  save.Width := 100;
+  save.Height := 26;
+  save.Caption := 'Save';
+  save.OnClick := saveclick;
+  save.Parent := panel;    *)
+end;
+
+procedure TFile_BINA.saveclick(Sender: TObject);
+var
+  i,j: Integer;
+  temps: String;
+  fs: TFileStream;
+  offset: Integer;
+begin
+(*  fs := TFileStream.Create('C:\Spiele\Oni\GameDataFolder\tests\messages_raw_recreated.hex', fmCreate);
+
+  i := grid.RowCount - 2;
+  FFileStream.Seek($1C, soFromBeginning);
+  FFileStream.Write(i, 4);
+  FFileStream.Size := $20 + i * 4; 
+  
+  for i := 0 to grid.RowCount - 2 do
+  begin
+    for j := 0 to 1 do
+    begin
+      if j = 0 then
+      begin
+        offset := fs.Size;
+        FFileStream.Seek($20 + i*4, soFromBeginning);
+        FFileStream.Write(offset, 4);
+      end;
+      temps := grid.Cells[j, i+1];
+      SetLength(temps, Length(temps)+1);
+      temps[Length(temps)] := #0;
+      fs.Write(temps[1], Length(temps));
+    end;
+  end;
+  fs.Free;
+  fs := TFileStream.Create('C:\Spiele\Oni\GameDataFolder\tests\messages_dat_recreated.hex', fmCreate);
+  ReCreateFile(fs);
+  fs.Free;
+*)end;
+
+
+procedure TFile_BINA.SetOpened(Opened: Boolean);
+var
+  i: Integer;
+  cursize: Integer;
+  curoffset: Integer;
+  raw: TMemoryStream;
+  tempi: Integer;
+  temps: String;
+  j: Integer;
+  tempf: Single;
+begin
+  inherited;
+  if Opened then
+  begin
+    CacheAllRawFiles;
+    raw := FRawCaches[0].RawStream;
+
+    if maintype = 'OBJC' then
+    begin
+      if subtype = 'TRGV' then
+      begin
+        i := 0;
+        curoffset := $0C;
+        raw.Seek(curoffset, soFromBeginning);
+        raw.Read(cursize, 4);
+
+        while cursize > 0 do
+        begin
+          Inc(i);
+          grid.RowCount := 1 + i;
+          grid.Cells[0, i] := ReadString(raw, curoffset + 4 + $24);
+          grid.Cells[1, i] := ReadString(raw, curoffset + 4 + $63);
+          grid.Cells[2, i] := ReadString(raw, curoffset + 4 + $83);
+          grid.Cells[3, i] := ReadString(raw, curoffset + 4 + $A3);
+
+          raw.Seek(curoffset + 4 + $C3, soFromBeginning);
+          tempi := 0;
+          raw.Read(tempi, 1);
+          if tempi > 0 then
+          begin
+            temps := '';
+            for j := 0 to 7 do
+            begin
+              if tempi and (1 shl j) > 0 then
+              begin
+                if Length(temps) > 0 then
+                  temps := temps + ', ' + IntToStr(1 shl j)
+                else
+                  temps := IntToStr(1 shl j);
+              end;
+            end;
+          end
+          else
+            temps := '0';
+          grid.Cells[4, i] := temps;
+
+          raw.Seek(curoffset + 4 + $15C, soFromBeginning);
+          tempi := 0;
+          raw.Read(tempi, 1);
+          if tempi > 0 then
+          begin
+            temps := '';
+            for j := 0 to 7 do
+            begin
+              if tempi and (1 shl j) > 0 then
+              begin
+                if Length(temps) > 0 then
+                  temps := temps + ', ' + IntToStr(1 shl j)
+                else
+                  temps := IntToStr(1 shl j);
+              end;
+            end;
+          end
+          else
+            temps := '0';
+          grid.Cells[5, i] := temps;
+
+          raw.Seek(curoffset + 4 + $0C, soFromBeginning);
+          raw.Read(tempf, 4);
+          temps := FormatFloat('#0', tempf);
+          raw.Seek(curoffset + 4 + $10, soFromBeginning);
+          raw.Read(tempf, 4);
+          temps := temps + ', ' + FormatFloat('#0', tempf);
+          raw.Seek(curoffset + 4 + $14, soFromBeginning);
+          raw.Read(tempf, 4);
+          temps := temps + ', ' + FormatFloat('#0', tempf);
+          grid.Cells[6, i] := temps;
+
+          raw.Seek(curoffset + 4 + $C7, soFromBeginning);
+          raw.Read(tempf, 4);
+          temps := FormatFloat('#0', tempf);
+          raw.Seek(curoffset + 4 + $CB, soFromBeginning);
+          raw.Read(tempf, 4);
+          temps := temps + ', ' + FormatFloat('#0', tempf);
+          raw.Seek(curoffset + 4 + $CF, soFromBeginning);
+          raw.Read(tempf, 4);
+          temps := temps + ', ' + FormatFloat('#0', tempf);
+          grid.Cells[7, i] := temps;
+
+          curoffset := curoffset + cursize + 4;
+          raw.Seek(curoffset, soFromBeginning);
+          raw.Read(cursize, 4);
+        end;
+      end;
+    end;
+  end else
+  begin
+    Exit;
+  end;
+end;
 
 end.
Index: oup/current/FileClasses/SUBT.pas
===================================================================
--- oup/current/FileClasses/SUBT.pas	(revision 244)
+++ oup/current/FileClasses/SUBT.pas	(revision 245)
@@ -129,5 +129,5 @@
   begin
     CacheFile;
-    CacheRawFile($18);
+    CacheAllRawFiles;
 
     FFileStream.Seek($1C, soFromBeginning);
@@ -144,5 +144,5 @@
           FFileStream.Seek($20 + i*4, soFromBeginning);
           FFileStream.Read(offset, 4);
-          FRawCaches[0].Seek(offset, soFromBeginning);
+          FRawCaches[0].RawStream.Seek(offset, soFromBeginning);
         end;
         SetLength(temps, 200);
@@ -150,5 +150,5 @@
         repeat
           Inc(pos);
-          FRawCaches[0].Read(temps[pos], 1);
+          FRawCaches[0].RawStream.Read(temps[pos], 1);
         until temps[pos] = #0;
         SetLength(temps, pos - 1);
Index: oup/current/FileClasses/_FileTypes.pas
===================================================================
--- oup/current/FileClasses/_FileTypes.pas	(revision 244)
+++ oup/current/FileClasses/_FileTypes.pas	(revision 245)
@@ -8,9 +8,14 @@
 
 type
+  TRawCache = record
+    DatOffset: Integer;
+    RawStream: TMemoryStream;
+  end;
+
   TFile = class(TTreeElement)
     protected
       FFileInfo: TFileInfo;
       FFileStream: TMemoryStream;
-      FRawCaches: array of TMemoryStream;
+      FRawCaches: array of TRawCache;
 
       FCached: Boolean;
@@ -28,4 +33,5 @@
       function GetEditor: TFrame;
       function GetFieldByOffset(Offset: Integer): TDataField;
+      function GetRawCacheID(Offset: Integer): Integer;
       procedure SetOpened(Opened: Boolean); virtual;
     published
@@ -41,4 +47,11 @@
       procedure CacheFile;
       procedure CacheRawFile(Offset: Integer);
+      procedure CacheAllRawFiles;
+      procedure DiscardFileCache;
+      procedure DiscardRawCache(Offset: Integer);
+      procedure DiscardAllRawCaches;
+      procedure StoreFileCache;
+      procedure StoreRawCache(Offset: Integer);
+      procedure StoreAllRawCaches;
 
       property FileStream: TMemoryStream read FFileStream;
@@ -79,19 +92,14 @@
 procedure TFile.CacheRawFile(Offset: Integer);
 var
-  rawlist: TRawDataList;
-  i: Integer;
-begin
-  rawlist := ConManager.Connection[ConnectionID].GetRawList(FFileInfo.ID);
-  if Length(rawlist) > 0 then
+  i: Integer;
+begin
+  for i := 0 to High(FRawCaches) do
   begin
-    for i := 0 to High(rawlist) do
+    if FRawCaches[i].DatOffset = Offset then
     begin
-      if rawlist[i].SrcOffset = Offset then
+      if not Assigned(FRawCaches[i].RawStream) then
       begin
-        if not Assigned(FRawCaches[i]) then
-        begin
-          FRawCaches[i] := TMemoryStream.Create;
-          ConManager.Connection[ConnectionID].LoadRawFile(FFileInfo.ID, Offset, TStream(FRawCaches[i]));
-        end;
+        FRawCaches[i].RawStream := TMemoryStream.Create;
+        ConManager.Connection[ConnectionID].LoadRawFile(FFileInfo.ID, Offset, TStream(FRawCaches[i].RawStream));
       end;
     end;
@@ -99,4 +107,65 @@
 end;
 
+procedure TFile.CacheAllRawFiles;
+var
+  i: Integer;
+begin
+  for i := 0 to High(FRawCaches) do
+    CacheRawFile(FRawCaches[i].DatOffset);
+end;
+
+
+
+procedure TFile.DiscardFileCache;
+begin
+  if Assigned(FFileStream) then
+    FFileStream.Free;
+  FFileStream := nil;
+end;
+
+procedure TFile.DiscardRawCache(Offset: Integer);
+var
+  i: Integer;
+begin
+  for i := 0 to High(FRawCaches) do
+  begin
+    if FRawCaches[i].DatOffset = Offset then
+    begin
+      if Assigned(FRawCaches[i].RawStream) then
+        FRawCaches[i].RawStream.Free;
+      FRawCaches[i].RawStream := nil;
+    end;
+  end;
+end;
+
+procedure TFile.DiscardAllRawCaches;
+var
+  i: Integer;
+begin
+  for i := 0 to High(FRawCaches) do
+    DiscardRawCache(FRawCaches[i].DatOffset);
+end;
+
+procedure TFile.StoreFileCache;
+begin
+  Exit;
+end;
+
+procedure TFile.StoreRawCache(Offset: Integer);
+begin
+  Exit;
+end;
+
+procedure TFile.StoreAllRawCaches;
+var
+  i: Integer;
+begin
+  for i := 0 to High(FRawCaches) do
+    StoreRawCache(FRawCaches[i].DatOffset);
+end;
+
+
+
+
 
 procedure TFile.SetOpened(Opened: Boolean);
@@ -107,9 +176,15 @@
 
 constructor TFile.Create(ConnectionID, FileID: Integer);
+var
+  rawlist: TRawDataList;
+  i: Integer;
 begin
   FConnectionID := ConnectionID;
   FFileInfo := ConManager.Connection[ConnectionID].GetFileInfo(FileID);
 
-  SetLength(FRawCaches, Length(ConManager.Connection[ConnectionID].GetRawList(FileID)));
+  rawlist := ConManager.Connection[ConnectionID].GetRawList(FileID);
+  SetLength(FRawCaches, Length(rawlist));
+  for i := 0 to High(rawlist) do
+    FRawCaches[i].DatOffset := rawlist[i].SrcOffset;
 
   FCached := False;
@@ -135,4 +210,14 @@
 end;
 
+
+function TFile.GetRawCacheID(Offset: Integer): Integer;
+var
+  i: Integer;
+begin
+  Result := -1;
+  for i := 0 to High(FRawCaches) do
+    if FRawCaches[i].DatOffset = Offset then
+      Result := i;
+end;
 
 function TFile.GetType: String;
Index: oup/current/FileClasses/_MetaTypes.pas
===================================================================
--- oup/current/FileClasses/_MetaTypes.pas	(revision 244)
+++ oup/current/FileClasses/_MetaTypes.pas	(revision 245)
@@ -5,5 +5,5 @@
 uses
   _FileTypes, _EmptyFile, _DataTypes, _Extensions, _TreeElement,
-  AKVA, SUBT, TXAN, TXMP;
+  AKEV, AKVA, BINA, SUBT, TXAN, TXMP;
 //  ABNA, AGDB, AGQC, AGQG, AGQM, AGQR, AISA, AITR, AIWA, AKAA, AKBA, AKBP, AKDA,
 //  AKEV, AKOT, AKVA, BINA, CBPI, CBPM, CONS, CRSA, DOOR, DPge, EDIA, ENVP, FILM,
@@ -46,6 +46,8 @@
 
 const
-  FileDescs: array[0..3] of TFileDesc = (
+  FileDescs: array[0..5] of TFileDesc = (
+    (ext: 'AKEV'; ftype: TFile_AKEV),
     (ext: 'AKVA'; ftype: TFile_AKVA),
+    (ext: 'BINA'; ftype: TFile_BINA),
     (ext: 'SUBT'; ftype: TFile_SUBT),
     (ext: 'TXAN'; ftype: TFile_TXAN),
Index: oup/current/Global/Functions.pas
===================================================================
--- oup/current/Global/Functions.pas	(revision 244)
+++ oup/current/Global/Functions.pas	(revision 245)
@@ -15,4 +15,6 @@
 function MakeDatLink(FileID: Integer): Integer;
 
+function ReadString(Stream: TStream; Offset: Integer): String;
+
 function StringSmaller(string1, string2: String): Boolean;
 
@@ -142,4 +144,27 @@
 begin
   Result := FileID * 256 + 1;
+end;
+
+
+
+
+function ReadString(Stream: TStream; Offset: Integer): String;
+var
+  i: Integer;
+  c: Char;
+begin
+  if Assigned(Stream) then
+  begin
+    if Offset >= 0 then
+    begin
+      Result := '';
+      Stream.Seek(Offset, soFromBeginning);
+      repeat
+        Stream.Read(c, 1);
+        if Ord(c) > 0 then
+          Result := Result + c;
+      until Ord(c) = 0;
+    end;
+  end;
 end;
 
Index: oup/current/OniUnPacker.dpr
===================================================================
--- oup/current/OniUnPacker.dpr	(revision 244)
+++ oup/current/OniUnPacker.dpr	(revision 245)
@@ -28,8 +28,10 @@
   _MetaManager in 'FileClasses\_MetaManager.pas',
   _EmptyFile in 'FileClasses\_EmptyFile.pas',
+  AKEV in 'FileClasses\AKEV.pas',
+  AKVA in 'FileClasses\AKVA.pas',
+  BINA in 'FileClasses\BINA.pas',
+  SUBT in 'FileClasses\SUBT.pas',
+  TXAN in 'FileClasses\TXAN.pas',
   TXMP in 'FileClasses\TXMP.pas',
-  TXAN in 'FileClasses\TXAN.pas',
-  AKVA in 'FileClasses\AKVA.pas',
-  SUBT in 'FileClasses\SUBT.pas',
   _BaseTemplate in 'Tools\_BaseTemplate.pas' {Form_BaseTemplate},
   _TemplateFile in 'Tools\_TemplateFile.pas' {Form_TemplateFile},
Index: oup/current/Tools/BinEdit.dfm
===================================================================
--- oup/current/Tools/BinEdit.dfm	(revision 244)
+++ oup/current/Tools/BinEdit.dfm	(revision 245)
@@ -1,4 +1,5 @@
 inherited Form_BinEdit: TForm_BinEdit
   Caption = 'Form_BinEdit'
+  KeyPreview = True
   OnCloseQuery = FormCloseQuery
   OnCreate = FormCreate
@@ -21,4 +22,5 @@
           inherited filelist_meta: TVirtualStringTree
             Height = 443
+            ExplicitHeight = 443
           end
         end
Index: oup/current/Tools/RawEdit.dfm
===================================================================
--- oup/current/Tools/RawEdit.dfm	(revision 244)
+++ oup/current/Tools/RawEdit.dfm	(revision 245)
@@ -1,4 +1,5 @@
 inherited Form_RawEdit: TForm_RawEdit
   Caption = 'Form_RawEdit'
+  KeyPreview = True
   OnCloseQuery = FormCloseQuery
   OnCreate = FormCreate
@@ -24,4 +25,5 @@
           inherited filelist: TListBox
             Height = 160
+            ExplicitHeight = 160
           end
           object panel_imexport: TPanel
@@ -33,6 +35,4 @@
             BevelOuter = bvNone
             TabOrder = 2
-            ExplicitTop = 363
-            ExplicitWidth = 200
             DesignSize = (
               190
@@ -67,6 +67,4 @@
             Caption = '2. Select .dat-link-offset'
             TabOrder = 3
-            ExplicitTop = 213
-            ExplicitWidth = 200
             object list_offset: TListBox
               Left = 2
@@ -134,5 +132,4 @@
         ShowPositionIfNotFocused = True
         OnSelectionChanged = hexSelectionChanged
-        ExplicitWidth = 283
       end
       object value_viewer: TWrapGrid
@@ -159,7 +156,4 @@
         OnDblClick = value_viewerDblClick
         OnMouseDown = value_viewerMouseDown
-        ExplicitTop = 309
-        ExplicitWidth = 283
-        ExplicitHeight = 114
       end
     end
Index: oup/current/Tools/RawEdit.pas
===================================================================
--- oup/current/Tools/RawEdit.pas	(revision 244)
+++ oup/current/Tools/RawEdit.pas	(revision 245)
@@ -6,5 +6,5 @@
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, _TemplateFileList, Menus, StdCtrls, ExtCtrls, Buttons, ComCtrls,
-  TypeDefs, Grids, Wrapgrid, MPHexEditor;
+  TypeDefs, Grids, Wrapgrid, MPHexEditor, VirtualTrees;
 
 type
