diff --git a/xtrn/syncwall/syncwall.js b/xtrn/syncwall/syncwall.js
index e8b15dbaba264e3901646259543fd1f58703fb6c..482715e9df0f6d305c6cb728873d60c8e3b37caa 100644
--- a/xtrn/syncwall/syncwall.js
+++ b/xtrn/syncwall/syncwall.js
@@ -57,6 +57,14 @@ function putCh(ch) {
 	return;
 }
 
+function cleanUp() {
+	frame.close();
+	ansi.close();
+	ansiClient.unsubscribe();
+	ansiClient.disconnect();
+	console.clear();
+}
+
 // This may be needed if canvas data starts to exceed the receive limit
 /*
 var canvas = ansiClient.keys("syncwall", "canvas." + monthYear, 1);
@@ -73,7 +81,10 @@ var canvas = ansiClient.read("syncwall", "canvas." + monthYear, 1);
 if(canvas !== undefined) {
 	for(var c in canvas) {
 		putCh(canvas[c]);
-		mswait(chDelay);
+		if(ascii(console.inkey(K_NONE, chDelay)) == 27) {
+			cleanUp();
+			exit();
+		}
 	}
 }
 // And stop commenting here.
@@ -98,6 +109,4 @@ while(ascii(userInput) != 27) {
 	ansiClient.write("syncwall", "canvas." + monthYear + "." + pName, ch, 2);
 }
 
-ansi.close();
-ansiClient.unsubscribe();
-ansiClient.disconnect();
+cleanUp();