diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 746092885a2f54767fb3aca8ddabd0f242ed3cf8..754050900a85f3eafffa4d9ab85d32e5d0b18ed3 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -462,11 +462,20 @@ js_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
 	lprintf("%04d %s !JavaScript %s%s%s: %s",sock,prot,warning,file,line,message);
 }
 
+static JSClass js_server_class = {
+        "Server",0, 
+        JS_PropertyStub,JS_PropertyStub,JS_PropertyStub,JS_PropertyStub, 
+        JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub 
+}; 
+
 static JSContext* 
 js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client, JSObject** glob)
 {
+	char		ver[256];
 	JSContext*	js_cx;
 	JSObject*	js_glob;
+	JSObject*	server;
+	jsval		val;
 	BOOL		success=FALSE;
 
 //	lprintf("%04d JavaScript: Initializing context",sock);
@@ -517,6 +526,20 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client,
 //		lprintf("%04d JavaScript: Initializing System object",sock);
 		if(js_CreateSystemObject(js_cx, js_glob, &scfg, uptime)==NULL) 
 			break;
+		
+		/* server object */
+		if((server=JS_DefineObject(js_cx, js_glob, "server", &js_server_class
+			,NULL,0))==NULL)
+			break;
+
+		sprintf(ver,"Synchronet Services v%s",SERVICES_VERSION);
+		val = STRING_TO_JSVAL(JS_NewStringCopyZ(js_cx, ver));
+		if(!JS_SetProperty(js_cx, server, "version", &val))
+			break;
+
+		val = STRING_TO_JSVAL(JS_NewStringCopyZ(js_cx, services_ver()));
+		if(!JS_SetProperty(js_cx, server, "version_detail", &val))
+			break;
 
 		if(glob!=NULL)
 			*glob=js_glob;