diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 7f64c6b605b11892064884182c72279f2016a56d..0d4ba6d03d6858952aee106d44a058db07116b1d 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -4941,7 +4941,7 @@ void DLLCALL ftp_server(void* arg)
 		/*
 		 * Add interfaces
 		 */
-		xpms_add_chararray_list(ftp_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->port, "FTP Server", ftp_open_socket_cb, startup->seteuid, NULL);
+		xpms_add_list(ftp_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->port, "FTP Server", ftp_open_socket_cb, startup->seteuid, NULL);
 
 		lprintf(LOG_INFO,"FTP Server listening");
 		status(STATUS_WFC);
diff --git a/src/sbbs3/ftpsrvr.h b/src/sbbs3/ftpsrvr.h
index d46f82e891df34f6515b5d064fec5e3929dcb073..aea75ef72267f79016e51d59b122fb2cf8fa20cd 100644
--- a/src/sbbs3/ftpsrvr.h
+++ b/src/sbbs3/ftpsrvr.h
@@ -53,7 +53,7 @@ typedef struct {
 	WORD	sem_chk_freq;		/* semaphore file checking frequency (in seconds) */
 	struct in_addr outgoing4;
 	struct in6_addr	outgoing6;
-    char	interfaces[INI_MAX_VALUE_LEN];
+    str_list_t	interfaces;
 	struct in_addr pasv_ip_addr;
 	struct in6_addr	pasv_ip6_addr;
 	WORD	pasv_port_low;
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 29465ab5ce92aed1067cc0a92fb27005c7b16c03..d3639c77b6fd52245432309b5590321c1eefd3bf 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -5193,12 +5193,12 @@ void DLLCALL mail_server(void* arg)
 			cleanup(1);
 			return;
 		}
-		if(!xpms_add_chararray_list(mail_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->smtp_port, "SMTP Server", mail_open_socket, startup->seteuid, "smtp"))
+		if(!xpms_add_list(mail_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->smtp_port, "SMTP Server", mail_open_socket, startup->seteuid, "smtp"))
 			lprintf(LOG_INFO,"SMTP No extra interfaces listening");
 		lprintf(LOG_INFO,"SMTP Server listening");
 
 		if(startup->options&MAIL_OPT_USE_SUBMISSION_PORT) {
-			if(xpms_add_chararray_list(mail_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->submission_port, "SMTP Submission Agent", mail_open_socket, startup->seteuid, "submission"))
+			if(xpms_add_list(mail_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->submission_port, "SMTP Submission Agent", mail_open_socket, startup->seteuid, "submission"))
 				lprintf(LOG_INFO,"SUBMISSION Server listening on port %u"
 					,startup->submission_port);
 		}
@@ -5206,7 +5206,7 @@ void DLLCALL mail_server(void* arg)
 		if(startup->options&MAIL_OPT_ALLOW_POP3) {
 
 			/* open a socket and wait for a client */
-			if(!xpms_add_chararray_list(mail_set, PF_UNSPEC, SOCK_STREAM, 0, startup->pop3_interfaces, startup->pop3_port, "POP3 Server", mail_open_socket, startup->seteuid, "pop3"))
+			if(!xpms_add_list(mail_set, PF_UNSPEC, SOCK_STREAM, 0, startup->pop3_interfaces, startup->pop3_port, "POP3 Server", mail_open_socket, startup->seteuid, "pop3"))
 				lprintf(LOG_INFO,"SMTP No extra interfaces listening");
 			lprintf(LOG_INFO,"POP3 Server listening");
 		}
