diff --git a/src/http-mserv.c b/src/http-mserv.c
index b0ef37fa169bf8857e70b4497fa769eafb652ddf..7b418c99ad127461099a68c0452980dff18c78b2 100644
--- a/src/http-mserv.c
+++ b/src/http-mserv.c
@@ -65,6 +65,8 @@ static I_mutex hms_api_mutex;
 
 static char *hms_server_token;
 
+static char hms_useragent[512];
+
 struct HMS_buffer
 {
 	CURL *curl;
@@ -81,6 +83,27 @@ Contact_error (void)
 	);
 }
 
+static void
+get_user_agent(char *buf, size_t len)
+{
+#if defined(__STDC__) && __STDC_VERSION__ >= 201112L
+	if (sprintf_s(buf, len, "%s/%s (%s; %s; %i; %i) SRB2BASE/%i", SRB2APPLICATION, VERSIONSTRING, compbranch, comprevision,  MODID, MODVERSION, CODEBASE) < 1)
+		I_Error("http-mserv: get_user_agent failed");
+#else
+	if (sprintf(buf, "%s/%s (%s; %s; %i; %i) SRB2BASE/%i", SRB2APPLICATION, VERSIONSTRING, compbranch, comprevision,  MODID, MODVERSION, CODEBASE) < 0)
+		I_Error("http-mserv: get_user_agent failed");
+#endif
+}
+
+static void
+init_user_agent_once(void)
+{
+	if (hms_useragent[0] != '\0')
+		return;
+	
+	get_user_agent(hms_useragent, 512);
+}
+
 static size_t
 HMS_on_read (char *s, size_t _1, size_t n, void *userdata)
 {
@@ -156,6 +179,8 @@ HMS_connect (const char *format, ...)
 	I_lock_mutex(&hms_api_mutex);
 #endif
 
+	init_user_agent_once();
+
 	seek = strlen(hms_api) + 1;/* + '/' */
 
 	va_start (ap, format);
@@ -202,6 +227,8 @@ HMS_connect (const char *format, ...)
 	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HMS_on_read);
 	curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
 
+	curl_easy_setopt(curl, CURLOPT_USERAGENT, hms_useragent);
+
 	curl_free(quack_token);
 	free(url);