diff --git a/xtrn/mrc/mrc-client.js b/xtrn/mrc/mrc-client.js
index 98c4b3efeec4e3096562d9b65ab2928a4069e5d6..c5cc62ba8e0f2afd12ebba032e0da7a922e6c4dd 100644
--- a/xtrn/mrc/mrc-client.js
+++ b/xtrn/mrc/mrc-client.js
@@ -13,6 +13,8 @@ load('scrollbar.js');
 load('inputline.js');
 load(js.startup_dir + 'mrc-session.js');
 
+var input_state = 'chat';
+
 var f = new File(js.startup_dir + 'mrc-client.ini');
 f.open('r');
 const settings = {
@@ -114,13 +116,26 @@ function init_display() {
     return f;
 }
 
+function append_message(frames, msg) {
+    const top = frames.output.offset.y;
+    if (frames.output.data_height > frames.output.height) {
+        while (frames.output.down()) {
+            yield();
+        }
+        frames.output.gotoxy(1, frames.output.height);
+    }
+    frames.output.putmsg(msg + '\r\n');
+    frames.output.scroll(0, -1);
+    if (input_state == 'scroll') frames.output.scrollTo(0, top);
+}
+
 function display_message(frames, msg, colour) {
-    const body = pipe_to_ctrl_a(msg.body || '').split(' ');
-    frames.output.putmsg(body[0] + '\1n\1w: ' + body.slice(1).join(' ') + '\1n\1w\r\n');
+    const body = pipe_to_ctrl_a(truncsp(msg.body) || '').split(' ');
+    append_message(frames, body[0] + '\1n\1w: ' + body.slice(1).join(' ') + '\1n\1w');
 }
 
 function display_server_message(frames, msg) {
-    frames.output.putmsg('\1h\1w' + pipe_to_ctrl_a(msg || '') + '\r\n');
+    append_message(frames, '\1h\1w' + pipe_to_ctrl_a(truncsp(msg) || ''));
 }
 
 function display_title(frames, room, title) {
@@ -148,7 +163,6 @@ function new_alias() {
 function main() {
 
     var msg;
-    var input_state = 'chat';
     var break_loop = false;
     const nick_colours = {};
 
@@ -228,7 +242,7 @@ function main() {
     while (!js.terminated && !break_loop) {
         session.cycle();
         user_input = inputline.getkey();
-        if (typeof user_input != 'undefined') {
+        if (typeof user_input == 'string') {
             if (input_state == 'chat') {
                 if (user_input.substring(0, 1) == '/') { // It's a command
                     cmd = user_input.split(' ');