diff --git a/src/sbbs3/atcodes.cpp b/src/sbbs3/atcodes.cpp
index 7cae16039d2e3511b7949b23def0a34a1f694dd5..f4384eaea74f410c31c4a93c25781a4af9b336f1 100644
--- a/src/sbbs3/atcodes.cpp
+++ b/src/sbbs3/atcodes.cpp
@@ -1,7 +1,4 @@
 /* Synchronet "@code" functions */
-// vi: tabstop=4
-
-/* $Id: atcodes.cpp,v 1.142 2020/05/10 20:12:35 rswindell Exp $ */
 
 /****************************************************************************
  * @format.tab-size 4		(Plain Text/Source Code File Header)			*
@@ -16,21 +13,9 @@
  * See the GNU General Public License for more details: gpl.txt or			*
  * http://www.fsf.org/copyleft/gpl.html										*
  *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
  * For Synchronet coding style and modification guidelines, see				*
  * http://www.synchro.net/source.html										*
  *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
  * Note: If this box doesn't appear square, then you need to fix your tabs.	*
  ****************************************************************************/
 
@@ -39,6 +24,7 @@
 #include "utf8.h"
 #include "unicode.h"
 #include "cp437defs.h"
+#include "ver.h"
 
 #if defined(_WINSOCKAPI_)
 	extern WSADATA WSAData;
@@ -411,6 +397,12 @@ const char* sbbs_t::atcode(char* sp, char* str, size_t maxlen, long* pmode, bool
 		return(str);
 	}
 
+	if(strcmp(sp, "GIT_HASH") == 0)
+		return git_hash;
+
+	if(strcmp(sp, "GIT_BRANCH") == 0)
+		return git_branch;
+
 	if(!strcmp(sp,"UPTIME")) {
 		extern volatile time_t uptime;
 		time_t up=0;
diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c
index 4d5b17b5c9476ab3795202f419e8ef6d6d632e86..bd7039212ae503fa3b89a0a971a6b2a175b6785e 100644
--- a/src/sbbs3/js_system.c
+++ b/src/sbbs3/js_system.c
@@ -21,6 +21,7 @@
 
 #include "sbbs.h"
 #include "js_request.h"
+#include "ver.h"
 
 #ifdef JAVASCRIPT
 
@@ -529,6 +530,8 @@ static char* sys_prop_desc[] = {
 	,"Synchronet version notice (includes version and platform)"
 	,"Synchronet version number in decimal (e.g. 31301 for v3.13b)"
 	,"Synchronet version number in hexadecimal (e.g. 0x31301 for v3.13b)"
+	,"Synchronet Git repository branch name"
+	,"Synchronet Git repository commit hash"
 	,"platform description (e.g. 'Win32', 'Linux', 'FreeBSD')"
 	,"architecture description (e.g. 'i386', 'i686', 'x86_64')"
 	,"message base library version information"
@@ -2475,6 +2478,10 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id)
 	LAZY_INTEGER("version_num", VERSION_NUM);
 	LAZY_INTEGER("version_hex", VERSION_HEX);
 
+	/* Git repo details */
+	LAZY_STRING("git_branch", git_branch);
+	LAZY_STRING("git_hash", git_hash);
+
 	LAZY_STRING("platform", PLATFORM_DESC);
 	LAZY_STRING("architecture", ARCHITECTURE_DESC);
 	LAZY_STRFUNC("msgbase_lib", sprintf(str,"SMBLIB %s",smb_lib_ver()), str);
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index c40c3492b3a789b5395fe2b679e8fde4fc40ac46..f12b8945a5999e4f2eb26f0d5ed7743e1b2af428 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -1439,12 +1439,6 @@ extern char lastuseron[LEN_ALIAS+1];  /* Name of user last online */
 }
 #endif
 
-extern
-#ifdef __cplusplus
- "C"
-#endif
-	const char* beta_version;
-
 /* Global data */
 
 /* ToDo: These should be hunted down and killed */
diff --git a/src/sbbs3/ver.cpp b/src/sbbs3/ver.cpp
index 2d75a53c371c5ace5906a6e6b8f48cdc736509f1..ac196890851021b69e83f7836692e70310b1dc15 100644
--- a/src/sbbs3/ver.cpp
+++ b/src/sbbs3/ver.cpp
@@ -1,9 +1,4 @@
-/* ver.cpp */
-// vi: tabstop=4
-
-/* Synchronet version display */
-
-/* $Id: ver.cpp,v 1.31 2019/10/08 02:07:26 rswindell Exp $ */
+/* Synchronet version info */
 
 /****************************************************************************
  * @format.tab-size 4		(Plain Text/Source Code File Header)			*
@@ -18,21 +13,9 @@
  * See the GNU General Public License for more details: gpl.txt or			*
  * http://www.fsf.org/copyleft/gpl.html										*
  *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
  * For Synchronet coding style and modification guidelines, see				*
  * http://www.synchro.net/source.html										*
  *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
  * Note: If this box doesn't appear square, then you need to fix your tabs.	*
  ****************************************************************************/
 
@@ -40,8 +23,11 @@
 #include "ssl.h"
 #include "git_hash.h"
 #include "git_branch.h"
+#include "ver.h"
 
-const char* beta_version = " "; /* Space if non-beta, " beta" otherwise */
+extern "C" const char* git_hash = GIT_HASH;
+extern "C" const char* git_branch = GIT_BRANCH;
+extern "C" const char* beta_version = " "; /* Space if non-beta, " beta" otherwise */
 
 #if defined(_WINSOCKAPI_)
 	extern WSADATA WSAData;
diff --git a/src/sbbs3/ver.h b/src/sbbs3/ver.h
new file mode 100644
index 0000000000000000000000000000000000000000..288605929394d995049c524bd3b57766f985e89b
--- /dev/null
+++ b/src/sbbs3/ver.h
@@ -0,0 +1,36 @@
+/* Synchronet version info */
+
+/****************************************************************************
+ * @format.tab-size 4		(Plain Text/Source Code File Header)			*
+ * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
+ *																			*
+ * Copyright Rob Swindell - http://www.synchro.net/copyright.html			*
+ *																			*
+ * This program is free software; you can redistribute it and/or			*
+ * modify it under the terms of the GNU General Public License				*
+ * as published by the Free Software Foundation; either version 2			*
+ * of the License, or (at your option) any later version.					*
+ * See the GNU General Public License for more details: gpl.txt or			*
+ * http://www.fsf.org/copyleft/gpl.html										*
+ *																			*
+ * For Synchronet coding style and modification guidelines, see				*
+ * http://www.synchro.net/source.html										*
+ *																			*
+ * Note: If this box doesn't appear square, then you need to fix your tabs.	*
+ ****************************************************************************/
+
+#ifndef _VER_H_
+#define _VER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const char* git_hash;
+extern const char* git_branch;
+extern const char* beta_version;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* Don't add anything after this line */
\ No newline at end of file