diff --git a/src/sbbs3/GNUmakefile b/src/sbbs3/GNUmakefile
index 8bbf4daa1110d969ed27a179025fd6eaf3c95d5a..d736925c17db645b750e637388ee123c48960673 100644
--- a/src/sbbs3/GNUmakefile
+++ b/src/sbbs3/GNUmakefile
@@ -221,3 +221,7 @@ $(QWKNODES): $(QWKNODES_OBJS)
 	@echo Linking $@
 	$(QUIET)$(CC) $(UTIL_LDFLAGS) -o $@ $(QWKNODES_OBJS) $(SMBLIB_LIBS) $(XPDEV_LIBS)
 
+# SLOG
+$(SLOG): $(SLOG_OBJS)
+	@echo Linking $@
+	$(QUIET)$(CC) $(UTIL_LDFLAGS) -o $@ $(SLOG_OBJS) $(XPDEV_LIBS)
diff --git a/src/sbbs3/Makefile b/src/sbbs3/Makefile
index b5d416c525d36749d55eff5bbc4c61578394bef1..8565db6667513351be2bfff5e1972b29bf4cb673 100644
--- a/src/sbbs3/Makefile
+++ b/src/sbbs3/Makefile
@@ -206,3 +206,8 @@ $(QWKNODES): $(QWKNODES_OBJS)
 	@echo Linking $@
 	$(QUIET)$(CC) $(UTIL_LDFLAGS) -e$@ $** $(SMBLIB_LIBS) $(XPDEV_LIBS)
 
+# SLOG
+$(SLOG): $(SLOG_OBJS)
+	@echo Linking $@
+	$(QUIET)$(CC) $(UTIL_LDFLAGS) -e$@ $** $(XPDEV_LIBS)
+
diff --git a/src/sbbs3/objects.mk b/src/sbbs3/objects.mk
index 5f3fec2a0bc1770678ca0933ec37fd419bf634cd..9794675edc04485cc479e04b290e7edf4a36e214 100644
--- a/src/sbbs3/objects.mk
+++ b/src/sbbs3/objects.mk
@@ -239,4 +239,8 @@ QWKNODES_OBJS = \
 			$(OBJODIR)$(DIRSEP)scfglib1$(OFILE) \
 			$(OBJODIR)$(DIRSEP)scfglib2$(OFILE) \
 			$(OBJODIR)$(DIRSEP)str_util$(OFILE) \
