diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 459310e1204a3ff94879c5a190396880697cb304..7f7da91db5c6ca6aa674c8410586e98801393531 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -2920,16 +2920,17 @@ void event_thread(void* arg)
 				if(sbbs->useron.number != 0 && !(sbbs->useron.misc&(DELETED|INACTIVE))) {
 					time_t t;
 					SAFEPRINTF(lockfname,"%s.lock",fname);
-					int lockfile = fmutex_open(lockfname,startup->host_name,TIMEOUT_MUTEX_FILE, &t);
+					int lockfile = fmutex_open(lockfname,startup->host_name,TIMEOUT_MUTEX_FILE, &t, true);
 					if(lockfile < 0) {
 						if(difftime(time(NULL), t) > 60)
 							sbbs->lprintf(LOG_INFO," %s exists (unpack in progress?) since %s", lockfname, time_as_hhmm(&sbbs->cfg, t, str));
 						continue;
 					}
+					sbbs->lprintf(LOG_DEBUG, "%s is now owned", lockfname);
 					if(!fexist(fname)) {
-						sbbs->lprintf(LOG_NOTICE, "%s already gone", fname);
-						close(lockfile);
-						sbbs->fremove(WHERE, lockfname, /* log-all-errors: */true);
+						sbbs->lprintf(LOG_DEBUG, "%s already gone", fname);
+						if(!fmutex_close(lockfname, lockfile))
+							sbbs->errormsg(WHERE, ERR_REMOVE, lockfname);
 						continue;
 					}
 					sbbs->online=ON_LOCAL;
@@ -2956,8 +2957,8 @@ void event_thread(void* arg)
 						SAFEPRINTF(str,"%sfile/", sbbs->cfg.data_dir);
 						sbbs->delfiles(str, badpkt, /* keep: */10);
 					}
-					close(lockfile);
-					sbbs->fremove(WHERE, lockfname, /* log-all-errors: */true);
+					if(!fmutex_close(lockfname, lockfile))
+						sbbs->errormsg(WHERE, ERR_REMOVE, lockfname);
 				}
 				else {
 					sbbs->lprintf(LOG_INFO, "Removing: %s", fname);
@@ -2988,16 +2989,17 @@ void event_thread(void* arg)
 					continue;
 				}
 				SAFEPRINTF2(lockfname,"%spack%04u.lock",sbbs->cfg.data_dir,usernum);
-				int lockfile = fmutex_open(lockfname,startup->host_name,TIMEOUT_MUTEX_FILE, &t);
+				int lockfile = fmutex_open(lockfname,startup->host_name,TIMEOUT_MUTEX_FILE, &t, true);
 				if(lockfile < 0) {
 					if(difftime(time(NULL), t) > 60)
 						sbbs->lprintf(LOG_INFO,"%s exists (pack in progress?) since %s", lockfname, time_as_hhmm(&sbbs->cfg, t, str));
 					continue;
 				}
+				sbbs->lprintf(LOG_DEBUG, "%s is now owned", lockfname);
 				if(!fexist(fname)) {
-					sbbs->lprintf(LOG_NOTICE, "%s already gone", fname);
-					close(lockfile);
-					sbbs->fremove(WHERE, lockfname, /* log-all-errors: */true);
+					sbbs->lprintf(LOG_DEBUG, "%s already gone", fname);
+					if(!fmutex_close(lockfname, lockfile))
+						sbbs->errormsg(WHERE, ERR_REMOVE, lockfname);
 					continue;
 				}
 				if(!(sbbs->useron.misc&(DELETED|INACTIVE))) {
@@ -3022,9 +3024,9 @@ void event_thread(void* arg)
 					sbbs->console&=~CON_L_ECHO;
 					sbbs->online=false;
 				}
-				sbbs->fremove(WHERE, fname, /* log-all-errors: */true);
-				close(lockfile);
-				sbbs->fremove(WHERE, lockfname, /* log-all-errors: */true);
+				sbbs->fremove(WHERE, fname);
+				if(!fmutex_close(lockfname, lockfile))
+					sbbs->errormsg(WHERE, ERR_REMOVE, lockfname);
 			}
 			globfree(&g);
 			sbbs->useron.number = 0;