diff --git a/src/sbbs3/mailsrvr.h b/src/sbbs3/mailsrvr.h
index 887e3833fa54f3d1176b51a5b7caee2aab71c068..5e53521d4141cfa5a8454ce1c1e564dfad07ba5f 100644
--- a/src/sbbs3/mailsrvr.h
+++ b/src/sbbs3/mailsrvr.h
@@ -63,8 +63,8 @@ typedef struct {
 	WORD	sem_chk_freq;		/* semaphore file checking frequency (in seconds) */
 	struct in_addr outgoing4;
 	struct in6_addr	outgoing6;
-    char   interfaces[INI_MAX_VALUE_LEN];
-    char   pop3_interfaces[INI_MAX_VALUE_LEN];
+    str_list_t   interfaces;
+    str_list_t   pop3_interfaces;
     DWORD	options;			/* See MAIL_OPT definitions */
     DWORD	max_msg_size;		/* Max msg size in bytes (0=unlimited) */
 #define MAIL_DEFAULT_MAX_MSG_SIZE			(20*1024*1024)	/* 20MB */
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 4f113aa73e72ec232a4a7bde45630d1283d9320b..1e51ca479291171bd02b658f74a0f149f969fa8f 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -4696,7 +4696,7 @@ void DLLCALL bbs_thread(void* arg)
 	/*
 	 * Add interfaces
 	 */
-	xpms_add_chararray_list(ts_set, PF_UNSPEC, SOCK_STREAM, 0, startup->telnet_interfaces, startup->telnet_port, "Telnet Server", sock_cb, startup->seteuid, &telnet_cb);
+	xpms_add_list(ts_set, PF_UNSPEC, SOCK_STREAM, 0, startup->telnet_interfaces, startup->telnet_port, "Telnet Server", sock_cb, startup->seteuid, &telnet_cb);
 
 	lprintf(LOG_INFO,"Telnet Server listening on port %u",startup->telnet_port);
 
@@ -4704,7 +4704,7 @@ void DLLCALL bbs_thread(void* arg)
 		/* open a socket and wait for a client */
 		rlogin_cb.protocol="rlogin";
 		rlogin_cb.startup=startup;
-		xpms_add_chararray_list(ts_set, PF_UNSPEC, SOCK_STREAM, 0, startup->rlogin_interfaces, startup->rlogin_port, "RLogin Server", sock_cb, startup->seteuid, &rlogin_cb);
+		xpms_add_list(ts_set, PF_UNSPEC, SOCK_STREAM, 0, startup->rlogin_interfaces, startup->rlogin_port, "RLogin Server", sock_cb, startup->seteuid, &rlogin_cb);
 		lprintf(LOG_INFO,"RLogin Server listening on port %u",startup->rlogin_port);
 	}
 
@@ -4751,7 +4751,7 @@ void DLLCALL bbs_thread(void* arg)
 		/* open a socket and wait for a client */
 		ssh_cb.protocol="ssh";
 		ssh_cb.startup=startup;
-		xpms_add_chararray_list(ts_set, PF_UNSPEC, SOCK_STREAM, 0, startup->ssh_interfaces, startup->ssh_port, "SSH Server", sock_cb, startup->seteuid, &ssh_cb);
+		xpms_add_list(ts_set, PF_UNSPEC, SOCK_STREAM, 0, startup->ssh_interfaces, startup->ssh_port, "SSH Server", sock_cb, startup->seteuid, &ssh_cb);
 		lprintf(LOG_INFO,"SSH Server listening on port %u",startup->ssh_port);
 	}
 NO_SSH:
diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
index 428d1bffebc6b2adbf261f71a23bb707f432599f..1651ef109e1b235743f32d968c9cfe3e5cf76411 100644
--- a/src/sbbs3/sbbs_ini.c
+++ b/src/sbbs3/sbbs_ini.c
@@ -214,8 +214,8 @@ static void get_ini_globals(str_list_t list, global_startup_t* global)
         SAFECOPY(global->host_name,value);
 
 	global->sem_chk_freq=iniGetShortInt(list,section,strSemFileCheckFrequency,0);
-	SAFECOPY(global->interfaces,
-			iniGetString(list,section,strInterfaces, "0.0.0.0,::", value));
+	iniFreeStringList(global->interfaces);
+	global->interfaces=iniGetStringList(list,section,strInterfaces, ",", "0.0.0.0,::");
 	global->outgoing4.s_addr=iniGetIpAddress(list,section,strOutgoing4,0);
 	global->outgoing6=iniGetIp6Address(list,section,strOutgoing6,wildcard6);
 	global->log_level=iniGetLogLevel(list,section,strLogLevel,DEFAULT_LOG_LEVEL);