-			$(OBJODIR)$(DIRSEP)ars$(OFILE) \
+			$(OBJODIR)$(DIRSEP)ars$(OFILE)
+
+SLOG_OBJS = \
+			$(OBJODIR)$(DIRSEP)slog$(OFILE) \
+			$(OBJODIR)$(DIRSEP)nopen$(OFILE)
diff --git a/src/sbbs3/slog.c b/src/sbbs3/slog.c
new file mode 100644
index 0000000000000000000000000000000000000000..ec51ac77a3509f3fd90e2ed5099ba5204353f211
--- /dev/null
+++ b/src/sbbs3/slog.c
@@ -0,0 +1,119 @@
+/* SLOG.C */
+
+/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <errno.h>
+
+#include "sbbsdefs.h"
+#include "nopen.h"
+#include "dirwrap.h"
+
+/****************************************************************************/
+/* Lists system statistics for everyday the bbs has been running.           */
+/* Either for the current node (node=1) or the system (node=0)              */
+/****************************************************************************/
+int main(int argc, char **argv)
+{
+	char str[256],dir[256]={""},*p;
+    uchar *buf;
+	int i,file,pause=0,lncntr=0;
+    time_t timestamp;
+    long l;
+    ulong   length,
+            logons,
+            timeon,
+            posts,
+            emails,
+            fbacks,
+            ulb,
+            uls,
+            dlb,
+            dls;
+	time_t	yesterday;
+	struct tm *curdate;
+
+
+printf("\nSynchronet System/Node Statistics Log Viewer v1.02\n\n");
+
+for(i=1;i<argc;i++)
+	if(!stricmp(argv[i],"/P"))
+		pause=1;
+	else
+		strcpy(dir,argv[1]);
+if(!dir[0]) {
+	p=getenv("SBBSCTRL");
+	if(p!=NULL)
+		strcpy(dir,p); }
+
+backslash(dir);
+
+sprintf(str,"%scsts.dab",dir);
+if(!fexistcase(str)) {
+	printf("%s does not exist\r\n",str);
+	return(1); }
+if((file=nopen(str,O_RDONLY))==-1) {
+	printf("Error opening %s\r\n",str);
+	return(1); }
+length=filelength(file);
+if(length<40) {
+    close(file);
+	return(1); }
+if((buf=(char *)malloc(length))==0) {
+    close(file);
+	printf("error allocating %lu bytes\r\n",length);
+	return(1); }
+read(file,buf,length);
+close(file);
+l=length-4;
+while(l>-1L) {
+    fbacks=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    emails=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    posts=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    dlb=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    dls=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    ulb=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    uls=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    timeon=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    logons=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+    timestamp=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
+        |((long)buf[l+3]<<24);
+    l-=4;
+	yesterday=timestamp-(24*60*60);	/* 1 day less than stamp */
+	curdate=localtime(&yesterday);
+	printf("%2.2d/%2.2d/%2.2d T:%5lu   L:%3lu   P:%3lu   "
+		"E:%3lu   F:%3lu   U:%6luk %3lu  D:%6luk %3lu\n"
+		,curdate->tm_mon+1,curdate->tm_mday,curdate->tm_year%100,timeon,logons,posts,emails
+		,fbacks,ulb/1024,uls,dlb/1024,dls);
+	lncntr++;
+	if(pause && lncntr>=20) {
+		printf("[Hit a key]");
+		if(getch()==3)
+			break;
+		printf("\r");
+		lncntr=0; } }
+free(buf);
+return(0);
+}
diff --git a/src/sbbs3/targets.mk b/src/sbbs3/targets.mk
index 12d274b88eaec7a792dabd1452f8b83639750f0b..1c0913799a637d1cf91f24de6ad50d95f8a3833f 100644
--- a/src/sbbs3/targets.mk
+++ b/src/sbbs3/targets.mk
@@ -29,13 +29,14 @@ ANS2ASC		= $(EXEODIR)$(DIRSEP)ans2asc$(EXEFILE)
 ASC2ANS		= $(EXEODIR)$(DIRSEP)asc2ans$(EXEFILE)
 SEXYZ		= $(EXEODIR)$(DIRSEP)sexyz$(EXEFILE)
 QWKNODES	= $(EXEODIR)$(DIRSEP)qwknodes$(EXEFILE)
+SLOG		= $(EXEODIR)$(DIRSEP)slog$(EXEFILE)
 
 UTILS		= $(BUILD_DEPENDS)$(FIXSMB) $(BUILD_DEPENDS)$(CHKSMB) \
 			  $(BUILD_DEPENDS)$(SMBUTIL) $(BUILD_DEPENDS)$(BAJA) $(BUILD_DEPENDS)$(NODE) \
 			  $(BUILD_DEPENDS)$(SBBSECHO) $(BUILD_DEPENDS)$(ECHOCFG) $(BUILD_DEPENDS) \
 			  $(BUILD_DEPENDS)$(ADDFILES) $(BUILD_DEPENDS)$(FILELIST) $(BUILD_DEPENDS)$(MAKEUSER) \
 			  $(BUILD_DEPENDS)$(ANS2ASC) $(BUILD_DEPENDS)$(ASC2ANS)  $(BUILD_DEPENDS)$(UNBAJA) \
-			  $(BUILD_DEPENDS)$(QWKNODES)
+			  $(BUILD_DEPENDS)$(QWKNODES) $(BUILD_DEPENDS)$(SLOG)
 
 all:	dlls utils console mono
 
@@ -81,3 +82,4 @@ $(ANS2ASC):
 $(ASC2ANS):
 $(SEXYZ): $(XPDEV-MT_LIB) $(SMBLIB)
 $(QWKNODES): $(XPDEV_LIB)
+$(SLOG): $(XPDEV_LIB)