diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index c501d54082da7bb03e3cb17a1db09799a1dfab40..efd01dc983c9838bd871fb2808738dea35925a12 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -179,6 +179,7 @@ typedef struct  {
 	size_t		post_len;
 	int			dynamic;
 	struct log_data	*ld;
+	char		request_line[MAX_REQUEST_LINE+1];
 
 	/* CGI parameters */
 	char		query_str[MAX_REQUEST_LINE+1];
@@ -1378,6 +1379,16 @@ static void js_add_queryval(http_session_t * session, char *key, char *value)
 	JS_SetElement(session->js_cx, keyarray, alen, &val);
 }
 
+static void js_add_request_prop(http_session_t * session, char *key, char *value)  
+{
+	JSString*	js_str;
+
+	if((js_str=JS_NewStringCopyZ(session->js_cx, value))==NULL)
+		return;
+	JS_DefineProperty(session->js_cx, session->js_request, key, STRING_TO_JSVAL(js_str)
+		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
+}
+
 static void js_add_header(http_session_t * session, char *key, char *value)  
 {
 	JSString*	js_str;
@@ -1500,6 +1511,7 @@ static BOOL parse_headers(http_session_t * session)
 				session->req.post_len=0;
 			session->req.post_data[session->req.post_len]=0;
 			if(session->req.dynamic==IS_SSJS || session->req.dynamic==IS_JS)  {
+				js_add_request_prop(session,"post_data",session->req.post_data);
 				js_parse_query(session,session->req.post_data);
 			}
 		}
@@ -1588,6 +1600,7 @@ static char *get_request(http_session_t * session, char *req_line)
 	SKIP_WHITESPACE(req_line);
 	SAFECOPY(session->req.virtual_path,req_line);
 	strtok(session->req.virtual_path," \t");
+	SAFECOPY(session->req.request_line,session->req.virtual_path);
 	retval=strtok(NULL," \t");
 	strtok(session->req.virtual_path,"?");
 	query=strtok(NULL,"");
@@ -1740,6 +1753,7 @@ static BOOL get_req(http_session_t * session, char *request_line)
 						break;
 					case IS_JS:
 					case IS_SSJS:
+						js_add_request_prop(session,"query_string",session->req.query_str);
 						js_parse_query(session,session->req.query_str);
 						break;
 				}
@@ -2304,20 +2318,9 @@ JSObject* DLLCALL js_CreateHttpRequestObject(JSContext* cx
 		request = JS_DefineObject(cx, parent, "http_request", NULL
 									, NULL, JSPROP_ENUMERATE|JSPROP_READONLY);
 
-	if((js_str=JS_NewStringCopyZ(session->js_cx, session->req.extra_path_info))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, request, "path_info", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
-
-	if((js_str=JS_NewStringCopyZ(session->js_cx, methods[session->req.method]))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, request, "method", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
-
-	if((js_str=JS_NewStringCopyZ(session->js_cx, session->req.virtual_path))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, request, "virtual_path", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
+	js_add_request_prop(session,"path_info",session->req.extra_path_info);
+	js_add_request_prop(session,"method",methods[session->req.method]);
+	js_add_request_prop(session,"virtual_path",session->req.virtual_path);
 
 	/* Return existing object if it's already been created */
 	if(JS_GetProperty(cx,request,"query",&val) && val!=JSVAL_VOID)  {
@@ -2556,35 +2559,13 @@ static BOOL exec_ssjs(http_session_t* session)  {
 	char		str[MAX_REQUEST_LINE+1];
 	int			i;
 
-	if((js_str=JS_NewStringCopyZ(session->js_cx, session->req.physical_path))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, session->js_request, "real_path", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
-
-	if((js_str=JS_NewStringCopyZ(session->js_cx, session->req.ars))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, session->js_request, "ars", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
-
-	if((js_str=JS_NewStringCopyZ(session->js_cx, session->req.host))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, session->js_request, "host", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
-
-	if((js_str=JS_NewStringCopyZ(session->js_cx, http_vers[session->http_ver]))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, session->js_request, "http_ver", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
-
-	if((js_str=JS_NewStringCopyZ(session->js_cx, session->host_ip))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, session->js_request, "remote_ip", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
-
-	if((js_str=JS_NewStringCopyZ(session->js_cx, session->host_name))==NULL)
-		return(FALSE);
-	JS_DefineProperty(session->js_cx, session->js_request, "remote_host", STRING_TO_JSVAL(js_str)
-		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
+	js_add_request_prop(session,"real_path",session->req.physical_path);
+	js_add_request_prop(session,"ars",session->req.ars);
+	js_add_request_prop(session,"request_string",session->req.request_line);
+	js_add_request_prop(session,"host",session->req.host);
+	js_add_request_prop(session,"http_ver",http_vers[session->http_ver]);
+	js_add_request_prop(session,"remote_ip",session->host_ip);
+	js_add_request_prop(session,"remote_host",session->host_name);
 
 	do {
 		/* RUN SCRIPT */