diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index e9501354ca8d5df083c5cdee9a71d3ade7cdbad0..c7b5b18e52744b9959eaf007b1c558baed6b368f 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -78,6 +78,7 @@ typedef struct {
 	uint32_t		options;
 	int				listen_backlog;
 	int				log_level;
+	int				lowest_log_level;	// highest severity from JS
 	uint32_t		stack_size;
 	js_startup_t	js;
 	js_server_props_t js_server_props;
@@ -306,8 +307,12 @@ js_log(JSContext *cx, uintN argc, jsval *arglist)
 	rc=JS_SUSPENDREQUEST(cx);
 	if(service==NULL)
 		lprintf(level,"%04d %s",client->socket,str);
-	else if(level <= client->service->log_level)
-		lprintf(level,"%04d %s %s",client->socket,client->service->protocol,str);
+	else {
+		if(level < client->service->lowest_log_level)
+			level = client->service->lowest_log_level;
+		if(level <= client->service->log_level)
+			lprintf(level,"%04d %s %s",client->socket,client->service->protocol,str);
+	}
 	JS_RESUMEREQUEST(cx, rc);
 
 	JS_SET_RVAL(cx, arglist, STRING_TO_JSVAL(JS_NewStringCopyZ(cx, str)));
@@ -1603,6 +1608,7 @@ static service_t* read_services_ini(const char* services_ini, service_t* service
 		serv.stack_size=(uint32_t)iniGetBytes(list,sec_list[i],"StackSize",1,stack_size);
 		serv.options=iniGetBitField(list,sec_list[i],"Options",service_options,options);
 		serv.log_level=iniGetLogLevel(list,sec_list[i],"LogLevel",log_level);
+		serv.lowest_log_level=iniGetLogLevel(list,sec_list[i],"LowestLogLevel",0);
 		SAFECOPY(serv.cmd,iniGetString(list,sec_list[i],"Command","",cmd));
 
 		p=iniGetString(list,sec_list[i],"Port",serv.protocol,portstr);