|  | @@ -3339,7 +3339,7 @@ int la_RematchPointers(int Mode){
 | 
	
		
			
				|  |  |      while(inst=lstPopPointer(&MAIN.RenewHyper2s)){ laMemNodeHyper* h=memGetHead(inst,0);memMakeHyperData(h);memAssignRef(h,&h->FromFile,0);  }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -int laPackUDF(laUDF *udf, int UseInstanceList){
 | 
	
		
			
				|  |  | +int laPackUDF(laUDF *udf, int UseInstanceList, int DoBackup){
 | 
	
		
			
				|  |  |      laUDFPropSegment *ps;
 | 
	
		
			
				|  |  |      short NumSegments = 0;
 | 
	
		
			
				|  |  |      u64bit RefPos;
 | 
	
	
		
			
				|  | @@ -3348,6 +3348,11 @@ int laPackUDF(laUDF *udf, int UseInstanceList){
 | 
	
		
			
				|  |  |      char Root[1024]={0};
 | 
	
		
			
				|  |  |      char FilePath[1024]={0};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    if(DoBackup){
 | 
	
		
			
				|  |  | +        char BackupPath[1024]; sprintf(BackupPath,"%s~",udf->FileName->Ptr);
 | 
	
		
			
				|  |  | +        laCopyFile(BackupPath,udf->FileName->Ptr);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      udf->DiskFile = fopen(udf->FileName->Ptr, "wb");
 | 
	
		
			
				|  |  |      if (!udf->DiskFile) return 0;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3791,7 +3796,7 @@ void laSaveManagedUDF(){
 | 
	
		
			
				|  |  |      laRegisterModifications(0,0,0,1);
 | 
	
		
			
				|  |  |      for(laManagedUDF* m=MAIN.ManagedUDFs.pFirst;m;m=m->Item.pNext){
 | 
	
		
			
				|  |  |          if(!m->udf) continue;
 | 
	
		
			
				|  |  | -        if(m->udf->PropsToOperate.pFirst){ laPackUDF(m->udf, 1); }
 | 
	
		
			
				|  |  | +        if(m->udf->PropsToOperate.pFirst){ laPackUDF(m->udf, 1, 1); }
 | 
	
		
			
				|  |  |          laCloseUDF(m->udf);// just in case
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |