diff --git a/src/hash/crc16.c b/src/hash/crc16.c
index 5576391e4c6985238cc8a5b1bf0d26e1657b72df..52a759ce68b3dd6c8e6cfb7a6a701ce8fa3cb48b 100644
--- a/src/hash/crc16.c
+++ b/src/hash/crc16.c
@@ -73,7 +73,7 @@ uint16_t crc16tbl[] = {
 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
 };
 
-uint16_t crc16(char* data, unsigned long len)
+uint16_t crc16(const char* data, unsigned long len)
 {
 	uint16_t crc = 0;
 	unsigned long l;
diff --git a/src/hash/crc16.h b/src/hash/crc16.h
index 364599cffcfd77a128e16df250018475fbad48bf..b21695dc3684b4a75f158a0d13ed3d124d3c5bf8 100644
--- a/src/hash/crc16.h
+++ b/src/hash/crc16.h
@@ -46,7 +46,7 @@ extern "C" {
 
 extern uint16_t crc16tbl[];
 
-uint16_t crc16(char* data, unsigned long len);
+uint16_t crc16(const char* data, unsigned long len);
 
 #ifdef __cplusplus
 }
diff --git a/src/hash/crc32.c b/src/hash/crc32.c
index 1b472b2a98c7c09a8421495b7fc0f7ef4cfd04e7..43d7c0d22d96437a7cb94ddc002bf52b111bfb49 100644
--- a/src/hash/crc32.c
+++ b/src/hash/crc32.c
@@ -78,7 +78,7 @@ int32_t crc32tbl[]={	/* CRC polynomial 0xedb88320 */
 /* Pass len of 0 to auto-determine ASCIIZ string length						*/
 /* or non-zero for arbitrary binary data									*/
 /****************************************************************************/
-uint32_t crc32i(uint32_t crc, char *buf, unsigned long len)
+uint32_t crc32i(uint32_t crc, const char *buf, unsigned long len)
 {
 	unsigned long l;
 
diff --git a/src/hash/crc32.h b/src/hash/crc32.h
index ee1597400e56d7995509c990b03487c2088b18cd..e00519aa290856bedbce73d16e4837c676709ec6 100644
--- a/src/hash/crc32.h
+++ b/src/hash/crc32.h
@@ -47,7 +47,7 @@ extern "C" {
 
 extern int32_t crc32tbl[];
 
-uint32_t crc32i(uint32_t crc, char* buf, unsigned long len);
+uint32_t crc32i(uint32_t crc, const char* buf, unsigned long len);
 uint32_t fcrc32(FILE* fp, unsigned long len);
 
 #ifdef __cplusplus
diff --git a/src/sbbs3/addfiles.c b/src/sbbs3/addfiles.c
index 9a02b5f3135f512a8b4c3044b2dd113d9da516be..c98c2c7097ada4640952809421bce1f0585b928b 100644
--- a/src/sbbs3/addfiles.c
+++ b/src/sbbs3/addfiles.c
@@ -66,7 +66,7 @@ char lib[LEN_GSNAME+1];
 /****************************************************************************/
 /* This is needed by load_cfg.c												*/
 /****************************************************************************/
-int lprintf(int level, char *fmat, ...)
+int lprintf(int level, const char *fmat, ...)
 {
 	va_list argptr;
 	char sbuf[512];
diff --git a/src/sbbs3/ansiterm.cpp b/src/sbbs3/ansiterm.cpp
index 0073c68e4fea1985672d4f3d1e06111c3fe96218..5e776200ce4171b580ad59325bdbccbbd05f0eca 100644
--- a/src/sbbs3/ansiterm.cpp
+++ b/src/sbbs3/ansiterm.cpp
@@ -44,7 +44,7 @@
 /* high intensity colors, or background/forground cobinations don't work.   */
 /* A call to attr is more appropriate, being it is intelligent				*/
 /****************************************************************************/
-char *sbbs_t::ansi(int atr)
+const char *sbbs_t::ansi(int atr)
 {
 
 	switch(atr) {
diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp
index c2a27fb2cb7495cd0239a9b850734ad96d7e48cf..3620750b925a58f7af06084b23cdc40bcdd55f1e 100644
--- a/src/sbbs3/atcodes.cpp
+++ b/src/sbbs3/atcodes.cpp
@@ -48,13 +48,14 @@
 /****************************************************************************/
 /* Returns 0 if invalid @ code. Returns length of @ code if valid.          */
 /****************************************************************************/
-int sbbs_t::show_atcode(char *instr)
+int sbbs_t::show_atcode(const char *instr)
 {
-	char	str[128],str2[128],*p,*tp,*sp;
+	char	str[128],str2[128],*tp,*sp,*p;
     int     len;
 	int		disp_len;
 	bool	padded_left=false;
 	bool	padded_right=false;
+	const char *cp;
 
 	sprintf(str,"%.80s",instr);
 	tp=strchr(str+1,'@');
@@ -78,21 +79,21 @@ int sbbs_t::show_atcode(char *instr)
 		*p=0;
 	}
 
-	p=atcode(sp,str2,sizeof(str2));
-	if(p==NULL)
+	cp=atcode(sp,str2,sizeof(str2));
+	if(cp==NULL)
 		return(0);
 
 	if(padded_left)
-		rprintf("%-*.*s",disp_len,disp_len,p);
+		rprintf("%-*.*s",disp_len,disp_len,cp);
 	else if(padded_right)
-		rprintf("%*.*s",disp_len,disp_len,p);
+		rprintf("%*.*s",disp_len,disp_len,cp);
 	else
-		rputs(p);
+		rputs(cp);
 
 	return(len);
 }
 
-char* sbbs_t::atcode(char* sp, char* str, size_t maxlen)
+const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen)
 {
 	char*	tp;
 	uint	i;
diff --git a/src/sbbs3/chk_ar.cpp b/src/sbbs3/chk_ar.cpp
index 92d552982cff9752b335dcbc837d687c2df6c33b..67c9c780dfd47dada3d9de675d3c836d7de5e89b 100644
--- a/src/sbbs3/chk_ar.cpp
+++ b/src/sbbs3/chk_ar.cpp
@@ -37,7 +37,7 @@
 
 #include "sbbs.h"
 
-bool sbbs_t::ar_exp(uchar **ptrptr, user_t* user)
+bool sbbs_t::ar_exp(const uchar **ptrptr, user_t* user)
 {
 	bool	result,_not,_or,equal;
 	uint	i,n,artype,age;
@@ -582,9 +582,9 @@ bool sbbs_t::ar_exp(uchar **ptrptr, user_t* user)
 	return(result);
 }
 
-bool sbbs_t::chk_ar(uchar *ar, user_t* user)
+bool sbbs_t::chk_ar(const uchar *ar, user_t* user)
 {
-	uchar *p;
+	const uchar *p;
 
 	if(ar==NULL)
 		return(true);
diff --git a/src/sbbs3/client.h b/src/sbbs3/client.h
index 10594ccab785219fa83235e7aaa0542df4263a1e..0167556d2dfc4d10cb245c106254da0a25e92617 100644
--- a/src/sbbs3/client.h
+++ b/src/sbbs3/client.h
@@ -49,7 +49,7 @@ typedef struct {
 	WORD		port;		/* TCP port number */
 	time_t		time;		/* connect time */
 	const char*	protocol;	/* protocol description */
-	char*		user;		/* user name */
+	const char*	user;		/* user name */
 	char		pad[32];	/* padding for future expansion */
 } client_t;
 
diff --git a/src/sbbs3/con_hi.cpp b/src/sbbs3/con_hi.cpp
index 5f7453eabebb14ee0dd1d853011702bb2383c105..f1110f8e92d0f7187c7ce6a4a189657a9b1f2a0f 100644
--- a/src/sbbs3/con_hi.cpp
+++ b/src/sbbs3/con_hi.cpp
@@ -69,7 +69,7 @@ void sbbs_t::redrwstr(char *strin, int i, int l, long mode)
 }
 
 
-int sbbs_t::uselect(int add, uint n, char *title, char *item, uchar *ar)
+int sbbs_t::uselect(int add, uint n, const char *title, const char *item, const uchar *ar)
 {
 	char	str[128];
 	int		i;
diff --git a/src/sbbs3/con_out.cpp b/src/sbbs3/con_out.cpp
index 5339a8b4bc01c3095df3d4ca725c0d36f273380a..6cbefc7ed97bba99a2196c4e7e12eee4d76b7c13 100644
--- a/src/sbbs3/con_out.cpp
+++ b/src/sbbs3/con_out.cpp
@@ -71,7 +71,7 @@ char* DLLCALL ascii_str(uchar* str)
 /* Outputs a NULL terminated string locally and remotely (if applicable)    */
 /* Handles ctrl-a characters                                                */
 /****************************************************************************/
-int sbbs_t::bputs(char *str)
+int sbbs_t::bputs(const char *str)
 {
 	int i;
     ulong l=0;
@@ -115,7 +115,7 @@ int sbbs_t::bputs(char *str)
 /* Does not expand ctrl-a characters (raw)                                  */
 /* Max length of str is 64 kbytes                                           */
 /****************************************************************************/
-int sbbs_t::rputs(char *str)
+int sbbs_t::rputs(const char *str)
 {
     ulong l=0;
 
@@ -130,7 +130,7 @@ int sbbs_t::rputs(char *str)
 /****************************************************************************/
 /* Performs printf() using bbs bputs function								*/
 /****************************************************************************/
-int sbbs_t::bprintf(char *fmt, ...)
+int sbbs_t::bprintf(const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[4096];
@@ -147,7 +147,7 @@ int sbbs_t::bprintf(char *fmt, ...)
 /****************************************************************************/
 /* Performs printf() using bbs rputs function								*/
 /****************************************************************************/
-int sbbs_t::rprintf(char *fmt, ...)
+int sbbs_t::rprintf(const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[4096];
diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp
index 08060200edb5858afdc70cc1b50605501da02a3d..55b127a826053f035b4ec2176090f730d56990a2 100644
--- a/src/sbbs3/ctrl/MainFormUnit.cpp
+++ b/src/sbbs3/ctrl/MainFormUnit.cpp
@@ -254,7 +254,7 @@ static void client_on(void* p, BOOL on, int sock, client_t* client, BOOL update)
     ReleaseMutex(ClientForm->ListMutex);
 }
 
-static int bbs_lputs(void* p, int level, char *str)
+static int bbs_lputs(void* p, int level, const char *str)
 {
 	static HANDLE mutex;
 
@@ -272,7 +272,7 @@ static int bbs_lputs(void* p, int level, char *str)
     return(Line.Length());
 }
 
-static void bbs_status(void* p, char *str)
+static void bbs_status(void* p, const char *str)
 {
 	static HANDLE mutex;
 
@@ -341,7 +341,7 @@ static void bbs_start(void)
     Application->ProcessMessages();
 }
 
-static int event_lputs(int level, char *str)
+static int event_lputs(int level, const char *str)
 {
 	static HANDLE mutex;
 
@@ -359,7 +359,7 @@ static int event_lputs(int level, char *str)
     return(Line.Length());
 }
 
-static int service_lputs(void* p, int level, char *str)
+static int service_lputs(void* p, int level, const char *str)
 {
 	static HANDLE mutex;
 
@@ -377,7 +377,7 @@ static int service_lputs(void* p, int level, char *str)
     return(Line.Length());
 }
 
-static void services_status(void* p, char *str)
+static void services_status(void* p, const char *str)
 {
 	static HANDLE mutex;
 
@@ -411,7 +411,7 @@ static void services_clients(void* p, int clients)
 {
 }
 
-static int mail_lputs(void* p, int level, char *str)
+static int mail_lputs(void* p, int level, const char *str)
 {
 	static HANDLE mutex;
 	static FILE* LogStream;
@@ -463,7 +463,7 @@ static int mail_lputs(void* p, int level, char *str)
     return(Line.Length());
 }
 
-static void mail_status(void* p, char *str)
+static void mail_status(void* p, const char *str)
 {
 	static HANDLE mutex;
 
@@ -527,7 +527,7 @@ static void mail_start(void)
     Application->ProcessMessages();
 }
 
-static int ftp_lputs(void* p, int level, char *str)
+static int ftp_lputs(void* p, int level, const char *str)
 {
 	static HANDLE mutex;
 	static FILE* LogStream;
@@ -580,7 +580,7 @@ static int ftp_lputs(void* p, int level, char *str)
     return(Line.Length());
 }
 
-static void ftp_status(void* p, char *str)
+static void ftp_status(void* p, const char *str)
 {
 	static HANDLE mutex;
 
@@ -644,7 +644,7 @@ static void ftp_start(void)
     Application->ProcessMessages();
 }
 //---------------------------------------------------------------------------
-static int web_lputs(void* p, int level, char *str)
+static int web_lputs(void* p, int level, const char *str)
 {
 	static HANDLE mutex;
 	static FILE* LogStream;
@@ -697,7 +697,7 @@ static int web_lputs(void* p, int level, char *str)
     return(Line.Length());
 }
 
-static void web_status(void* p, char *str)
+static void web_status(void* p, const char *str)
 {
 	static HANDLE mutex;
 
diff --git a/src/sbbs3/dat_rec.c b/src/sbbs3/dat_rec.c
index d5c8b3ef6bb924f4b0990e279418d35a709af675..5ab06c8414e5fc2b231e1c60c683156a58f283cb 100644
--- a/src/sbbs3/dat_rec.c
+++ b/src/sbbs3/dat_rec.c
@@ -41,7 +41,7 @@
 /* Places into 'strout' CR or ETX terminated string starting at             */
 /* 'start' and ending at 'start'+'length' or terminator from 'strin'        */
 /****************************************************************************/
-void DLLCALL getrec(char *strin,int start,int length,char *strout)
+void DLLCALL getrec(const char *strin,int start,int length,char *strout)
 {
     int i=0,stop;
 
diff --git a/src/sbbs3/dat_rec.h b/src/sbbs3/dat_rec.h
index 0f118c054af1e1b29786dd1f1e5484dc084dbfb1..1b2975c2e2996ffad593b7c89636ee7158a72b66 100644
--- a/src/sbbs3/dat_rec.h
+++ b/src/sbbs3/dat_rec.h
@@ -65,7 +65,7 @@
 extern "C" {
 #endif
 
-DLLEXPORT void	DLLCALL getrec(char *instr,int start,int length,char *outstr); /* Retrieve a record from a string */
+DLLEXPORT void	DLLCALL getrec(const char *instr,int start,int length,char *outstr); /* Retrieve a record from a string */
 DLLEXPORT void	DLLCALL putrec(char *outstr,int start,int length,char *instr); /* Place a record into a string */
 
 #ifdef __cplusplus
diff --git a/src/sbbs3/delfiles.c b/src/sbbs3/delfiles.c
index 8719132b682a8776fc8823ccc57bfc663b6b16b9..c75622d5b7c208c3d0b1a42d289104440193b227 100644
--- a/src/sbbs3/delfiles.c
+++ b/src/sbbs3/delfiles.c
@@ -73,7 +73,7 @@ long lputs(char *str)
 /* Performs printf() through local assembly routines                        */
 /* Called from everywhere                                                   */
 /****************************************************************************/
-int lprintf(char *fmat, ...)
+int lprintf(const char *fmat, ...)
 {
 	va_list argptr;
 	char sbuf[256];
diff --git a/src/sbbs3/download.cpp b/src/sbbs3/download.cpp
index 5b484617df66dcd0acb28553c3e339e881b61380..83363885c11d6394bfd37e72f749f713df67be65 100644
--- a/src/sbbs3/download.cpp
+++ b/src/sbbs3/download.cpp
@@ -171,7 +171,7 @@ void sbbs_t::notdownloaded(ulong size, time_t start, time_t end)
 	}
 }
 
-char* sbbs_t::protcmdline(prot_t* prot, enum XFER_TYPE type)
+const char* sbbs_t::protcmdline(prot_t* prot, enum XFER_TYPE type)
 {
 	switch(type) {
 		case XFER_UPLOAD:
diff --git a/src/sbbs3/dupefind.c b/src/sbbs3/dupefind.c
index 3d41d251b59f27bc4cdf043ea80f0c1bfb817c0a..620955ebfe7eda400261ca42ccd65bd33900a918 100644
--- a/src/sbbs3/dupefind.c
+++ b/src/sbbs3/dupefind.c
@@ -31,7 +31,7 @@ return(fputs(tmp,stderr));
 /* Performs printf() through local assembly routines                        */
 /* Called from everywhere                                                   */
 /****************************************************************************/
-int lprintf(char *fmat, ...)
+int lprintf(const char *fmat, ...)
 {
 	va_list argptr;
 	char sbuf[256];
diff --git a/src/sbbs3/email.cpp b/src/sbbs3/email.cpp
index 57c6a3e6c352a23975c3088b1f3684647dc07785..b51c37e3ff309412d2f231f5796577480723a462 100644
--- a/src/sbbs3/email.cpp
+++ b/src/sbbs3/email.cpp
@@ -43,7 +43,7 @@
 /* of message.                                                              */
 /* Called from functions main_sec, newuser, readmail and scanposts			*/
 /****************************************************************************/
-bool sbbs_t::email(int usernumber, char *top, char *subj, long mode)
+bool sbbs_t::email(int usernumber, const char *top, const char *subj, long mode)
 {
 	char	str[256],str2[256],msgpath[256],title[LEN_TITLE+1],ch
 			,buf[SDT_BLOCK_LEN];
diff --git a/src/sbbs3/execnet.cpp b/src/sbbs3/execnet.cpp
index a32af9ba40a0a0824caead72095b74d5f94b55da..0c19b3b2b7d9d88d670e46cd5fe8d6564782391c 100644
--- a/src/sbbs3/execnet.cpp
+++ b/src/sbbs3/execnet.cpp
@@ -450,7 +450,7 @@ int sbbs_t::exec_net(csi_t* csi)
 }
 
 /* FTP Command/Response function */
-bool sbbs_t::ftp_cmd(csi_t* csi, SOCKET sock, char* cmdsrc, char* rsp)
+bool sbbs_t::ftp_cmd(csi_t* csi, SOCKET sock, const char* cmdsrc, char* rsp)
 {
 	char	cmd[512];
 	int		len;
diff --git a/src/sbbs3/fido.cpp b/src/sbbs3/fido.cpp
index 257edc5f5577a3f6b03b661f4981651a13bac4b5..b366f88a589d67ee93d19cd8adc3419349d398e1 100644
--- a/src/sbbs3/fido.cpp
+++ b/src/sbbs3/fido.cpp
@@ -96,7 +96,7 @@ bool sbbs_t::lookup_netuser(char *into)
 /****************************************************************************/
 /* Send FidoNet/QWK/Internet NetMail from BBS								*/
 /****************************************************************************/
-bool sbbs_t::netmail(char *into, char *title, long mode)
+bool sbbs_t::netmail(const char *into, const char *title, long mode)
 {
 	char	str[256],subj[128],to[256],fname[128],*buf,*p,ch;
 	char 	tmp[512];
diff --git a/src/sbbs3/file.cpp b/src/sbbs3/file.cpp
index 62d9f037031dab437857ffa25f5d3e7e0e5b5b68..7f75af03c3c596a86c0437866694c6b047f866dc 100644
--- a/src/sbbs3/file.cpp
+++ b/src/sbbs3/file.cpp
@@ -239,7 +239,7 @@ char * sbbs_t::getfilespec(char *str)
 /****************************************************************************/
 /* Checks to see if filename matches filespec. Returns 1 if yes, 0 if no    */
 /****************************************************************************/
-extern "C" BOOL filematch(char *filename, char *filespec)
+extern "C" BOOL filematch(const char *filename, const char *filespec)
 {
     char c;
 
diff --git a/src/sbbs3/filedat.c b/src/sbbs3/filedat.c
index 13d70dbf950da8ba8e88b47ffe9d64058f2278c7..bf212ce5042f7192e07128142fefb193b482aecc 100644
--- a/src/sbbs3/filedat.c
+++ b/src/sbbs3/filedat.c
@@ -531,7 +531,7 @@ BOOL DLLCALL findfile(scfg_t* cfg, uint dirnum, char *filename)
 /****************************************************************************/
 /* Turns FILE.EXT into FILE    .EXT                                         */
 /****************************************************************************/
-char* DLLCALL padfname(char *filename, char *str)
+char* DLLCALL padfname(const char *filename, char *str)
 {
     int c,d;
 
@@ -558,7 +558,7 @@ char* DLLCALL padfname(char *filename, char *str)
 /****************************************************************************/
 /* Turns FILE    .EXT into FILE.EXT                                         */
 /****************************************************************************/
-char* DLLCALL unpadfname(char *filename, char *str)
+char* DLLCALL unpadfname(const char *filename, char *str)
 {
     int c,d;
 
diff --git a/src/sbbs3/filelist.c b/src/sbbs3/filelist.c
index 9bb7d77364f0a53fdc7e39f1097e948b56515527..0ce732474d5f0fb67861563b8626f327b114f3c5 100644
--- a/src/sbbs3/filelist.c
+++ b/src/sbbs3/filelist.c
@@ -49,7 +49,7 @@ char *crlf="\r\n";
 
 /****************************************************************************/
 /****************************************************************************/
-int lprintf(int level, char *fmat, ...)
+int lprintf(int level, const char *fmat, ...)
 {
 	va_list argptr;
 	char sbuf[256];
diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index 1b13b4b58dea8ebbcb041c7ed88774f0efe1ec64..d740f231dd587870c5f8b7d5f18ee15621059a0f 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -126,7 +126,7 @@ BOOL dir_op(scfg_t* cfg, user_t* user, uint dirnum)
 		|| (cfg->dir[dirnum]->op_ar[0] && chk_ar(cfg,cfg->dir[dirnum]->op_ar,user)));
 }
 
-static int lprintf(int level, char *fmt, ...)
+static int lprintf(int level, const char *fmt, ...)
 {
 	int		result;
 	va_list argptr;
diff --git a/src/sbbs3/ftpsrvr.h b/src/sbbs3/ftpsrvr.h
index dcfff76cb4703317511152b9990cf120141cfb56..24d072e1fd481b0bc2ecfe32d57f118c049680ee 100644
--- a/src/sbbs3/ftpsrvr.h
+++ b/src/sbbs3/ftpsrvr.h
@@ -57,8 +57,8 @@ typedef struct {
 	void*	cbdata;				/* Private data passed to callbacks */ 
 
 	/* Callbacks (NULL if unused) */
-	int 	(*lputs)(void*, int, char*);
-	void	(*status)(void*, char*);
+	int 	(*lputs)(void*, int, const char*);
+	void	(*status)(void*, const char*);
     void	(*started)(void*);
 	void	(*recycle)(void*);
     void	(*terminated)(void*, int code);
diff --git a/src/sbbs3/getkey.cpp b/src/sbbs3/getkey.cpp
index 8eef58b4391079aaf7d0dd22f156ca9666e610d8..8d9294fdec5a7c164b46ab564d132fe91357ad17 100644
--- a/src/sbbs3/getkey.cpp
+++ b/src/sbbs3/getkey.cpp
@@ -299,7 +299,7 @@ char sbbs_t::getkey(long mode)
 /****************************************************************************/
 /* Outputs a string highlighting characters preceeded by a tilde            */
 /****************************************************************************/
-void sbbs_t::mnemonics(char *str)
+void sbbs_t::mnemonics(const char *str)
 {
     char *ctrl_a_codes;
     long l;
@@ -351,7 +351,7 @@ void sbbs_t::mnemonics(char *str)
 /* Returns 1 for Y or 0 for N                                               */
 /* Called from quite a few places                                           */
 /****************************************************************************/
-bool sbbs_t::yesno(char *str)
+bool sbbs_t::yesno(const char *str)
 {
     char ch;
 
@@ -389,7 +389,7 @@ bool sbbs_t::yesno(char *str)
 /* Returns 1 for N or 0 for Y                                               */
 /* Called from quite a few places                                           */
 /****************************************************************************/
-bool sbbs_t::noyes(char *str)
+bool sbbs_t::noyes(const char *str)
 {
     char ch;
 
@@ -428,7 +428,7 @@ bool sbbs_t::noyes(char *str)
 /* it is echoed (upper case) and is the return value.                       */
 /* Called from quite a few functions                                        */
 /****************************************************************************/
-long sbbs_t::getkeys(char *keys, ulong max)
+long sbbs_t::getkeys(const char *keys, ulong max)
 {
 	char	str[81];
 	uchar	ch,n=0,c=0;
diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index 61053af6fd340aecdeb674c8262e53785646f35f..266941eb44c2080a01646f6e25cd4a6b6573e51d 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -246,8 +246,8 @@ enum {
 
 static JSBool js_bbs_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 {
-	char*		p=NULL;
-	char*		nulstr="";
+	const char*	p=NULL;
+	const char*	nulstr="";
 	ulong		val=0;
     jsint       tiny;
 	sbbs_t*		sbbs;
@@ -1263,6 +1263,7 @@ js_atcode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	int		disp_len;
 	bool	padded_left=false;
 	bool	padded_right=false;
+	const char *cp;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
@@ -1285,17 +1286,17 @@ js_atcode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	if(disp_len >= sizeof(str))
 		disp_len=sizeof(str)-1;
 
-	p=sbbs->atcode(instr,str2,sizeof(str2));
+	cp=sbbs->atcode(instr,str2,sizeof(str2));
 	free(instr);
-	if(p==NULL)
+	if(cp==NULL)
 		*rval = JSVAL_NULL;
 	else {
 		if(padded_left)
-			sprintf(str,"%-*.*s",disp_len,disp_len,p);
+			sprintf(str,"%-*.*s",disp_len,disp_len,cp);
 		else if(padded_right)
-			sprintf(str,"%*.*s",disp_len,disp_len,p);
+			sprintf(str,"%*.*s",disp_len,disp_len,cp);
 		else
-			SAFECOPY(str,p);
+			SAFECOPY(str,cp);
 
 		JSString* js_str = JS_NewStringCopyZ(cx, str);
 		if(js_str==NULL)
@@ -1931,8 +1932,8 @@ js_email(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	int32		usernumber=1;
 	long		mode=WM_EMAIL;
-	char*		top="";
-	char*		subj="";
+	const char*	top="";
+	const char*	subj="";
 	JSString*	js_top=NULL;
 	JSString*	js_subj=NULL;
 	sbbs_t*		sbbs;
@@ -1963,7 +1964,7 @@ static JSBool
 js_netmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	long		mode=0;
-	char*		subj="";
+	const char*	subj="";
 	JSString*	js_to;
 	JSString*	js_subj=NULL;
 	sbbs_t*		sbbs;
@@ -2259,8 +2260,8 @@ static JSBool
 js_cmdstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*		p;
-	char*		fpath="";
-	char*		fspec="";
+	const char*	fpath="";
+	const char*	fspec="";
 	JSString*	js_str;
 	sbbs_t*		sbbs;
 
@@ -2318,7 +2319,7 @@ static JSBool
 js_listfiles(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	long		mode=0;
-	char*		fspec=ALLFILES;
+	const char*	fspec=ALLFILES;
 	char		buf[MAX_PATH+1];
 	uint		dirnum;
     JSString*	js_str;
@@ -2355,7 +2356,7 @@ static JSBool
 js_listfileinfo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	long		mode=FI_INFO;
-	char*		fspec=ALLFILES;
+	const char*	fspec=ALLFILES;
 	char		buf[MAX_PATH+1];
 	uint		dirnum;
     JSString*	js_str;
@@ -2526,7 +2527,7 @@ js_scandirs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_scanposts(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	char*		find="";
+	const char*	find="";
 	long		mode=0;
 	uint		subnum;
 	sbbs_t*		sbbs;
@@ -2558,7 +2559,7 @@ js_scanposts(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_listmsgs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	char*		find="";
+	const char*	find="";
 	long		mode=0;
 	long		start=0;
 	uint		subnum;
diff --git a/src/sbbs3/js_client.c b/src/sbbs3/js_client.c
index faac6a968d6449187d20fd4134908016a35f49c0..1cad0cd0097821ad5faaed7f37df1db0e209944a 100644
--- a/src/sbbs3/js_client.c
+++ b/src/sbbs3/js_client.c
@@ -70,7 +70,7 @@ static JSBool js_client_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 
 static JSBool js_client_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 {
-	char*		p=NULL;
+	const char*	p=NULL;
 	ulong		val=0;
     jsint       tiny;
 	JSString*	js_str;
diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index ce40e47d5c85e1dd9d21331e61d2ee28f149573d..e83efb9668f18b6c322bd239bdc6bf258856830d 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -159,7 +159,7 @@ int mfprintf(FILE* fp, char *fmt, ...)
 }
 
 /* Log printf */
-int lprintf(int level, char *fmt, ...)
+int lprintf(int level, const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[1024];
diff --git a/src/sbbs3/listfile.cpp b/src/sbbs3/listfile.cpp
index 2caf8758c8c7f1a67e3fba48ba82425691731cd6..1166c147e7e5309412c6c771a025b48945c950d2 100644
--- a/src/sbbs3/listfile.cpp
+++ b/src/sbbs3/listfile.cpp
@@ -48,7 +48,7 @@ int extdesclines(char *str);
 /* list the directory header.                                                */
 /* Returns -1 if the listing was aborted, otherwise total files listed		 */
 /*****************************************************************************/
-int sbbs_t::listfiles(uint dirnum, char *filespec, int tofile, long mode)
+int sbbs_t::listfiles(uint dirnum, const char *filespec, int tofile, long mode)
 {
 	char	str[256],hdr[256],c,d,letter='A',*p,*datbuf,ext[513];
 	char 	tmp[512];
@@ -372,8 +372,8 @@ int sbbs_t::listfiles(uint dirnum, char *filespec, int tofile, long mode)
 /* Prints one file's information on a single line                           */
 /* Return 1 if displayed, 0 otherwise										*/
 /****************************************************************************/
-bool sbbs_t::listfile(char *fname, char *buf, uint dirnum
-	, char *search, char letter, ulong datoffset)
+bool sbbs_t::listfile(const char *fname, const char *buf, uint dirnum
+	, const char *search, const char letter, ulong datoffset)
 {
 	char	str[256],ext[513]="",*ptr,*cr,*lf,exist=1;
 	char	path[MAX_PATH+1];
@@ -390,7 +390,7 @@ bool sbbs_t::listfile(char *fname, char *buf, uint dirnum
 	attr(cfg.color[clr_filename]);
 	bputs(fname);
 
-	getrec((char *)buf,F_ALTPATH,2,str);
+	getrec(buf,F_ALTPATH,2,str);
 	alt=(uchar)ahtoul(str);
 	sprintf(path,"%s%s",alt>0 && alt<=cfg.altpaths ? cfg.altpath[alt-1]:cfg.dir[dirnum]->path
 		,unpadfname(fname,tmp));
@@ -410,7 +410,7 @@ bool sbbs_t::listfile(char *fname, char *buf, uint dirnum
 		attr(cfg.color[clr_err]); }
 	else
 		attr(cfg.color[clr_filecdt]);
-	getrec((char *)buf,F_CDT,LEN_FCDT,str);
+	getrec(buf,F_CDT,LEN_FCDT,str);
 	cdt=atol(str);
 	if(useron.misc&BATCHFLAG) {
 		if(!cdt) {
@@ -435,7 +435,7 @@ bool sbbs_t::listfile(char *fname, char *buf, uint dirnum
 		outchar(' ');
 	else
 		outchar('-');
-	getrec((char *)buf,F_DESC,LEN_FDESC,str);
+	getrec(buf,F_DESC,LEN_FDESC,str);
 	attr(cfg.color[clr_filedesc]);
 
 #ifdef _WIN32
diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c
index 898b975a0d5472e2154dac0b5a4d3913b1f4b717..9fcb6f6d337ce7e07da3cc1fe8313b3c01c0a187 100644
--- a/src/sbbs3/load_cfg.c
+++ b/src/sbbs3/load_cfg.c
@@ -42,7 +42,7 @@ static void prep_cfg(scfg_t* cfg);
 static void free_attr_cfg(scfg_t* cfg);
 
 char *	readtext(long *line, FILE *stream);
-int 	lprintf(int level, char *fmt, ...);	/* log output */
+int 	lprintf(int level, const char *fmt, ...);	/* log output */
 
 /****************************************************************************/
 /* Initializes system and node configuration information and data variables */
diff --git a/src/sbbs3/logfile.cpp b/src/sbbs3/logfile.cpp
index 23e2ce85dac8ecd8a536c153a006e41ca8d61a1b..e486b3d870610892fa43d7f63b9ad4bbe60cf588 100644
--- a/src/sbbs3/logfile.cpp
+++ b/src/sbbs3/logfile.cpp
@@ -110,7 +110,7 @@ extern "C" BOOL DLLCALL spamlog(scfg_t* cfg, char* prot, char* action
 	return(TRUE);
 }
 
-void sbbs_t::logentry(char *code, char *entry)
+void sbbs_t::logentry(const char *code, const char *entry)
 {
 	char str[512];
 
@@ -138,7 +138,7 @@ void sbbs_t::log(char *str)
 		logcol+=strlen(str);
 }
 
-bool sbbs_t::syslog(char* code, char *entry)
+bool sbbs_t::syslog(const char* code, const char *entry)
 {		
 	char	fname[MAX_PATH+1];
 	char	str[128];
@@ -166,7 +166,7 @@ bool sbbs_t::syslog(char* code, char *entry)
 /****************************************************************************/
 /* Writes 'str' on it's own line in node.log								*/
 /****************************************************************************/
-void sbbs_t::logline(char *code, char *str)
+void sbbs_t::logline(const char *code, const char *str)
 {
 	if(strchr(str,'\n')==NULL) {	// Keep the console log pretty
 		if(online==ON_LOCAL)
@@ -342,7 +342,7 @@ void sbbs_t::errormsg(int line, const char *source, const char* action, const ch
 /*****************************************************************************/
 /* Error logging to NODE.LOG and DATA\ERROR.LOG function                     */
 /*****************************************************************************/
-void sbbs_t::errorlog(char *text)
+void sbbs_t::errorlog(const char *text)
 {
     char hdr[256],str[256],tmp2[256];
     int file;
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 3b709c9c9c78dc22382fdd3dde8ea09443ed8cad..5bb693d971f663bebcb130e9d6ce34a5ef46a0a5 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -114,7 +114,7 @@ typedef struct {
 	SOCKADDR_IN		client_addr;
 } smtp_t,pop3_t;
 
-static int lprintf(int level, char *fmt, ...)
+static int lprintf(int level, const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[1024];
diff --git a/src/sbbs3/mailsrvr.h b/src/sbbs3/mailsrvr.h
index 8652ad105d971f52db6ab790672ead599fbbd4b7..c34a3c735447453983313c1cf82b8b400d334883 100644
--- a/src/sbbs3/mailsrvr.h
+++ b/src/sbbs3/mailsrvr.h
@@ -62,8 +62,8 @@ typedef struct {
 	void*	cbdata;				/* Private data passed to callbacks */ 
 
 	/* Callbacks (NULL if unused) */
-	int 	(*lputs)(void*, int, char*);
-	void	(*status)(void*, char*);
+	int 	(*lputs)(void*, int, const char*);
+	void	(*status)(void*, const char*);
     void	(*started)(void*);
 	void	(*recycle)(void*);
     void	(*terminated)(void*, int code);
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index b209c25518ea06fb1a09dc7dff3cdeedf0931f92..086ab657fd8bc9055e2e39a9169db49a245663d2 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -108,7 +108,7 @@ extern "C" {
 
 static bbs_startup_t* startup=NULL;
 
-static void status(char* str)
+static void status(const char* str)
 {
 	if(startup!=NULL && startup->status!=NULL)
 	    startup->status(startup->cbdata,str);
@@ -147,7 +147,7 @@ static void thread_down()
 		startup->thread_up(startup->cbdata,FALSE,FALSE);
 }
 
-int lputs(int level, char* str)
+int lputs(int level, const char* str)
 {
 	if(startup==NULL || startup->lputs==NULL || str==NULL)
     	return(0);
@@ -155,7 +155,7 @@ int lputs(int level, char* str)
     return(startup->lputs(startup->cbdata,level,str));
 }
 
-int lprintf(int level, char *fmt, ...)
+int lprintf(int level, const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[1024];
@@ -167,7 +167,7 @@ int lprintf(int level, char *fmt, ...)
     return(lputs(level,sbuf));
 }
 
-int eprintf(int level, char *fmt, ...)
+int eprintf(int level, const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[1024];
@@ -2644,7 +2644,7 @@ void event_thread(void* arg)
 
 
 //****************************************************************************
-sbbs_t::sbbs_t(ushort node_num, DWORD addr, char* name, SOCKET sd,
+sbbs_t::sbbs_t(ushort node_num, DWORD addr, const char* name, SOCKET sd,
 			   scfg_t* global_cfg, char* global_text[], client_t* client_info)
 {
 	char	nodestr[32];
@@ -3274,7 +3274,7 @@ int sbbs_t::nopen(char *str, int access)
     return(file);
 }
 
-void sbbs_t::spymsg(char* msg)
+void sbbs_t::spymsg(const char* msg)
 {
 	char str[512];
 	struct in_addr addr;
@@ -3453,7 +3453,7 @@ int sbbs_t::outcom(uchar ch)
 	return(0);
 }
 
-void sbbs_t::putcom(char *str, int len)
+void sbbs_t::putcom(const char *str, int len)
 {
 	int i;
 
@@ -4138,7 +4138,7 @@ static void cleanup(int code)
 
 void DLLCALL bbs_thread(void* arg)
 {
-	char*			host_name;
+	const char*		host_name;
 	char*			identity;
 	char*			p;
     char			str[MAX_PATH+1];
diff --git a/src/sbbs3/makeuser.c b/src/sbbs3/makeuser.c
index 657dbcb1d66267eb3f88b41fb772d2e1c7bb634c..f09a043c93c8a1a55590855cadde5ed8f67cb6e0 100644
--- a/src/sbbs3/makeuser.c
+++ b/src/sbbs3/makeuser.c
@@ -42,7 +42,7 @@ scfg_t scfg;
 /****************************************************************************/
 /* This is needed by load_cfg.c												*/
 /****************************************************************************/
-int lprintf(int level, char *fmat, ...)
+int lprintf(int level, const char *fmat, ...)
 {
 	va_list argptr;
 	char sbuf[512];
diff --git a/src/sbbs3/netmail.cpp b/src/sbbs3/netmail.cpp
index 508476daf560d08930b67e8424345ca9c291e81c..157496796385f6b993a652a83343f40e7e5faa3d 100644
--- a/src/sbbs3/netmail.cpp
+++ b/src/sbbs3/netmail.cpp
@@ -40,7 +40,7 @@
 
 /****************************************************************************/
 /****************************************************************************/
-bool sbbs_t::inetmail(char *into, char *subj, long mode)
+bool sbbs_t::inetmail(const char *into, const char *subj, long mode)
 {
 	char	str[256],str2[256],msgpath[256],title[256],name[256],ch
 			,buf[SDT_BLOCK_LEN],*p,addr[256];
@@ -286,7 +286,7 @@ bool sbbs_t::inetmail(char *into, char *subj, long mode)
 	return(true);
 }
 
-bool sbbs_t::qnetmail(char *into, char *subj, long mode)
+bool sbbs_t::qnetmail(const char *into, const char *subj, long mode)
 {
 	char	str[256],msgpath[128],title[128],to[128],fulladdr[128]
 			,buf[SDT_BLOCK_LEN],*addr;
diff --git a/src/sbbs3/ntsvcs.c b/src/sbbs3/ntsvcs.c
index 74f1bfaa0a3011b543feed5308684c95af94e9d0..de7fe14b40ffa3b73decc225f5477c08081745e5 100644
--- a/src/sbbs3/ntsvcs.c
+++ b/src/sbbs3/ntsvcs.c
@@ -274,7 +274,7 @@ static WORD event_type(int level)
 /**************************************/
 /* Common Service Log Ouptut Function */
 /**************************************/
-static int svc_lputs(void* p, int level, char* str)
+static int svc_lputs(void* p, int level, const char* str)
 {
 	char	debug[1024];
 	char	fname[256];
@@ -349,7 +349,7 @@ static int svc_lputs(void* p, int level, char* str)
 /****************************************************************************/
 /* Event thread local/log print routine										*/
 /****************************************************************************/
-static int event_lputs(int level, char *str)
+static int event_lputs(int level, const char *str)
 {
 	svc_lputs(&event,level,str);
     return(0);
diff --git a/src/sbbs3/pack_qwk.cpp b/src/sbbs3/pack_qwk.cpp
index 6abc0df7c562b0487532b89d4b2af634d51a5e8b..c68d2ad63480de1f6bbe44f1d4880f4e0f7153e2 100644
--- a/src/sbbs3/pack_qwk.cpp
+++ b/src/sbbs3/pack_qwk.cpp
@@ -43,10 +43,9 @@
 /****************************************************************************/
 bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 {
-	char	str[MAX_PATH+1],ch,*p;
+	char	str[MAX_PATH+1],ch;
 	char 	tmp[MAX_PATH+1],tmp2[MAX_PATH+1];
 	char*	fname;
-	char*	fmode;
 	int 	mode;
 	uint	i,j,k,conf;
 	long	l,size,msgndx,ex;
@@ -68,6 +67,8 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 	DIRENT*	dirent;
 	struct	tm tm;
 	smbmsg_t msg;
+	const char* p;
+	const char* fmode;
 
 	ex=EX_OUTL|EX_OUTR;	/* Need sh for wildcard expansion */
 	if(prepack)
diff --git a/src/sbbs3/putmsg.cpp b/src/sbbs3/putmsg.cpp
index 96d2d2a5f176891f6ff23db16c004e8ef79c9105..582d758daa7a8288e6ddba88dcd31193389a3a88 100644
--- a/src/sbbs3/putmsg.cpp
+++ b/src/sbbs3/putmsg.cpp
@@ -47,7 +47,7 @@
 /* the attributes prior to diplaying the message are always restored.       */
 /* Ignores Ctrl-Z's                                                         */
 /****************************************************************************/
-char sbbs_t::putmsg(char *str, long mode)
+char sbbs_t::putmsg(const char *str, long mode)
 {
 	char	tmpatr,tmp2[256],tmp3[128];
 	uchar	exatr=0;
diff --git a/src/sbbs3/qwknodes.c b/src/sbbs3/qwknodes.c
index 6d75cd98d2f795a1d65327d9bb9162dfdb508fa5..8192eb6828a179f38da5ba7f357b117a852576dc 100644
--- a/src/sbbs3/qwknodes.c
+++ b/src/sbbs3/qwknodes.c
@@ -76,7 +76,7 @@ int lputs(char* str)
 /* Performs printf() through local assembly routines                        */
 /* Called from everywhere                                                   */
 /****************************************************************************/
-int lprintf(char *fmat, ...)
+int lprintf(const char *fmat, ...)
 {
 	va_list argptr;
 	char sbuf[256];
diff --git a/src/sbbs3/readmsgs.cpp b/src/sbbs3/readmsgs.cpp
index 704de2d88fcedb0012324db2feb75c6267755a52..88c7b1624046147d704f3efdf544c1dc4c401cee 100644
--- a/src/sbbs3/readmsgs.cpp
+++ b/src/sbbs3/readmsgs.cpp
@@ -342,7 +342,7 @@ static int get_start_msg(sbbs_t* sbbs, smb_t* smb)
 /* Returns 0 if normal completion, 1 if aborted.                            */
 /* Called from function main_sec                                            */
 /****************************************************************************/
-int sbbs_t::scanposts(uint subnum, long mode, char *find)
+int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 {
 	char	str[256],str2[256],do_find=true,mismatches=0
 			,done=0,domsg=1,*buf,*p;
@@ -1126,7 +1126,7 @@ int sbbs_t::scanposts(uint subnum, long mode, char *find)
 /* This function lists all messages in sub-board							*/
 /* Returns number of messages found/displayed.                              */
 /****************************************************************************/
-long sbbs_t::listsub(uint subnum, long mode, long start, char* search)
+long sbbs_t::listsub(uint subnum, long mode, long start, const char* search)
 {
 	int 	i;
 	int32_t	posts;
@@ -1169,7 +1169,7 @@ long sbbs_t::listsub(uint subnum, long mode, long start, char* search)
 /* Returns number of messages found.                                        */
 /****************************************************************************/
 long sbbs_t::searchposts(uint subnum, post_t *post, long start, long posts
-	, char *search)
+	, const char *search)
 {
 	char	*buf,ch;
 	long	l,found=0;
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index cb9ac4140f22b61fd6be9dfde65fd3ada5a078fa..73bfc395a024ecf41ffef5160807824b7e4d60d0 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -160,7 +160,7 @@ class sbbs_t
 
 public:
 
-	sbbs_t(ushort node_num, DWORD addr, char* host_name, SOCKET
+	sbbs_t(ushort node_num, DWORD addr, const char* host_name, SOCKET
 		,scfg_t*, char* text[], client_t* client_info);
 	~sbbs_t();
 
@@ -200,9 +200,9 @@ public:
 	int 	outcom(uchar ch); 	   // send character
 	int 	incom(unsigned long timeout=0);		   // receive character
 
-	void	spymsg(char *msg);		// send message to active spies
+	void	spymsg(const char *msg);		// send message to active spies
 
-	void	putcom(char *str, int len=0);  // Send string
+	void	putcom(const char *str, int len=0);  // Send string
 	void	hangup(void);		   // Hangup modem
 
 	uchar	telnet_local_option[0x100];
@@ -377,7 +377,7 @@ public:
 	uint	sysvar_li;
 
     /* ansi_term.cpp */
-	char *	ansi(int atr);			/* Returns ansi escape sequence for atr */
+	const char *	ansi(int atr);			/* Returns ansi escape sequence for atr */
     bool	ansi_getxy(int* x, int* y);
 	void	ansi_getlines(void);
 
@@ -395,7 +395,7 @@ public:
 	int32_t*	getintvar(csi_t *bin, int32_t name);
 	char*	copystrvar(csi_t *csi, char *p, char *str);
 	void	skipto(csi_t *csi, uchar inst);
-	bool	ftp_cmd(csi_t* csi, SOCKET ctrl_sock, char* cmdsrc, char* rsp);
+	bool	ftp_cmd(csi_t* csi, SOCKET ctrl_sock, const char* cmdsrc, char* rsp);
 	bool	ftp_put(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest);
 	bool	ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool dir=false);
 	SOCKET	ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN*);
@@ -441,7 +441,7 @@ public:
 	char*	timestr(time_t intime);
     char	timestr_output[60];
 	void	userlist(long mode);
-	size_t	gettmplt(char *outstr, char *tmplt, long mode);
+	size_t	gettmplt(char *outstr, const char *tmplt, long mode);
 	void	sif(char *fname, char *answers, long len);	/* Synchronet Interface File */
 	void	sof(char *fname, char *answers, long len);
 	void	create_sif_dat(char *siffile, char *datfile);
@@ -450,26 +450,26 @@ public:
 	bool	inputnstime32(time32_t *dt);
 	bool	inputnstime(time_t *dt);
 	bool	chkpass(char *pass, user_t* user, bool unique);
-	char *	cmdstr(char *instr, char *fpath, char *fspec, char *outstr);
+	char *	cmdstr(const char *instr, const char *fpath, const char *fspec, char *outstr);
 	char	cmdstr_output[512];
 
 	void	subinfo(uint subnum);
 	void	dirinfo(uint dirnum);
-	bool	trashcan(char *insearch, char *name);
+	bool	trashcan(const char *insearch, const char *name);
 	void	time_bank(void);
 	void	change_user(void);
 
 	/* writemsg.cpp */
 	void	automsg(void);
-	bool	writemsg(char *str, char *top, char *title, long mode, int subnum
-				,char *dest);
+	bool	writemsg(const char *str, const char *top, char *title, long mode, int subnum
+				,const char *dest);
 	char*	msg_tmp_fname(int xedit, char* fname, size_t len);
-	char	putmsg(char *str, long mode);
+	char	putmsg(const char *str, long mode);
 	bool	msgabort(void);
-	bool	email(int usernumber, char *top, char *title, long mode);
+	bool	email(int usernumber, const char *top, const char *title, long mode);
 	void	forwardmail(smbmsg_t* msg, int usernum);
 	void	removeline(char *str, char *str2, char num, char skip);
-	ulong	msgeditor(char *buf, char *top, char *title);
+	ulong	msgeditor(char *buf, const char *top, char *title);
 	void	editfile(char *path);
 	int		loadmsg(smbmsg_t *msg, ulong number);
 	ushort	chmsgattr(ushort attr);
@@ -479,7 +479,7 @@ public:
 	void	msgtotxt(smbmsg_t* msg, char *str, int header, int tails);
 	void	quotemsg(smbmsg_t* msg, int tails);
 	void	editmsg(smbmsg_t* msg, uint subnum);
-	void	editor_inf(int xeditnum,char *dest, char *title, long mode
+	void	editor_inf(int xeditnum, const char *dest, const char *title, long mode
 				,uint subnum);
 	void	copyfattach(uint to, uint from, char *title);
 	bool	movemsg(smbmsg_t* msg, uint subnum);
@@ -503,10 +503,10 @@ public:
 	int		bulkmailhdr(smb_t*, smbmsg_t*, uint usernum);
 
 	/* con_out.cpp */
-	int		bputs(char *str);				/* BBS puts function */
-	int		rputs(char *str);				/* BBS raw puts function */
-	int		bprintf(char *fmt, ...);		/* BBS printf function */
-	int		rprintf(char *fmt, ...);		/* BBS raw printf function */
+	int		bputs(const char *str);				/* BBS puts function */
+	int		rputs(const char *str);				/* BBS raw puts function */
+	int		bprintf(const char *fmt, ...);		/* BBS printf function */
+	int		rprintf(const char *fmt, ...);		/* BBS raw printf function */
 	void	backspace(void);				/* Output a destructive backspace via outchar */
 	void	outchar(char ch);				/* Output a char - check echo and emu.  */
 	void	center(char *str);
@@ -527,14 +527,14 @@ public:
 
 	/* getkey.cpp */
 	char	getkey(long mode); 		/* Waits for a key hit local or remote  */
-	long	getkeys(char *str, ulong max);
+	long	getkeys(const char *str, ulong max);
 	void	ungetkey(char ch);		/* Places 'ch' into the input buffer    */
 	char	question[128];
-	bool	yesno(char *str);
-	bool	noyes(char *str);
+	bool	yesno(const char *str);
+	bool	noyes(const char *str);
 	void	pause(void);
-	char *	mnestr;
-	void	mnemonics(char *str);
+	const char *	mnestr;
+	void	mnemonics(const char *str);
 
 	/* inkey.cpp */
 	char	inkey(long mode, unsigned long timeout=0);
@@ -545,7 +545,7 @@ public:
 	void	printtail(char *str, int lines, long mode);
 	void	menu(const char *code);
 
-	int		uselect(int add, uint n, char *title, char *item, uchar *ar);
+	int		uselect(int add, uint n, const char *title, const char *item, const uchar *ar);
 	uint	uselect_total, uselect_num[500];
 
 	void	redrwstr(char *strin, int i, int l, long mode);
@@ -553,8 +553,8 @@ public:
 	void	ctrl_a(char x);			/* Peforms the Ctrl-Ax attribute changes */
 
 	/* atcodes.cpp */
-	int		show_atcode(char *code);
-	char*	atcode(char* sp, char* str, size_t maxlen);
+	int		show_atcode(const char *code);
+	const char*	atcode(char* sp, char* str, size_t maxlen);
 
 	/* getnode.cpp */
 	int		getsmsg(int usernumber);
@@ -584,10 +584,10 @@ public:
 	int		text_sec(void);						/* Text sections */
 
 	/* readmsgs.cpp */
-	int		scanposts(uint subnum, long mode, char* find);	/* Scan sub-board */
-	long	listsub(uint subnum, long mode, long start, char* search);
+	int		scanposts(uint subnum, long mode, const char* find);	/* Scan sub-board */
+	long	listsub(uint subnum, long mode, long start, const char* search);
 	long	listmsgs(uint subnum, long mode, post_t* post, long start, long posts);
-	long	searchposts(uint subnum, post_t* post, long start, long msgs, char* find);
+	long	searchposts(uint subnum, post_t* post, long start, long msgs, const char* find);
 	long	showposts_toyou(post_t* post, ulong start, long posts);
 	void	msghdr(smbmsg_t* msg);
 
@@ -616,8 +616,8 @@ public:
 	int		nopen(char *str, int access);
 	int		mv(char *src, char *dest, char copy); /* fast file move/copy function */
 	bool	chksyspass(void);
-	bool	chk_ar(uchar * str, user_t * user); /* checks access requirements */
-	bool	ar_exp(uchar ** ptrptr, user_t * user);
+	bool	chk_ar(const uchar * str, user_t * user); /* checks access requirements */
+	bool	ar_exp(const uchar ** ptrptr, user_t * user);
 	void	daily_maint(void);
 
 	/* upload.cpp */
@@ -631,7 +631,7 @@ public:
 	void	downloadfile(file_t* f);
 	void	notdownloaded(ulong size, time_t start, time_t end);
 	int		protocol(prot_t* prot, enum XFER_TYPE, char *fpath, char *fspec, bool cd);
-	char*	protcmdline(prot_t* prot, enum XFER_TYPE type);
+	const char*	protcmdline(prot_t* prot, enum XFER_TYPE type);
 	void	seqwait(uint devnum);
 	void	autohangup(void);
 	bool	checkdszlog(file_t*);
@@ -651,9 +651,9 @@ public:
 	bool	addtobatdl(file_t* f);
 
 	/* listfile.cpp */
-	bool	listfile(char *fname, char *buf, uint dirnum
-				,char *search, char letter, ulong datoffset);
-	int		listfiles(uint dirnum, char *filespec, int tofile, long mode);
+	bool	listfile(const char *fname, const char *buf, uint dirnum
+				,const char *search, const char letter, ulong datoffset);
+	int		listfiles(uint dirnum, const char *filespec, int tofile, long mode);
 	int		listfileinfo(uint dirnum, char *filespec, long mode);
 	void	listfiletofile(char *fname, char *buf, uint dirnum, int file);
 	int		batchflagprompt(uint dirnum, file_t bf[], uint total, long totalfiles);
@@ -673,7 +673,7 @@ public:
 	void	temp_xfer(void);
 	void	extract(uint dirnum);
 	char *	temp_cmd(void);					/* Returns temp file command line */
-	ulong	create_filelist(char *name, long mode);
+	ulong	create_filelist(const char *name, long mode);
 
 	/* viewfile.cpp */
 	int		viewfile(file_t* f, int ext);
@@ -696,13 +696,13 @@ public:
 	void	moduserdat(uint xtrnnum);
 
 	/* logfile.cpp */
-	void	logentry(char *code,char *entry);
+	void	logentry(const char *code,const char *entry);
 	void	log(char *str);				/* Writes 'str' to node log */
 	void	logch(char ch, bool comma);	/* Writes 'ch' to node log */
-	void	logline(char *code,char *str); /* Writes 'str' on it's own line in log */
+	void	logline(const char *code,const char *str); /* Writes 'str' on it's own line in log */
 	void	logofflist(void);              /* List of users logon activity */
-	bool	syslog(char* code, char *entry);
-	void	errorlog(char *text);			/* Logs errors to ERROR.LOG and NODE.LOG */
+	bool	syslog(const char* code, const char *entry);
+	void	errorlog(const char *text);			/* Logs errors to ERROR.LOG and NODE.LOG */
 	bool	errorlog_inside;
 	bool	errormsg_inside;
 	void	errormsg(int line, const char *file, const char* action, const char *object
@@ -740,12 +740,12 @@ public:
 				,uint touser, smbmsg_t* msg);
 
 	/* fido.cpp */
-	bool	netmail(char *into, char *subj, long mode);
+	bool	netmail(const char *into, const char *subj, long mode);
 	void	qwktonetmail(FILE *rep, char *block, char *into, uchar fromhub);
 	bool	lookup_netuser(char *into);
 
-	bool	inetmail(char *into, char *subj, long mode);
-	bool	qnetmail(char *into, char *subj, long mode);
+	bool	inetmail(const char *into, const char *subj, long mode);
+	bool	qnetmail(const char *into, const char *subj, long mode);
 
 	/* useredit.cpp */
 	void	useredit(int usernumber);
@@ -838,8 +838,8 @@ extern "C" {
 	DLLEXPORT BOOL		DLLCALL removefiledat(scfg_t* cfg, file_t* f);
 	DLLEXPORT BOOL		DLLCALL addfiledat(scfg_t* cfg, file_t* f);
 	DLLEXPORT BOOL		DLLCALL findfile(scfg_t* cfg, uint dirnum, char *filename);
-	DLLEXPORT char *	DLLCALL padfname(char *filename, char *str);
-	DLLEXPORT char *	DLLCALL unpadfname(char *filename, char *str);
+	DLLEXPORT char *	DLLCALL padfname(const char *filename, char *str);
+	DLLEXPORT char *	DLLCALL unpadfname(const char *filename, char *str);
 	DLLEXPORT BOOL		DLLCALL rmuserxfers(scfg_t* cfg, int fromuser, int destuser, char *fname);
 
 	DLLEXPORT int		DLLCALL update_uldate(scfg_t* cfg, file_t* f);
@@ -1087,9 +1087,9 @@ BOOL 	md(char *path);
 #ifdef SBBS /* These aren't exported */
 
 	/* main.c */
-	int 	lputs(int level, char *);			/* log output */
-	int 	lprintf(int level, char *fmt, ...);	/* log output */
-	int 	eprintf(int level, char *fmt, ...);	/* event log */
+	int 	lputs(int level, const char *);			/* log output */
+	int 	lprintf(int level, const char *fmt, ...);	/* log output */
+	int 	eprintf(int level, const char *fmt, ...);	/* event log */
 	SOCKET	open_socket(int type, const char* protocol);
 	SOCKET	accept_socket(SOCKET s, SOCKADDR* addr, socklen_t* addrlen);
 	int		close_socket(SOCKET);
@@ -1107,7 +1107,7 @@ BOOL 	md(char *path);
 	int		fdatecmp_d(uchar **buf1, uchar **buf2);
 
 	/* file.cpp */
-	BOOL	filematch(char *filename, char *filespec);
+	BOOL	filematch(const char *filename, const char *filespec);
 
 	/* sbbscon.c */
 	#if defined(__unix__) && defined(NEEDS_DAEMON)
diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c
index 6be476864a8917d46fc788a724d214c109084987..4f5734f39106d6ee5aed4098fb5640a9f49ac139 100644
--- a/src/sbbs3/sbbscon.c
+++ b/src/sbbs3/sbbscon.c
@@ -266,7 +266,7 @@ static int lputs(int level, char *str)
     return(prompt_len);
 }
 
-static int lprintf(int level, char *fmt, ...)
+static int lprintf(int level, const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[1024];
@@ -599,7 +599,7 @@ static void client_on(void* p, BOOL on, int sock, client_t* client, BOOL update)
 /****************************************************************************/
 /* BBS local/log print routine												*/
 /****************************************************************************/
-static int bbs_lputs(void* p, int level, char *str)
+static int bbs_lputs(void* p, int level, const char *str)
 {
 	char		logline[512];
 	char		tstr[64];
@@ -657,7 +657,7 @@ static void bbs_terminated(void* p, int code)
 /****************************************************************************/
 /* FTP local/log print routine												*/
 /****************************************************************************/
-static int ftp_lputs(void* p, int level, char *str)
+static int ftp_lputs(void* p, int level, const char *str)
 {
 	char		logline[512];
 	char		tstr[64];
@@ -719,7 +719,7 @@ static void ftp_terminated(void* p, int code)
 /****************************************************************************/
 /* Mail Server local/log print routine										*/
 /****************************************************************************/
-static int mail_lputs(void* p, int level, char *str)
+static int mail_lputs(void* p, int level, const char *str)
 {
 	char		logline[512];
 	char		tstr[64];
@@ -777,7 +777,7 @@ static void mail_terminated(void* p, int code)
 /****************************************************************************/
 /* Services local/log print routine											*/
 /****************************************************************************/
-static int services_lputs(void* p, int level, char *str)
+static int services_lputs(void* p, int level, const char *str)
 {
 	char		logline[512];
 	char		tstr[64];
@@ -835,7 +835,7 @@ static void services_terminated(void* p, int code)
 /****************************************************************************/
 /* Event thread local/log print routine										*/
 /****************************************************************************/
-static int event_lputs(int level, char *str)
+static int event_lputs(int level, const char *str)
 {
 	char		logline[512];
 	char		tstr[64];
@@ -875,7 +875,7 @@ static int event_lputs(int level, char *str)
 /****************************************************************************/
 /* web local/log print routine											*/
 /****************************************************************************/
-static int web_lputs(void* p, int level, char *str)
+static int web_lputs(void* p, int level, const char *str)
 {
 	char		logline[512];
 	char		tstr[64];
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index d58eb94de3bf0a13d97f99069ee4b754fa73f35f..69ed74c6ed645fc1c3e2a222c0b2f177cc144aef 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -112,7 +112,7 @@ typedef struct {
 static service_t	*service=NULL;
 static uint32_t		services=0;
 
-static int lprintf(int level, char *fmt, ...)
+static int lprintf(int level, const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[1024];
diff --git a/src/sbbs3/services.h b/src/sbbs3/services.h
index 3dd367f080fd7a5c85dec0731d541cb7575ff945..5df4291a298edf23e6e158bf3e6cabfe381d16a4 100644
--- a/src/sbbs3/services.h
+++ b/src/sbbs3/services.h
@@ -50,8 +50,8 @@ typedef struct {
 	void*	cbdata;					/* Private data passed to callbacks */ 
 
 	/* Callbacks (NULL if unused) */
-	int 	(*lputs)(void*, int, char*);		/* Log - put string */
-	void	(*status)(void*, char*);
+	int 	(*lputs)(void*, int, const char*);		/* Log - put string */
+	void	(*status)(void*, const char*);
     void	(*started)(void*);
 	void	(*recycle)(void*);
     void	(*terminated)(void*, int code);
diff --git a/src/sbbs3/smbactiv.c b/src/sbbs3/smbactiv.c
index ceab82e8f50b7bbd99ad949e889d7aaffea721af..79db8d6c24fdacf101507d301f35c414f2865ea6 100644
--- a/src/sbbs3/smbactiv.c
+++ b/src/sbbs3/smbactiv.c
@@ -43,7 +43,7 @@ return(fputs(tmp,stderr));
 /* Performs printf() through local assembly routines                        */
 /* Called from everywhere                                                   */
 /****************************************************************************/
-int lprintf(char *fmat, ...)
+int lprintf(const char *fmat, ...)
 {
 	va_list argptr;
 	char sbuf[256];
diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h
index 7613347f598b23a7e00fedecb664c5cb504e4654..0c7be71defc008f165d8dad5d2febf90d92cdfab 100644
--- a/src/sbbs3/startup.h
+++ b/src/sbbs3/startup.h
@@ -90,9 +90,9 @@ typedef struct {
 	void*	cbdata;					/* Private data passed to callbacks */ 
 
 	/* Callbacks (NULL if unused) */
-	int 	(*lputs)(void*, int, char*);	/* Log - put string					*/
-    int 	(*event_lputs)(int, char*);		/* Event log - put string			*/
-	void	(*status)(void*, char*);
+	int 	(*lputs)(void*, int, const char*);	/* Log - put string					*/
+    int 	(*event_lputs)(int, const char*);		/* Event log - put string			*/
+	void	(*status)(void*, const char*);
     void	(*started)(void*);
 	void	(*recycle)(void*);
     void	(*terminated)(void*, int code);
diff --git a/src/sbbs3/str.cpp b/src/sbbs3/str.cpp
index 1ff7201808bf45a415073e83000ee487b66ec0b2..d928d619f7d4686074ecdbeebe792c1e419effd4 100644
--- a/src/sbbs3/str.cpp
+++ b/src/sbbs3/str.cpp
@@ -486,7 +486,7 @@ void sbbs_t::read_sif_dat(char *siffile, char *datfile)
 /* First character MUST be an A,N or !.                                     */
 /* Modes - K_LINE and K_UPPER are supported.                                */
 /****************************************************************************/
-size_t sbbs_t::gettmplt(char *strout,char *templt, long mode)
+size_t sbbs_t::gettmplt(char *strout, const char *templt, long mode)
 {
 	char	ch,str[256];
 	char	tmplt[128];
@@ -819,7 +819,7 @@ void sbbs_t::dirinfo(uint dirnum)
 /* Returns TRUE if found in list, FALSE if not.								*/
 /* Displays bad<name>.can in text directory if found.						*/
 /****************************************************************************/
-bool sbbs_t::trashcan(char *insearchof, char *name)
+bool sbbs_t::trashcan(const char *insearchof, const char *name)
 {
 	char str[MAX_PATH+1];
 	bool result;
diff --git a/src/sbbs3/tmp_xfer.cpp b/src/sbbs3/tmp_xfer.cpp
index a1996b193d0a614f7ee587ac38ade33989cdcf1a..6939160135ad648963c609e97548307a8cef25e8 100644
--- a/src/sbbs3/tmp_xfer.cpp
+++ b/src/sbbs3/tmp_xfer.cpp
@@ -412,7 +412,7 @@ void sbbs_t::extract(uint dirnum)
 /* Creates a text file named NEWFILES.DAT in the temp directory that        */
 /* all new files since p-date. Returns number of files in list.             */
 /****************************************************************************/
-ulong sbbs_t::create_filelist(char *name, long mode)
+ulong sbbs_t::create_filelist(const char *name, long mode)
 {
     char	str[256];
 	int		file;
diff --git a/src/sbbs3/un_rep.cpp b/src/sbbs3/un_rep.cpp
index 05afc0fbf01d2e5e70d744229aa12a526f840463..f701edba0e3d285f8b16f416642be48f37727167 100644
--- a/src/sbbs3/un_rep.cpp
+++ b/src/sbbs3/un_rep.cpp
@@ -43,8 +43,7 @@
 /****************************************************************************/
 bool sbbs_t::unpack_rep(char* repfile)
 {
-	char	str[MAX_PATH+1],fname[MAX_PATH+1]
-			,*AttemptedToUploadREPpacket="Attempted to upload REP packet";
+	char	str[MAX_PATH+1],fname[MAX_PATH+1];
 	char	rep_fname[MAX_PATH+1];
 	char	msg_fname[MAX_PATH+1];
 	char 	tmp[512];
@@ -68,6 +67,7 @@ bool sbbs_t::unpack_rep(char* repfile)
 	str_list_t	host_can=NULL;
 	str_list_t	subject_can=NULL;
 	str_list_t	twit_list=NULL;
+	const char* AttemptedToUploadREPpacket="Attempted to upload REP packet";
 
 	memset(&msg,0,sizeof(msg));
 
diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index 8bb7b2147ea57b53255c68430818b040fab18bae..cc8c706f2ea45e475fa673c88bdb737ffa9aa7c8 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -1860,7 +1860,7 @@ int DLLCALL getuserrec(scfg_t* cfg, int usernumber,int start, int length, char *
 /* Places into user.dat at the offset for usernumber+start for length bytes */
 /* Called from various locations											*/
 /****************************************************************************/
-int DLLCALL putuserrec(scfg_t* cfg, int usernumber,int start, uint length, char *str)
+int DLLCALL putuserrec(scfg_t* cfg, int usernumber,int start, uint length, const char *str)
 {
 	char	str2[256];
 	int		file;
diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h
index 308f2db7031ed023d76f1e376e09cc7b96053a2c..7058fb15189b9c1436869ed5eea8eb5a903251e7 100644
--- a/src/sbbs3/userdat.h
+++ b/src/sbbs3/userdat.h
@@ -100,7 +100,7 @@ DLLEXPORT uint	DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, ui
 DLLEXPORT BOOL	DLLCALL chk_ar(scfg_t* cfg, uchar* str, user_t* user); /* checks access requirements */
 
 DLLEXPORT int	DLLCALL getuserrec(scfg_t*, int usernumber, int start, int length, char *str);
-DLLEXPORT int	DLLCALL putuserrec(scfg_t*, int usernumber, int start, uint length, char *str);
+DLLEXPORT int	DLLCALL putuserrec(scfg_t*, int usernumber, int start, uint length, const char *str);
 DLLEXPORT ulong	DLLCALL adjustuserrec(scfg_t*, int usernumber, int start, int length, long adj);
 DLLEXPORT BOOL	DLLCALL logoutuserdat(scfg_t*, user_t*, time_t now, time_t logontime);
 DLLEXPORT void	DLLCALL resetdailyuserdat(scfg_t*, user_t*);
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index 0dc44ec98185f67e2770333a3be3bd0d39c69eee..109a38979084324494ce6f79ebe8fe4cece6db0f 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -100,6 +100,7 @@ static BOOL		terminate_server=FALSE;
 static BOOL		terminate_http_logging_thread=FALSE;
 static uint		thread_count=0;
 static SOCKET	server_socket=INVALID_SOCKET;
+static SOCKET	server_socket6=INVALID_SOCKET;
 static char		revision[16];
 static char		root_dir[MAX_PATH+1];
 static char		error_dir[MAX_PATH+1];
@@ -228,6 +229,8 @@ typedef struct  {
 typedef struct  {
 	SOCKET			socket;
 	SOCKADDR_IN		addr;
+	SOCKET			socket6;
+	SOCKADDR_IN		addr6;
 	http_request_t	req;
 	char			host_ip[64];
 	char			host_name[128];	/* Resolved remote host */
@@ -473,7 +476,7 @@ time_gm(struct tm *tm)
         return (t < 0 ? (time_t) -1 : t);
 }
 
-static int lprintf(int level, char *fmt, ...)
+static int lprintf(int level, const char *fmt, ...)
 {
 	va_list argptr;
 	char sbuf[1024];
diff --git a/src/sbbs3/websrvr.h b/src/sbbs3/websrvr.h
index fb44812e7c7cf7f74054662bceef68012175783e..461a8d4079211b285e5537851284d5a29c2f3054 100644
--- a/src/sbbs3/websrvr.h
+++ b/src/sbbs3/websrvr.h
@@ -55,8 +55,8 @@ typedef struct {
 	void*	cbdata;				/* Private data passed to callbacks */ 
 
 	/* Callbacks (NULL if unused) */
-	int 	(*lputs)(void*, int, char*);
-	void	(*status)(void*, char*);
+	int 	(*lputs)(void*, int, const char*);
+	void	(*status)(void*, const char*);
     void	(*started)(void*);
 	void	(*recycle)(void*);
     void	(*terminated)(void*, int code);
diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp
index b9b3758e2bebcbc0e407a84caac7217acde80fb6..edec86022a38d2c7533c0aba7d77bed10a6d1ca8 100644
--- a/src/sbbs3/writemsg.cpp
+++ b/src/sbbs3/writemsg.cpp
@@ -65,8 +65,8 @@ char* sbbs_t::msg_tmp_fname(int xedit, char* fname, size_t len)
 /* message and 'title' is the title (70chars max) for the message.          */
 /* 'dest' contains a text description of where the message is going.        */
 /****************************************************************************/
-bool sbbs_t::writemsg(char *fname, char *top, char *title, long mode, int subnum
-	,char *dest)
+bool sbbs_t::writemsg(const char *fname, const char *top, char *title, long mode, int subnum
+	,const char *dest)
 {
 	char	str[256],quote[128],c,*buf,*p,*tp
 				,useron_level;
@@ -489,7 +489,7 @@ void quotestr(char *str)
 	remove_ctrl_a(str,NULL);
 }
 
-void sbbs_t::editor_inf(int xeditnum,char *dest, char *title, long mode
+void sbbs_t::editor_inf(int xeditnum, const char *dest, const char *title, long mode
 	,uint subnum)
 {
 	char str[MAX_PATH+1];
@@ -605,7 +605,7 @@ void sbbs_t::removeline(char *str, char *str2, char num, char skip)
 /* The Synchronet editor.                                                    */
 /* Returns the number of lines edited.                                       */
 /*****************************************************************************/
-ulong sbbs_t::msgeditor(char *buf, char *top, char *title)
+ulong sbbs_t::msgeditor(char *buf, const char *top, char *title)
 {
 	int		i,j,line,lines=0,maxlines;
 	char	strin[256],**str,done=0;
diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp
index 5877f2bbd71642efcb55fb766a8617528ebf6c05..cf51c9c6972d1047c9c8bdf44252205672f61c78 100644
--- a/src/sbbs3/xtrn.cpp
+++ b/src/sbbs3/xtrn.cpp
@@ -2008,7 +2008,7 @@ const char* quoted_string(const char* str, char* buf, size_t maxlen)
 /*****************************************************************************/
 /* Returns command line generated from instr with %c replacments             */
 /*****************************************************************************/
-char* sbbs_t::cmdstr(char *instr, char *fpath, char *fspec, char *outstr)
+char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, char *outstr)
 {
 	char	str[MAX_PATH+1],*cmd;
     int		i,j,len;
diff --git a/src/sbbs3/xtrn_sec.cpp b/src/sbbs3/xtrn_sec.cpp
index 76bf89b2d16a73524b7bf88df7d06ce589989a93..14d6f45fd5a77728f5448aed4ea6d1cd37029ae0 100644
--- a/src/sbbs3/xtrn_sec.cpp
+++ b/src/sbbs3/xtrn_sec.cpp
@@ -193,7 +193,7 @@ int sbbs_t::xtrn_sec()
 }
 
 
-char *hungupstr="\1n\1h%s\1n hung up on \1h%s\1n %s\r\n";
+const char *hungupstr="\1n\1h%s\1n hung up on \1h%s\1n %s\r\n";
 
 /****************************************************************************/
 /* Convert C string to pascal string										*/
diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c
index eec35b1982785d222bff0cacfcc2bd0b2c8d58e1..3000ea863ba7e8f4caa732aa1f0fd8f2b18a8553 100644
--- a/src/xpdev/dirwrap.c
+++ b/src/xpdev/dirwrap.c
@@ -663,7 +663,7 @@ int removecase(char *path)
 /****************************************************************************/
 /* Deletes all files in dir 'path' that match file spec 'spec'              */
 /****************************************************************************/
-ulong DLLCALL delfiles(char *inpath, char *spec)
+ulong DLLCALL delfiles(const char *inpath, const char *spec)
 {
 	char	path[MAX_PATH+1];
 	char	lastch;
diff --git a/src/xpdev/dirwrap.h b/src/xpdev/dirwrap.h
index e68de1b3370e87465bc2c79a1f67b8092ff71f26..aad2f84f135a58d43aaf7597f1eae882d5395946 100644
--- a/src/xpdev/dirwrap.h
+++ b/src/xpdev/dirwrap.h
@@ -229,7 +229,7 @@ DLLEXPORT char*		DLLCALL getfext(const char* path);
 DLLEXPORT int		DLLCALL getfattr(const char* filename);
 DLLEXPORT ulong		DLLCALL getdisksize(const char* path, ulong unit);
 DLLEXPORT ulong		DLLCALL getfreediskspace(const char* path, ulong unit);
-DLLEXPORT ulong		DLLCALL delfiles(char *inpath, char *spec);
+DLLEXPORT ulong		DLLCALL delfiles(const char *inpath, const char *spec);
 DLLEXPORT char*		DLLCALL backslash(char* path);
 DLLEXPORT BOOL 		DLLCALL wildmatch(const char *fname, const char *spec, BOOL path);
 DLLEXPORT BOOL 		DLLCALL wildmatchi(const char *fname, const char *spec, BOOL path);
diff --git a/src/xpdev/sockwrap.c b/src/xpdev/sockwrap.c
index f6379e0cc8f7341cf44c2315858f28ed9474473a..4d5dab12a654f65e26168b65a921a9547254e5e7 100644
--- a/src/xpdev/sockwrap.c
+++ b/src/xpdev/sockwrap.c
@@ -337,7 +337,7 @@ BOOL socket_check(SOCKET sock, BOOL* rd_p, BOOL* wr_p, DWORD timeout)
 int retry_bind(SOCKET s, const struct sockaddr *addr, socklen_t addrlen
 			   ,uint retries, uint wait_secs
 			   ,const char* prot
-			   ,int (*lprintf)(int level, char *fmt, ...))
+			   ,int (*lprintf)(int level, const char *fmt, ...))
 {
 	char	port_str[128];
 	int		result=-1;
diff --git a/src/xpdev/sockwrap.h b/src/xpdev/sockwrap.h
index c2b073aa1cca309ab30b779a40b174aaa1bcc025..4fd2cc40baca463a791b35c746820dfa3680009c 100644
--- a/src/xpdev/sockwrap.h
+++ b/src/xpdev/sockwrap.h
@@ -172,7 +172,7 @@ int		recvfilesocket(int sock, int file, long *offset, long count);
 BOOL	socket_check(SOCKET sock, BOOL* rd_p, BOOL* wr_p, DWORD timeout);
 int 	retry_bind(SOCKET s, const struct sockaddr *addr, socklen_t addrlen
 				   ,uint retries, uint wait_secs, const char* prot
-				   ,int (*lprintf)(int level, char *fmt, ...));
+				   ,int (*lprintf)(int level, const char *fmt, ...));
 
 #ifdef __cplusplus
 }