diff --git a/source/texk/web2c/luatexdir/luatex.c b/source/texk/web2c/luatexdir/luatex.c
index f434524c82164ec7e5785b04a079e54906c57675..7474ce3323b043eedcd158fbdff2712dbd5b4161 100644
--- a/source/texk/web2c/luatexdir/luatex.c
+++ b/source/texk/web2c/luatexdir/luatex.c
@@ -28,10 +28,10 @@
 
 #define TeX
 
-int luatex_version = 87;        /* \.{\\luatexversion}  */
-int luatex_revision = '2';      /* \.{\\luatexrevision}  */
-int luatex_date_info = 2016011100;     /* the compile date is now hardwired */
-const char *luatex_version_string = "beta-0.87.2";
+int luatex_version = 88;        /* \.{\\luatexversion}  */
+int luatex_revision = '0';      /* \.{\\luatexrevision}  */
+int luatex_date_info = 2016011500;     /* the compile date is now hardwired */
+const char *luatex_version_string = "beta-0.88.0";
 const char *engine_name = my_name;     /* the name of this engine */
 
 #include <kpathsea/c-ctype.h>
diff --git a/source/texk/web2c/luatexdir/tex/inputstack.w b/source/texk/web2c/luatexdir/tex/inputstack.w
index 273863d20425b39b465fc033d7a11f8cf0a08c9d..be4cf9378e4a5f0018c27a1608b8698eafa09d65 100644
--- a/source/texk/web2c/luatexdir/tex/inputstack.w
+++ b/source/texk/web2c/luatexdir/tex/inputstack.w
@@ -662,6 +662,15 @@ a linked list of variable size nodes representing lines not yet
 processed: the |subtype| field contains the size of this node,
 all the following words contain ASCII codes.
 
+/*
+
+    hh: todo: if this is really critical code (which it isn't) then we can
+    consider a c stack and store a pointer to a line in the line node instead
+    which saves splitting here and reconstructing later.
+
+*/
+
+
 @c
 halfword pseudo_files; /* stack of pseudo files */
 
@@ -696,13 +705,12 @@ static halfword string_to_pseudo(str_number str, int nl)
         w.b2 = (quarterword) (l > m ? s[m++] : ' ');
         w.b3 = (quarterword) (l > m ? s[m] : ' ');
         varmem[++i].qqqq = w;
-        if (pseudo_lines(h) == null) {
+        if (q == null) {
             pseudo_lines(h) = r;
-            q = r;
         } else {
-            couple_nodes(q, r);
+            vlink(q) = r ; /* no prev node here so no couple_nodes !*/
         }
-        q = vlink(q);
+        q = r ;
         if (s[l] == nl)
             l++;
     }