diff --git a/src/sbbs3/getnode.cpp b/src/sbbs3/getnode.cpp
index 5e0d13c811346d2adc563bd8932d534a8b3a7350..4ec584b233d29d87fb408640ea6dbb3e9b68e57d 100644
--- a/src/sbbs3/getnode.cpp
+++ b/src/sbbs3/getnode.cpp
@@ -57,8 +57,6 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit)
 #endif
 	number--;	/* make zero based */
 	for(count=0;count<LOOP_NODEDAB;count++) {
-		if(count)
-			mswait(100);
 		if(lockit && lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))!=0) {
 			unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
 			continue;
@@ -69,6 +67,7 @@ bool sbbs_t::getnodedat(uint number, node_t *node, bool lockit)
 			unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
 		if(rd==sizeof(node_t))
 			break;
+		FILE_RETRY_DELAY(count + 1);
 	}
 	if(!lockit && cfg.node_misc&NM_CLOSENODEDAB) {
 		close(nodefile);
@@ -290,8 +289,6 @@ bool sbbs_t::getnodeext(uint number, char *ext)
 
 	number--;   /* make zero based */
 	for(count=0;count<LOOP_NODEDAB;count++) {
-		if(count)
-			mswait(100);
 		if(lock(node_ext,(long)number*128L,128)!=0)
 			continue;
 		lseek(node_ext,(long)number*128L,SEEK_SET);
@@ -299,6 +296,7 @@ bool sbbs_t::getnodeext(uint number, char *ext)
 		unlock(node_ext,(long)number*128L,128);
 		if(rd==128)
 			break;
+		FILE_RETRY_DELAY(count + 1);
 	}
 	close(node_ext);
 	node_ext=-1;
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index fd25b06d9c24451bdbca487ee725d346ab80cf60..1dabb5961ea47449e288650ba9c810f453027c49 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -3655,7 +3655,7 @@ bool sbbs_t::init()
 			unlock(nodefile,(cfg.node_num-1)*sizeof(node_t),sizeof(node_t));
 			break;
 		}
-		mswait(100);
+		FILE_RETRY_DELAY(i + 1);
 	}
 	if(cfg.node_misc&NM_CLOSENODEDAB) {
 		close(nodefile);
@@ -3984,7 +3984,7 @@ int sbbs_t::nopen(char *str, int access)
 		access|=O_BINARY;
     while(((file=sopen(str,access,share,DEFFILEMODE))==-1)
         && FILE_RETRY_ERRNO(errno) && count++<LOOP_NOPEN)
-	    SLEEP((count / 10) * 100);
+	    FILE_RETRY_DELAY(count);
     if(count>(LOOP_NOPEN/2) && count<=LOOP_NOPEN) {
         SAFEPRINTF2(logstr,"NOPEN COLLISION - File: \"%s\" Count: %d"
             ,str,count);
diff --git a/src/sbbs3/putnode.cpp b/src/sbbs3/putnode.cpp
index 6afdb025b7af6d4a53af167e75d8e67933cb071d..e8b9c183ae97142275cfff0d9843a715a1becc0a 100644
--- a/src/sbbs3/putnode.cpp
+++ b/src/sbbs3/putnode.cpp
@@ -65,7 +65,7 @@ bool sbbs_t::putnodedat(uint number, node_t* node)
 		if(wr==sizeof(node_t))
 			break;
 		wrerr=errno;	/* save write error */
-		mswait(100);
+		FILE_RETRY_DELAY(attempts + 1);
 	}
 	unlocknodedat(number);
 
@@ -116,8 +116,6 @@ bool sbbs_t::putnodeext(uint number, char *ext)
 		return false;
 	}
 	for(count=0;count<LOOP_NODEDAB;count++) {
-		if(count)
-			mswait(100);
 		lseek(node_ext,(long)number*128L,SEEK_SET);
 		if(lock(node_ext,(long)number*128L,128)==-1) 
 			continue; 
@@ -125,6 +123,7 @@ bool sbbs_t::putnodeext(uint number, char *ext)
 		unlock(node_ext,(long)number*128L,128);
 		if(wr==128)
 			break;
+		FILE_RETRY_DELAY(count + 1);
 	}
 	close(node_ext);
 	node_ext=-1;
diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index c2c7a6b2df9a6f7febbc89626574497c3d95023b..4ac198b3ff8710555dfde6d950132d95625f2bfe 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -514,7 +514,8 @@ typedef enum {						/* Values for xtrn_t.event				*/
 #define SEC_CID 	  10	/* Ten second pause for caller ID				*/
 #define SEC_RING	   6	/* Maximum seconds between rings				*/
 
-#define LOOP_NODEDAB  50	/* Retries on node.dab locking/unlocking		*/
+#define LOOP_NODEDAB  200	/* Retries on node.dab locking/unlocking		*/
+#define FILE_RETRY_DELAY(x) mswait(((x / 10) * 50) + xp_random(100))
 
 							/* String lengths								*/
 #define LEN_ALIAS		25	/* User alias									*/
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index ad3e15c70262f5364a89a77c95b8c196576d84ec..4b77d6d1087975b8cba13483ee8ecf9002e57e7f 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -49,7 +49,6 @@
 static const char user_field_separator[2] = { USER_FIELD_SEPARATOR, '\0' };
 
 #define LOOP_USERDAT 200
-#define RETRY_DELAY(x) mswait(((x / 10) * 50) + xp_random(100))
 
 char* userdat_filename(scfg_t* cfg, char* path, size_t size)
 {
@@ -282,7 +281,7 @@ bool lockuserdat(int file, unsigned user_number)
 	unsigned attempt=0;
 	while(attempt < LOOP_USERDAT && lock(file, offset, USER_RECORD_LINE_LEN) == -1) {
 		attempt++;
-		RETRY_DELAY(attempt);
+		FILE_RETRY_DELAY(attempt);
 	}
 	return attempt < LOOP_USERDAT;
 }
@@ -1141,8 +1140,6 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp)
 	if(filelength(file)>=(long)(number*sizeof(node_t))) {
 		number--;	/* make zero based */
 		for(count=0;count<LOOP_NODEDAB;count++) {
-			if(count)
-				mswait(100);
 			(void)lseek(file,(long)number*sizeof(node_t),SEEK_SET);
 			if(lockit
 				&& lock(file,(long)number*sizeof(node_t),sizeof(node_t))!=0) {
@@ -1157,6 +1154,7 @@ int getnodedat(scfg_t* cfg, uint number, node_t *node, bool lockit, int* fdp)
 				result = USER_SUCCESS;
 				break;
 			}
+			FILE_RETRY_DELAY(count + 1);
 		}
 	}
 
@@ -1191,7 +1189,7 @@ int putnodedat(scfg_t* cfg, uint number, node_t* node, bool closeit, int file)
 		(void)lseek(file,(long)number*sizeof(node_t),SEEK_SET);
 		if((wr=write(file,node,sizeof(node_t)))==sizeof(node_t))
 			break;
-		RETRY_DELAY(attempts + 1);
+		FILE_RETRY_DELAY(attempts + 1);
 	}
 	unlock(file,(long)number*sizeof(node_t),sizeof(node_t));
 	if(closeit)