diff --git a/src/sbbs3/js_console.cpp b/src/sbbs3/js_console.cpp
index 118f636d037f7c54276d7a75c7b13656f122d168..9a6a0d71bd3a53c149f9962d83e63eb72a91580c 100644
--- a/src/sbbs3/js_console.cpp
+++ b/src/sbbs3/js_console.cpp
@@ -2308,6 +2308,24 @@ js_progress(JSContext *cx, uintN argc, jsval *arglist)
     return JS_TRUE;
 }
 
+static JSBool
+js_flush(JSContext *cx, uintN argc, jsval *arglist)
+{
+	sbbs_t*		sbbs;
+	jsrefcount	rc;
+
+	if((sbbs=(sbbs_t*)js_GetClassPrivate(cx, JS_THIS_OBJECT(cx, arglist), &js_console_class))==NULL)
+		return JS_FALSE;
+
+	rc=JS_SUSPENDREQUEST(cx);
+	SetEvent(sbbs->outbuf.highwater_event);
+	SetEvent(sbbs->outbuf.data_event);
+	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
+	JS_RESUMEREQUEST(cx, rc);
+
+    return JS_TRUE;
+}
+
 static jsSyncMethodSpec js_console_functions[] = {
 	{"inkey",			js_inkey,			0, JSTYPE_STRING,	JSDOCSTR("[mode=<tt>K_NONE</tt>] [,timeout=<tt>0</tt>]")
 	,JSDOCSTR("get a single key with optional <i>timeout</i> in milliseconds (defaults to 0, for no wait).<br>"
@@ -2581,6 +2599,10 @@ static jsSyncMethodSpec js_console_functions[] = {
 		,JSDOCSTR("removes a callback installed by once")
 		,31900
 		},
+	{"flush",		js_flush,			2,	JSTYPE_VOID,	JSDOCSTR("type, id")
+		,JSDOCSTR("flushes the output buffer")
+		,31900
+		},
 	{0}
 };