@@ -261,6 +261,7 @@ void sbbs_read_ini(
 	str_list_t	list;
 	global_startup_t global_buf;
 	struct in6_addr	wildcard6 = {0};
+	char		*global_interfaces;
 
 	if(global==NULL) {
 		memset(&global_buf,0,sizeof(global_buf));
@@ -279,6 +280,8 @@ void sbbs_read_ini(
 		if(services!=NULL)	SAFECOPY(services->ctrl_dir,global->ctrl_dir);
 	}
 
+	global_interfaces = strListCombine(global->interfaces, NULL, 16384, ",");
+
 	/***********************************************************************/
 	section = "BBS";
 
@@ -294,18 +297,21 @@ void sbbs_read_ini(
 
 		bbs->telnet_port
 			=iniGetShortInt(list,section,"TelnetPort",IPPORT_TELNET);
-		SAFECOPY(bbs->telnet_interfaces,
-			iniGetString(list,section,"TelnetInterface",global->interfaces,value));
+		iniFreeStringList(bbs->telnet_interfaces);
+		bbs->telnet_interfaces
+			=iniGetStringList(list,section,"TelnetInterface",",",global_interfaces);
 
 		bbs->rlogin_port
 			=iniGetShortInt(list,section,"RLoginPort",513);
-		SAFECOPY(bbs->rlogin_interfaces,
-			iniGetString(list,section,"RLoginInterface",global->interfaces,value));
+		iniFreeStringList(bbs->rlogin_interfaces);
+		bbs->rlogin_interfaces
+			=iniGetStringList(list,section,"RLoginInterface",",",global_interfaces);
 
 		bbs->ssh_port
 			=iniGetShortInt(list,section,"SSHPort",22);
-		SAFECOPY(bbs->ssh_interfaces,
-			iniGetString(list,section,"SSHInterface",global->interfaces,value));
+		iniFreeStringList(bbs->ssh_interfaces);
+		bbs->ssh_interfaces
+			=iniGetStringList(list,section,"SSHInterface",",",global_interfaces);
 
 		bbs->first_node
 			=iniGetShortInt(list,section,"FirstNode",1);
@@ -389,8 +395,9 @@ void sbbs_read_ini(
 			=iniGetIp6Address(list,section,strOutgoing6,global->outgoing6);
 		ftp->port
 			=iniGetShortInt(list,section,strPort,IPPORT_FTP);
-		SAFECOPY(ftp->interfaces,
-			iniGetString(list,section,strInterfaces,global->interfaces,value));
+		iniFreeStringList(ftp->interfaces);
+		ftp->interfaces
+			=iniGetStringList(list,section,strInterfaces,",",global_interfaces);
 		ftp->max_clients
 			=iniGetShortInt(list,section,strMaxClients,FTP_DEFAULT_MAX_CLIENTS);
 		ftp->max_inactivity
@@ -460,8 +467,9 @@ void sbbs_read_ini(
 
 	if(mail!=NULL) {
 
-		SAFECOPY(mail->interfaces,
-			iniGetString(list,section,"SMTPInterface",global->interfaces,value));
+		iniFreeStringList(mail->interfaces);
+		mail->interfaces
+			=iniGetStringList(list,section,"SMTPInterface",",",global_interfaces);
 		mail->outgoing4.s_addr
 			=iniGetIpAddress(list,section,strOutgoing4,global->outgoing4.s_addr);
 		mail->outgoing6
@@ -470,8 +478,9 @@ void sbbs_read_ini(
 			=iniGetShortInt(list,section,"SMTPPort",IPPORT_SMTP);
 		mail->submission_port
 			=iniGetShortInt(list,section,"SubmissionPort",IPPORT_SUBMISSION);
-		SAFECOPY(mail->pop3_interfaces,
-			iniGetString(list,section,"POP3Interface",global->interfaces,value));
+		iniFreeStringList(mail->pop3_interfaces);
+		mail->pop3_interfaces
+			=iniGetStringList(list,section,"POP3Interface",",",global_interfaces);
 		mail->pop3_port
 			=iniGetShortInt(list,section,"POP3Port",IPPORT_POP3);
 		mail->relay_port
@@ -556,8 +565,9 @@ void sbbs_read_ini(
 
 	if(services!=NULL) {
 
-		SAFECOPY(services->interfaces,
-			iniGetString(list,section,strInterfaces,global->interfaces,value));
+		iniFreeStringList(services->interfaces);
+		services->interfaces
+			=iniGetStringList(list,section,strInterfaces,",",global_interfaces);
 		services->outgoing4.s_addr
 			=iniGetIpAddress(list,section,strOutgoing4,global->outgoing4.s_addr);
 		services->outgoing6
@@ -602,10 +612,12 @@ void sbbs_read_ini(
 
 	if(web!=NULL) {
 
-		SAFECOPY(web->interfaces,
-			iniGetString(list,section,strInterfaces,global->interfaces,value));
-		SAFECOPY(web->tls_interfaces,
-			iniGetString(list,section,"TLSInterface",global->interfaces,value));
+		iniFreeStringList(web->interfaces);
+		web->interfaces
+			=iniGetStringList(list,section,strInterfaces,",",global_interfaces);
+		iniFreeStringList(web->tls_interfaces);
+		web->tls_interfaces
+			=iniGetStringList(list,section,"TLSInterface",",",global_interfaces);
 		web->outgoing4.s_addr
 			=iniGetIpAddress(list,section,strOutgoing4,global->outgoing4.s_addr);
 		web->outgoing6
@@ -689,6 +701,7 @@ void sbbs_read_ini(
 		web->login_attempt_filter_threshold=iniGetInteger(list,section,strLoginAttemptFilterThreshold,global->login_attempt_filter_threshold);
 	}
 
+	free(global_interfaces);
 	iniFreeStringList(list);
 }
 
@@ -741,7 +754,7 @@ BOOL sbbs_write_ini(
 		iniSetShortInt(lp,section,strSemFileCheckFrequency,global->sem_chk_freq,&style);
 		iniSetIpAddress(lp,section,strOutgoing4,global->outgoing4.s_addr,&style);
 		iniSetIp6Address(lp,section,strOutgoing6,global->outgoing6,&style);
-		iniSetString(lp, section, strInterfaces, global->interfaces, &style);
+		iniSetStringList(lp, section, strInterfaces, ",", global->interfaces, &style);
 		iniSetLogLevel(lp,section,strLogLevel,global->log_level,&style);
 		iniSetInteger(lp,section,strBindRetryCount,global->bind_retry_count,&style);
 		iniSetInteger(lp,section,strBindRetryDelay,global->bind_retry_delay,&style);
@@ -763,24 +776,24 @@ BOOL sbbs_write_ini(
 		if(!iniSetBool(lp,section,strAutoStart,run_bbs,&style))
 			break;
 
-		if(strcmp(bbs->telnet_interfaces, global->interfaces)==0)
+		if(strListCmp(bbs->telnet_interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,"TelnetInterface");
-		else if(!iniSetString(lp,section,"TelnetInterface", bbs->telnet_interfaces, &style))
+		else if(!iniSetStringList(lp,section,"TelnetInterface", ",", bbs->telnet_interfaces, &style))
 			break;
 
 		if(!iniSetShortInt(lp,section,"TelnetPort",bbs->telnet_port,&style))
 			break;
 
-		if(strcmp(bbs->rlogin_interfaces, global->interfaces)==0)
+		if(strListCmp(bbs->rlogin_interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,"RLoginInterface");
-		else if(!iniSetString(lp,section,"RLoginInterface", bbs->rlogin_interfaces,&style))
+		else if(!iniSetStringList(lp,section,"RLoginInterface", ",", bbs->rlogin_interfaces,&style))
 			break;
 		if(!iniSetShortInt(lp,section,"RLoginPort",bbs->rlogin_port,&style))
 			break;
 
-		if(strcmp(bbs->ssh_interfaces, global->interfaces)==0)
+		if(strListCmp(bbs->ssh_interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,"SSHInterface");
-		else if(!iniSetString(lp,section,"SSHInterface", bbs->ssh_interfaces,&style))
+		else if(!iniSetStringList(lp,section,"SSHInterface", ",", bbs->ssh_interfaces,&style))
 			break;
 		if(!iniSetShortInt(lp,section,"SSHPort",bbs->ssh_port,&style))
 			break;
@@ -851,9 +864,9 @@ BOOL sbbs_write_ini(
 		if(!iniSetBool(lp,section,strAutoStart,run_ftp,&style))
 			break;
 
-		if(strcmp(ftp->interfaces, global->interfaces)==0)
+		if(strListCmp(ftp->interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,strInterfaces);
-		else if(!iniSetString(lp,section,strInterfaces,ftp->interfaces,&style))
+		else if(!iniSetStringList(lp,section,strInterfaces,",",ftp->interfaces,&style))
 			break;
 
 		if(ftp->outgoing4.s_addr == global->outgoing4.s_addr)
@@ -949,9 +962,9 @@ BOOL sbbs_write_ini(
 		if(!iniSetBool(lp,section,strAutoStart,run_mail,&style))
 			break;
 
-		if(strcmp(mail->interfaces, global->interfaces)==0)
+		if(strListCmp(mail->interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,strInterfaces);
-		else if(!iniSetString(lp,section,strInterfaces,mail->interfaces,&style))
+		else if(!iniSetStringList(lp,section,strInterfaces,",",mail->interfaces,&style))
 			break;
 
 		if(mail->outgoing4.s_addr == global->outgoing4.s_addr)
@@ -1063,9 +1076,9 @@ BOOL sbbs_write_ini(
 		if(!iniSetBool(lp,section,strAutoStart,run_services,&style))
 			break;
 
-		if(strcmp(services->interfaces, global->interfaces)==0)
+		if(strListCmp(services->interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,strInterfaces);
-		else if(!iniSetString(lp,section,strInterfaces,services->interfaces,&style))
+		else if(!iniSetStringList(lp,section,strInterfaces,",",services->interfaces,&style))
 			break;
 
 		if(services->outgoing4.s_addr == global->outgoing4.s_addr)
@@ -1129,14 +1142,14 @@ BOOL sbbs_write_ini(
 		if(!iniSetBool(lp,section,strAutoStart,run_web,&style))
 			break;
 
-		if(strcmp(web->interfaces, global->interfaces)==0)
+		if(strListCmp(web->interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,strInterfaces);
-		else if(!iniSetString(lp,section,strInterfaces,web->interfaces,&style))
+		else if(!iniSetStringList(lp,section,strInterfaces,",",web->interfaces,&style))
 			break;
 
-		if(strcmp(web->tls_interfaces, global->interfaces)==0)
+		if(strListCmp(web->tls_interfaces, global->interfaces)==0)
 			iniRemoveValue(lp,section,"TLSInterface");
-		else if(!iniSetString(lp,section,"TLSInterface",web->tls_interfaces,&style))
+		else if(!iniSetStringList(lp,section,"TLSInterface",",",web->tls_interfaces,&style))
 			break;
 
 		if(web->outgoing4.s_addr == global->outgoing4.s_addr)
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 45dcd7606defa10702c6b8147b3f1b0380d2c4ec..cccca20f945097114d79afb7b3cbeabd0a97b83b 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -84,7 +84,7 @@ typedef struct {
 	/* These are sysop-configurable */
 	uint32_t		interface_addr;
 	uint16_t		port;
-	char		interfaces[INI_MAX_VALUE_LEN];
+	str_list_t		interfaces;
 	struct in_addr		outgoing4;
 	struct in6_addr	outgoing6;
 	char			protocol[34];
@@ -1511,7 +1511,7 @@ static service_t* read_services_ini(const char* services_ini, service_t* service
 
 	/* Enumerate and parse each service configuration */
 	sec_list = iniGetSectionList(list,"");
-	default_interfaces = strdup(startup->interfaces);
+	default_interfaces = strListCombine(startup->interfaces, NULL, 16384, ",");
     for(i=0; sec_list!=NULL && sec_list[i]!=NULL; i++) {
 		if(!iniGetBool(list,sec_list[i],"Enabled",TRUE)) {
 			lprintf(LOG_WARNING,"Ignoring disabled service: %s",sec_list[i]);
@@ -1520,7 +1520,7 @@ static service_t* read_services_ini(const char* services_ini, service_t* service
 		memset(&serv,0,sizeof(service_t));
 		SAFECOPY(serv.protocol,iniGetString(list,sec_list[i],"Protocol",sec_list[i],prot));
 		serv.set = NULL;
-		SAFECOPY(serv.interfaces,iniGetString(list,sec_list[i],"Interface",default_interfaces,host));
+		serv.interfaces=iniGetStringList(list,sec_list[i],"Interface",",",default_interfaces);
 		serv.outgoing4.s_addr=iniGetIpAddress(list,sec_list[i],"OutgoingV4",startup->outgoing4.s_addr);
 		serv.outgoing6=iniGetIp6Address(list,sec_list[i],"OutgoingV6",startup->outgoing6);
 		serv.max_clients=iniGetInteger(list,sec_list[i],"MaxClients",max_clients);
@@ -1853,7 +1853,7 @@ void DLLCALL services_thread(void* arg)
 				cleanup(1);
 				return;
 			}
-			xpms_add_chararray_list(service[i].set, PF_UNSPEC, (service[i].options&SERVICE_OPT_UDP) ? SOCK_DGRAM : SOCK_STREAM
+			xpms_add_list(service[i].set, PF_UNSPEC, (service[i].options&SERVICE_OPT_UDP) ? SOCK_DGRAM : SOCK_STREAM
 					, IPPROTO_IP, service[i].interfaces, service[i].port, service[i].protocol
 					, (service[i].options&SERVICE_OPT_UDP) ? service_udp_sock_cb : open_socket_cb, startup->seteuid, &service[i]);
 			total_sockets += service[i].set->sock_count;
diff --git a/src/sbbs3/services.h b/src/sbbs3/services.h
index 2f659664150c6e48ff5ad834fb0c10f28b96868c..642073f62c311fd8c1fea72d69150bc3d30ee73d 100644
--- a/src/sbbs3/services.h
+++ b/src/sbbs3/services.h
@@ -45,7 +45,7 @@ typedef struct {
 	DWORD	size;				/* sizeof(bbs_struct_t) */
 	struct in_addr outgoing4;
 	struct in6_addr	outgoing6;
-	char		interfaces[INI_MAX_VALUE_LEN];
+	str_list_t		interfaces;
     DWORD	options;			/* See BBS_OPT definitions */
 	WORD	sem_chk_freq;			/* semaphore file checking frequency (in seconds) */
 
diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h
index 6f447cbb02cbc4ef0d1c7f8c40ea873089a1e4e7..5be96476f241f07f17a397baa3d4fdabab59205c 100644
--- a/src/sbbs3/startup.h
+++ b/src/sbbs3/startup.h
@@ -66,7 +66,7 @@ typedef struct {
 	ushort	sem_chk_freq;
 	struct in_addr		outgoing4;
 	struct in6_addr	outgoing6;
-	char		interfaces[INI_MAX_VALUE_LEN];
+	str_list_t		interfaces;
 	int		log_level;
 	js_startup_t js;
 	uint	bind_retry_count;		/* Number of times to retry bind() calls */
@@ -91,10 +91,10 @@ typedef struct {
 	WORD	sem_chk_freq;		/* semaphore file checking frequency (in seconds) */
 	struct in_addr outgoing4;
 	struct in6_addr	outgoing6;
-    char	telnet_interfaces[INI_MAX_VALUE_LEN];
+    str_list_t	telnet_interfaces;
     uint32_t	options;			/* See BBS_OPT definitions */
-    char	rlogin_interfaces[INI_MAX_VALUE_LEN];
-    char	ssh_interfaces[INI_MAX_VALUE_LEN];
+    str_list_t	rlogin_interfaces;
+    str_list_t	ssh_interfaces;
     RingBuf** node_spybuf;			/* Spy output buffer (each node)	*/
     RingBuf** node_inbuf;			/* User input buffer (each node)	*/
     sem_t**	node_spysem;			/* Spy output semaphore (each node)	*/
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 77c405500be634f3bb9dd4edd5a9aa0f732d9fb2..254a381bdbe614fdce8cfb59fff4286d3a0c48ee 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -5968,9 +5968,9 @@ void DLLCALL web_server(void* arg)
 		/*
 		 * Add interfaces
 		 */
-		xpms_add_chararray_list(ws_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->port, "Web Server", open_socket, startup->seteuid, NULL);
+		xpms_add_list(ws_set, PF_UNSPEC, SOCK_STREAM, 0, startup->interfaces, startup->port, "Web Server", open_socket, startup->seteuid, NULL);
 		if(do_cryptInit())
-			xpms_add_chararray_list(ws_set, PF_UNSPEC, SOCK_STREAM, 0, startup->tls_interfaces, startup->tls_port, "Secure Web Server", open_socket, startup->seteuid, "TLS");
+			xpms_add_list(ws_set, PF_UNSPEC, SOCK_STREAM, 0, startup->tls_interfaces, startup->tls_port, "Secure Web Server", open_socket, startup->seteuid, "TLS");
 
 		listInit(&log_list,/* flags */ LINK_LIST_MUTEX|LINK_LIST_SEMAPHORE);
 		if(startup->options&WEB_OPT_HTTP_LOGGING) {
diff --git a/src/sbbs3/websrvr.h b/src/sbbs3/websrvr.h
index c0a1a8ab16a25d0eabc513a53564e89cbd2a977c..7d38fffddb48d1fab17393993438bd219cf5ce2d 100644
--- a/src/sbbs3/websrvr.h
+++ b/src/sbbs3/websrvr.h
@@ -56,8 +56,8 @@ typedef struct {
 	WORD		tls_port;
 	struct in_addr outgoing4;
 	struct in6_addr	outgoing6;
-    char	interfaces[INI_MAX_VALUE_LEN];
-    char	tls_interfaces[INI_MAX_VALUE_LEN];
+    str_list_t	interfaces;
+    str_list_t	tls_interfaces;
 	
 	void*	cbdata;				/* Private data passed to callbacks */