diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp
index 5ba375d9804002d5a686d9e7e71dd96739eb2b28..e165e63ecce1ef1275b9488219a4c7c364d3f9cd 100644
--- a/src/sbbs3/xtrn_sec.cpp
+++ b/src/sbbs3/xtrn_sec.cpp
@@ -302,9 +302,6 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			return; 
 		}
 
-		if(tleft>0x7fff)	/* Reduce time-left for broken 16-bit doors		*/
-			tleft=0x7fff;	/* That interpret this value as a signed short	*/
-
 		safe_snprintf(str, sizeof(str), "%u\n%s\n%s\n%s\n%u\n%c\n"
 			,useron.number						/* User number */
 			,name								/* User name */
@@ -331,7 +328,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 
 		safe_snprintf(str, sizeof(str), "%lu\n%s\n%s\n%s\n%lu\n%d\n%s\n%s\n"
 			"%u\n%u\n%" PRIu64 "\n%u\n%" PRIu64 "\n%u\n%s\n"
-			,tleft								/* Time left in seconds */
+			,MIN(tleft, INT16_MAX)				/* Time left in seconds */
 			,node_dir							/* Gfiles dir (log dir) */
 			,data_dir							/* Data dir */
 			,"node.log"                         /* Name of log file */
@@ -363,9 +360,6 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			return; 
 		}
 
-		if(tleft>0x7fff)	/* Reduce time-left for broken 16-bit doors		*/
-			tleft=0x7fff;	/* That interpret this value as a signed short	*/
-
 		SAFEPRINTF(str,"COM%d:\n"
 			,online==ON_REMOTE ? cfg.com_port:0);	/* 01: COM port - 0 if Local */
 
@@ -402,10 +396,10 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 
 		safe_snprintf(str, sizeof(str), "%u\n%u\n%s\n%lu\n%lu\n%s\n"
 			,useron.level						/* 15: User security level */
-			,useron.logons						/* 16: User total logons */
+			,MIN(useron.logons, INT16_MAX)		/* 16: User total logons */
 			,unixtodstr(&cfg,useron.laston,tmp)	/* 17: User last on date */
-			,tleft								/* 18: User time left in sec */
-			,tleft/60							/* 19: User time left in min */
+			,MIN(tleft, INT16_MAX)				/* 18: User time left in sec */
+			,MIN((tleft/60), INT16_MAX)			/* 19: User time left in min */
 			,(term & NO_EXASCII)				/* 20: GR if COLOR ANSI */
 				? "7E" : (term & (ANSI|COLOR)) == (ANSI|COLOR) ? "GR" : "NG");
 		lfexpand(str,misc);
@@ -445,7 +439,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 				? 'Y':'N'                       /* 39: ANSI supported but NG mode */
 			,'Y'                                /* 40: Use record locking */
 			,cfg.color[clr_external]			/* 41: BBS default color */
-			,useron.min 						/* 42: Time credits in minutes */
+			,MIN(useron.min, INT16_MAX)			/* 42: Time credits in minutes */
 			,tm.tm_mon+1						/* 43: File new-scan date */
 			,tm.tm_mday
 			,TM_YEAR(tm.tm_year));
@@ -466,7 +460,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			,useron.dlb/1024UL					/* 49: Total Kbytes downloaded */
 			,useron.comment 					/* 50: User comment */
 			,0									/* 51: Total doors opened */
-			,useron.posts); 					/* 52: User message left */
+			,MIN(useron.posts, INT16_MAX));		/* 52: User message left */
 		lfexpand(str,misc);
 		fwrite(str,strlen(str),1,fp);
 
@@ -518,7 +512,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			,useron.location					/* User's city */
 			,INT_TO_BOOL(term & ANSI)			/* 1=ANSI 0=ASCII */
 			,useron.level						/* Security level */
-			,tleft/60); 						/* Time left in minutes */
+			,MIN((tleft/60), INT16_MAX)); 		/* Time left in minutes */
 		strupr(str);
 		lfexpand(str,misc);
 		fwrite(str,strlen(str),1,fp);
@@ -624,7 +618,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			,i									/* DTE rate */
 			,useron.location					/* User location */
 			,useron.level						/* Security level */
-			,tleft/60							/* Time left in min */
+			,MIN((tleft/60), INT16_MAX)			/* Time left in min */
 			,(term & ANSI) ? "COLOR":"MONO"		/* ANSI ??? */
 			,useron.pass						/* Password */
 			,useron.number);					/* User number */
@@ -633,7 +627,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 
 		localtime_r(&now,&tm);
 		safe_snprintf(str, sizeof(str), "%lu\n%02d:%02d\n%02d:%02d %02d/%02d/%02d\n%s\n"
-			,tleft								/* Time left in seconds */
+			,MIN(tleft, INT16_MAX)			/* Time left in seconds */
 			,tm.tm_hour,tm.tm_min 			/* Current time HH:MM */
 			,tm.tm_hour,tm.tm_min 			/* Current time and date HH:MM */
 			,tm.tm_mon+1,tm.tm_mday			/* MM/DD/YY */
@@ -812,7 +806,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			,tmp								/* User's first name */
 			,dte_rate							/* DTE Rate */
 			,cfg.com_port						/* COM Port */
-			,tleft/60							/* Time left in minutes */
+			,MIN((tleft/60), INT16_MAX)			/* Time left in minutes */
 			,l									/* Seconds since midnight (now) */
 			);
 		lfexpand(str,misc);
@@ -901,7 +895,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			,rows								/* Page length */
 			,dte_rate							/* Baud rate */
 			,online==ON_LOCAL ? 0:cfg.com_port	/* COM port */
-			,tleft/60							/* Time left (in minutes) */
+			,MIN((tleft/60), INT16_MAX)			/* Time left (in minutes) */
 			);
 		lfexpand(str,misc);
 		fwrite(str, strlen(str), 1, fp);
@@ -926,7 +920,7 @@ void sbbs_t::xtrndat(const char *name, const char *dropdir, uchar type, ulong tl
 			,useron.level						/* User's level */
 			,useron.misc&EXPERT ? 'Y':'N'       /* Expert? */
 			,(term & ANSI) ? 'Y':'N'			/* ANSI? */
-			,tleft/60							/* Minutes left */
+			,MIN((tleft/60), INT16_MAX)			/* Minutes left */
 			,useron.phone						/* User's phone number */
 			,useron.location					/* User's city and state */
 			,getbirthmmddyy(&cfg, useron.birth, tmp, sizeof(tmp))	/* User's birth date (MM/DD/YY) */