diff --git a/src/sbbs3/answer.cpp b/src/sbbs3/answer.cpp
index d2952b9e85d60ef64b958c31d71ceb0a2d222adf..34ea886662c5dd19d403b081bb127bbe7adda544 100644
--- a/src/sbbs3/answer.cpp
+++ b/src/sbbs3/answer.cpp
@@ -452,7 +452,7 @@ bool sbbs_t::answer()
 								SAFECOPY(useron.ipaddr, client_ipaddr);
 								SAFECOPY(useron.comp, client_name);
 								useron.logons++;
-								putuserdat(&cfg,&useron);
+								putuserdat(&useron);
 								snprintf(str, sizeof(str), "(%04u)  %-25s  %s Logon"
 									,useron.number, useron.alias, client.protocol);
 								logline("++", str);
diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 8115f23d819209648aa77dec9268b0b72c4eae3c..216752481fb3e99bbc89810a84a9f4a9306684a8 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -2628,7 +2628,9 @@ static void ctrl_thread(void* arg)
 			SAFECOPY(user.comp,host_name);
 			SAFECOPY(user.ipaddr,host_ip);
 			user.logontime=(time32_t)logintime;
-			putuserdat(&scfg, &user);
+			if((result = putuserdat(&scfg, &user)) != 0)
+				lprintf(LOG_ERR, "%04d [%s] <%s> !Error %d writing user data for user #%d"
+					,sock, host_ip, user.alias, result, user.number);
 			mqtt_user_login(&mqtt, &client);
 
 #ifdef _WIN32
diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp
index 711fbefbd0f01f099a0ee4b27d02202bc83fed5e..41721fe5c9021e3ed3d629ad2df9091f04dbdbd2 100644
--- a/src/sbbs3/logon.cpp
+++ b/src/sbbs3/logon.cpp
@@ -443,7 +443,7 @@ bool sbbs_t::logon()
 	SAFECOPY(useron.ipaddr, client_ipaddr);
 	SAFECOPY(useron.comp, client_name);
 	useron.logons++;
-	putuserdat(&cfg,&useron);
+	putuserdat(&useron);
 	getmsgptrs();
 	sys_status|=SS_USERON;          /* moved from further down */
 
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 3ef8e9faf67a38b49d1b46febd0f3a78ac34c085..a3e705215d71a2e1706d9ce418469dcae1c83ab8 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -1322,6 +1322,7 @@ public:
 	int		searchdn(char *search,int usernum);
 	void	maindflts(user_t* user);
 	void	purgeuser(int usernumber);
+	void	putuserdat(user_t*);
 
 	/* ver.cpp */
 	void	ver(void);
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 2cff60677b6aa859af3784094ba2c5b26fdc8c26..bc8a3540acccd3dba3fe3b6a39f44aebff84ca77 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -475,7 +475,12 @@ js_login(JSContext *cx, uintN argc, jsval *arglist)
 		client->user.ltoday++;
 	}
 
-	putuserdat(&scfg,&client->user);
+	int result = putuserdat(&scfg,&client->user);
+	if(result != 0) {
+		lprintf(LOG_ERR, "%04d %s !Error %d writing user data for user #%d"
+			,client->socket,client->service->protocol
+			,result, client->user.number);
+	}
 	if(client->subscan==NULL) {
 		client->subscan=(subscan_t*)calloc(scfg.total_subs, sizeof(subscan_t));
 		if(client->subscan==NULL)
diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp
index 768f8ad1b64e8e20a76fd1332849e09540f84bec..54b9fa17d35e9d01968e848ae91578dcac265cf7 100644
--- a/src/sbbs3/useredit.cpp
+++ b/src/sbbs3/useredit.cpp
@@ -78,7 +78,7 @@ void sbbs_t::useredit(int usernumber)
 		if(strcmp(str,tmp) && user.ltoday) {
 			user.ltoday=user.ttoday=user.ptoday=user.etoday=user.textra=0;
 			user.freecdt=cfg.level_freecdtperday[user.level];
-			putuserdat(&cfg,&user); 	/* Leave alone */
+			putuserdat(&user); 	/* Leave alone */
 		}
 		char user_pass[LEN_PASS + 1];
 		SAFECOPY(user_pass, user.pass);
@@ -494,7 +494,7 @@ void sbbs_t::useredit(int usernumber)
 					else
 						user.expire+=((long)cfg.val_expire[i]*24L*60L*60L); 
 				}
-				putuserdat(&cfg,&user);
+				putuserdat(&user);
 				break;
 			case 'W':
 				bputs(text[UeditPassword]);
@@ -516,7 +516,7 @@ void sbbs_t::useredit(int usernumber)
 					if((int)i>0) {
 						user.number=i;
 						putusername(&cfg,user.number,user.alias);
-						putuserdat(&cfg,&user); 
+						putuserdat(&user);
 					} 
 				}
 				break;
@@ -1170,3 +1170,14 @@ void sbbs_t::purgeuser(int usernumber)
 	putusername(&cfg,usernumber,nulstr);
 	putusermisc(usernumber, user.misc | DELETED);
 }
+
+/****************************************************************************/
+/* An error checking/logging wrapper for userdat.c putuserdat()				*/
+/****************************************************************************/
+void sbbs_t::putuserdat(user_t* user)
+{
+	int result = ::putuserdat(&cfg, user);
+	if(result != 0)
+		lprintf(LOG_ERR, "!Error %d writing user data for user #%d"
+			,result, user->number);
+}
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index f7fc816aeb41a63e0eb07b60c6417994d3758161..9783a8af95f9fa038d29ec50d31bb6aea450a53a 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -1654,7 +1654,12 @@ void http_logon(http_session_t * session, user_t *usr)
 		SAFECOPY(session->user.comp, session->host_name);
 		SAFECOPY(session->user.ipaddr, session->host_ip);
 		session->user.logontime = (time32_t)session->logon_time;
-		putuserdat(&scfg, &session->user);
+		int result = putuserdat(&scfg, &session->user);
+		if(result != 0)
+			lprintf(LOG_ERR, "%04d %s [%s] <%s> !Error %d writing user data for user #%d"
+				,session->socket, session->client.protocol, session->host_ip
+				,session->username, session->user.number);
+
 	}
 	SAFECOPY(session->client.user, session->username);
 	session->client.usernum = session->user.number;