Index: oup/current/DataAccess/Access_OniArchive.pas
===================================================================
--- oup/current/DataAccess/Access_OniArchive.pas	(revision 193)
+++ oup/current/DataAccess/Access_OniArchive.pas	(revision 209)
@@ -16,7 +16,8 @@
     FRawOpened:          Boolean;
     FSepOpened:          Boolean;
+    procedure SetUnloadWhenUnused(doit: Boolean);
   protected
   public
-    property UnloadWhenUnused: Boolean Read FUnloadWhenUnused Write FUnloadWhenUnused;
+    property UnloadWhenUnused: Boolean Read FUnloadWhenUnused Write SetUnloadWhenUnused;
 
     constructor Create(DatFilename: String; ConnectionID: Integer; var Msg: TStatusMessages); override;
@@ -161,4 +162,51 @@
   FChangeRights := [CR_EditDat, CR_EditRaw, CR_AppendRaw];
 end;
+
+
+
+
+procedure TAccess_OniArchive.SetUnloadWhenUnused(doit: Boolean);
+begin
+  FUnloadWhenUnused := doit;
+  if FUnloadWhenUnused then
+  begin
+    if FDatOpened then
+    begin
+      FDatOpened := False;
+      Fdat_file.Free;
+    end;
+    if FRawOpened then
+    begin
+      FRawOpened := False;
+      Fraw_file.Free;
+    end;
+    if FSepOpened then
+    begin
+      FSepOpened := False;
+      Fsep_file.Free;
+    end;
+  end
+  else
+  begin
+    if not FDatOpened then
+    begin
+      Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite);
+      FDatOpened := True;
+    end;
+    if not FRawOpened then
+    begin
+      Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'),
+        fmOpenReadWrite);
+      FRawOpened := True;
+    end;
+    if (not FSepOpened) and (FDataOS <> DOS_WIN) then
+    begin
+      Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'),
+        fmOpenReadWrite);
+      FSepOpened := True;
+    end;
+  end;
+end;
+
 
 
