diff --git a/source/texk/web2c/luatexdir/ChangeLog b/source/texk/web2c/luatexdir/ChangeLog
index ba163208a803aa8eacc4a1e9a877e15d40d9994b..868f64cc33f9c0562a06685f2dfdd6595db039ae 100644
--- a/source/texk/web2c/luatexdir/ChangeLog
+++ b/source/texk/web2c/luatexdir/ChangeLog
@@ -1,3 +1,6 @@
+2023-02-22  Luigi Scarso <luigi.scarso@gmail.com> 
+    *  fix latelua data reference (side effect of deferred late additions) (H.Hagen)
+
 2023-02-18  Luigi Scarso <luigi.scarso@gmail.com> 
     * Fixed the "Invalid unicode ranges in CMap beginbfrange operator bug" as in pdfTeX (Hàn Thế Thành)
 
diff --git a/source/texk/web2c/luatexdir/lua/luastuff.c b/source/texk/web2c/luatexdir/lua/luastuff.c
index feb6a88c8bf26e242fa001a6c940e9328a2557ba..4176431edf61270de6d09da04d591e596a4c6c1d 100644
--- a/source/texk/web2c/luatexdir/lua/luastuff.c
+++ b/source/texk/web2c/luatexdir/lua/luastuff.c
@@ -600,7 +600,7 @@ void late_lua(PDF pdf, halfword p)
     t = late_lua_type(p);
     if (t == normal) {
         /*tex sets |def_ref| */
-        expand_macros_in_tokenlist(p);
+        expand_macros_in_tokenlist(late_lua_data(p));
         luacall(def_ref, late_lua_name(p), false, p);
         flush_list(def_ref);
     } else if (t == lua_refid_call) {
diff --git a/source/texk/web2c/luatexdir/luatex_svnversion.h b/source/texk/web2c/luatexdir/luatex_svnversion.h
index 2866c4fa20ee1535a4b3f057b72805736c670e8b..9bca73d52a6cbbb8121bfef44534a9632e5bf11d 100644
--- a/source/texk/web2c/luatexdir/luatex_svnversion.h
+++ b/source/texk/web2c/luatexdir/luatex_svnversion.h
@@ -1,4 +1,4 @@
 #ifndef luatex_svn_revision_h
 #define luatex_svn_revision_h
-#define luatex_svn_revision 7561
+#define luatex_svn_revision 7562
 #endif
diff --git a/source/texk/web2c/luatexdir/tex/texnodes.c b/source/texk/web2c/luatexdir/tex/texnodes.c
index 76da864e5f4c25f7d0efa0d452bcf910aea97fc7..6e0ae1ff8ddba22594405f00e381c2a5408b74da 100644
--- a/source/texk/web2c/luatexdir/tex/texnodes.c
+++ b/source/texk/web2c/luatexdir/tex/texnodes.c
@@ -2201,13 +2201,15 @@ static void flush_node_wrapup_core(halfword p)
 {
     switch (subtype(p)) {
         case open_node:
-        case write_node:
         case close_node:
         case save_pos_node:
             break;
+        case write_node:
+            /* Not similar to elsewhere, already flushed? */
+            break;
         case special_node:
         case late_special_node:
-            delete_token_ref(write_tokens(p));
+            delete_token_ref(special_tokens(p));
             break;
         case late_lua_node:
             free_late_lua(p);
@@ -3482,11 +3484,11 @@ static void show_node_wrapup_core(int p)
             break;
         case special_node:
             tprint_esc("special");
-            print_mark(write_tokens(p));
+            print_mark(special_tokens(p));
             break;
         case late_special_node:
             tprint_esc("latespecial");
-            print_mark(write_tokens(p));
+            print_mark(late_lua_data(p));
             break;
         case late_lua_node:
             show_late_lua(p);