diff --git a/manual/luatex-introduction.tex b/manual/luatex-introduction.tex
index e6025cb36ba6e92e01671eb8d76fe0924f32cfbf..196a9af4ffa17f2085c23bedc705343326650d60 100644
--- a/manual/luatex-introduction.tex
+++ b/manual/luatex-introduction.tex
@@ -120,8 +120,10 @@ Taco Hoekwater \& Luigi Scarso
 
 \starttabulate
 \NC Version  \EQ \currentdate \NC \NR
-\NC \LUATEX  \EQ Snapshot \number\luatexversion.\luatexrevision \NC \NR
-\NC \CONTEXT \EQ \contextversion \NC \NR
+\NC \LUATEX  \EQ version  \cldcontext{status.luatex_version/100},
+                 revision \cldcontext{status.luatex_revision},
+                 number   \cldcontext{environment.luatexversion} \NC \NR
+\NC \CONTEXT \EQ MkIV \contextversion \NC \NR
 \stoptabulate
 
 \stopchapter
diff --git a/manual/luatex-tex.tex b/manual/luatex-tex.tex
index 017fa711c095196d0a4b8e07866c2909c4f288ae..73e141f4d8ac8fa4a2f6e9ff35c820ecf4fccd74 100644
--- a/manual/luatex-tex.tex
+++ b/manual/luatex-tex.tex
@@ -99,70 +99,74 @@ The current list is:
 
 \starttabulate[|lT|p|]
 \NC \rmbf key          \NC \bf explanation \NC \NR
-\NC pdf_gone           \NC written \PDF\ bytes \NC \NR
-\NC pdf_ptr            \NC not yet written \PDF\ bytes \NC \NR
+\NC banner             \NC terminal display banner \NC \NR
+\NC best_page_break    \NC the current best break (a node) \NR \NR
+\NC buf_size           \NC current allocated size of the line buffer \NC \NR
+\NC callbacks          \NC total number of executed callbacks so far \NC \NR
+\NC cs_count           \NC number of control sequences \NC \NR
+\NC dest_names_size    \NC \PDF\ destination table size \NC \NR
 \NC dvi_gone           \NC written \DVI\ bytes \NC \NR
 \NC dvi_ptr            \NC not yet written \DVI\ bytes \NC \NR
-\NC total_pages        \NC number of written pages \NC \NR
-\NC output_file_name   \NC name of the \PDF\ or \DVI\ file \NC \NR
-\NC log_name           \NC name of the log file \NC \NR
-\NC banner             \NC terminal display banner \NC \NR
-\NC var_used           \NC variable (one|-|word) memory in use \NC \NR
 \NC dyn_used           \NC token (multi|-|word) memory in use  \NC \NR
-\NC str_ptr            \NC number of strings \NC \NR
-\NC init_str_ptr       \NC number of \INITEX\ strings \NC \NR
-\NC max_strings        \NC maximum allowed strings \NC \NR
-\NC pool_ptr           \NC string pool index \NC \NR
-\NC init_pool_ptr      \NC \INITEX\ string pool index \NC \NR
-\NC pool_size          \NC current size allocated for string characters \NC \NR
-\NC node_mem_usage     \NC a string giving insight into currently used nodes \NC \NR
-\NC var_mem_max        \NC number of allocated words for nodes \NC \NR
-\NC fix_mem_max        \NC number of allocated words for tokens \NC \NR
+\NC filename           \NC name of the current input file \NC \NR
 \NC fix_mem_end        \NC maximum number of used tokens \NC \NR
-\NC cs_count           \NC number of control sequences \NC \NR
-\NC hash_size          \NC size of hash \NC \NR
-\NC hash_extra         \NC extra allowed hash \NC \NR
+\NC fix_mem_min        \NC minimum number of allocated words for tokens \NC \NR
+\NC fix_mem_max        \NC maximum number of allocated words for tokens \NC \NR
 \NC font_ptr           \NC number of active fonts \NC \NR
+\NC hash_extra         \NC extra allowed hash \NC \NR
+\NC hash_size          \NC size of hash \NC \NR
+\NC indirect_callbacks \NC number of those that were themselves a result of other callbacks (e.g. file readers) \NC \NR
+\NC ini_version        \NC \type {true} if this is an \INITEX\ run \NC \NR
+\NC init_pool_ptr      \NC \INITEX\ string pool index \NC \NR
+\NC init_str_ptr       \NC number of \INITEX\ strings \NC \NR
 \NC input_ptr          \NC th elevel of input we're at \NC \NR
+\NC inputid            \NC numeric id of the current input \NC \NR
+\NC largest_used_mark  \NC max referenced marks class \NC \NR
+\NC lasterrorcontext   \NC last error context string (with newlines) \NC \NR
+\NC lasterrorstring    \NC last \TEX\ error string \NC \NR
+\NC lastluaerrorstring \NC last \LUA\ error string \NC \NR
+\NC lastwarningstring  \NC last warning tag, normally an indication of in what part\NC \NR
+\NC lastwarningtag     \NC last warning string\NC \NR
+\NC linenumber         \NC location in the current input file \NC \NR
+\NC log_name           \NC name of the log file \NC \NR
+\NC luabytecode_bytes  \NC number of bytes in \LUA\ bytecode registers \NC \NR
+\NC luabytecodes       \NC number of active \LUA\ bytecode registers \NC \NR
+\NC luastate_bytes     \NC number of bytes in use by \LUA\ interpreters \NC \NR
+\NC luatex_engine      \NC the \LUATEX\ engine identifier \NC \NR
+\NC luatex_hashchars   \NC length to which \LUA\ hashes strings ($2^n$) \NC \NR
+\NC luatex_hashtype    \NC the hash method used (in \LUAJITTEX) \NC \NR
+\NC luatex_revision    \NC the \LUATEX\ revision string \NC \NR
+\NC luatex_revision    \NC the \LUATEX\ revision string \NC \NR
+\NC luatex_version     \NC the \LUATEX\ version number \NC \NR
+\NC max_buf_stack      \NC max used buffer position \NC \NR
 \NC max_in_stack       \NC max used input stack entries \NC \NR
 \NC max_nest_stack     \NC max used nesting stack entries \NC \NR
 \NC max_param_stack    \NC max used parameter stack entries \NC \NR
-\NC max_buf_stack      \NC max used buffer position \NC \NR
 \NC max_save_stack     \NC max used save stack entries \NC \NR
-\NC stack_size         \NC input stack size \NC \NR
+\NC max_strings        \NC maximum allowed strings \NC \NR
 \NC nest_size          \NC nesting stack size \NC \NR
-\NC param_size         \NC parameter stack size \NC \NR
-\NC buf_size           \NC current allocated size of the line buffer \NC \NR
-\NC save_size          \NC save stack size \NC \NR
+\NC node_mem_usage     \NC a string giving insight into currently used nodes \NC \NR
 \NC obj_ptr            \NC max \PDF\ object pointer \NC \NR
 \NC obj_tab_size       \NC \PDF\ object table size \NC \NR
-\NC pdf_os_cntr        \NC max \PDF\ object stream pointer \NC \NR
-\NC pdf_os_objidx      \NC \PDF\ object stream index \NC \NR
+\NC output_active      \NC \type {true} if the \type {\output} routine is active \NC \NR
+\NC output_file_name   \NC name of the \PDF\ or \DVI\ file \NC \NR
+\NC param_size         \NC parameter stack size \NC \NR
 \NC pdf_dest_names_ptr \NC max \PDF\ destination pointer \NC \NR
-\NC dest_names_size    \NC \PDF\ destination table size \NC \NR
+\NC pdf_gone           \NC written \PDF\ bytes \NC \NR
 \NC pdf_mem_ptr        \NC max \PDF\ memory used \NC \NR
 \NC pdf_mem_size       \NC \PDF\ memory size \NC \NR
-\NC largest_used_mark  \NC max referenced marks class \NC \NR
-\NC filename           \NC name of the current input file \NC \NR
-\NC inputid            \NC numeric id of the current input \NC \NR
-\NC linenumber         \NC location in the current input file \NC \NR
-\NC lasterrorstring    \NC last \TEX\ error string \NC \NR
-\NC lastluaerrorstring \NC last \LUA\ error string \NC \NR
-\NC lastwarningtag     \NC last warning string\NC \NR
-\NC lastwarningstring  \NC last warning tag, normally an indication of in what part\NC \NR
-\NC lasterrorcontext   \NC last error context string (with newlines) \NC \NR
-\NC luabytecodes       \NC number of active \LUA\ bytecode registers \NC \NR
-\NC luabytecode_bytes  \NC number of bytes in \LUA\ bytecode registers \NC \NR
-\NC luastate_bytes     \NC number of bytes in use by \LUA\ interpreters \NC \NR
-\NC output_active      \NC \type {true} if the \type {\output} routine is active \NC \NR
-\NC callbacks          \NC total number of executed callbacks so far \NC \NR
-\NC indirect_callbacks \NC number of those that were themselves
-                           a result of other callbacks (e.g. file readers) \NC \NR
-\NC luatex_version     \NC the \LUATEX\ version number \NC \NR
-\NC luatex_revision    \NC the \LUATEX\ revision string \NC \NR
-\NC ini_version        \NC \type {true} if this is an \INITEX\ run \NC \NR
-\NC shell_escape       \NC \type {0} means disabled, \type {1} is restricted and
-                           \type {2} means anything is permitted \NC \NR
+\NC pdf_os_cntr        \NC max \PDF\ object stream pointer \NC \NR
+\NC pdf_os_objidx      \NC \PDF\ object stream index \NC \NR
+\NC pdf_ptr            \NC not yet written \PDF\ bytes \NC \NR
+\NC pool_ptr           \NC string pool index \NC \NR
+\NC pool_size          \NC current size allocated for string characters \NC \NR
+\NC save_size          \NC save stack size \NC \NR
+\NC shell_escape       \NC \type {0} means disabled, \type {1} is restricted and \type {2} means anything is permitted \NC \NR
+\NC stack_size         \NC input stack size \NC \NR
+\NC str_ptr            \NC number of strings \NC \NR
+\NC total_pages        \NC number of written pages \NC \NR
+\NC var_mem_max        \NC number of allocated words for nodes \NC \NR
+\NC var_used           \NC variable (one|-|word) memory in use \NC \NR
 \stoptabulate
 
 The error and warning messages can be wiped with the \type {resetmessages}
diff --git a/manual/luatex.pdf b/manual/luatex.pdf
index 9ec2f5fce5207f7b9cca052a9e52ab88e6b5e405..80b672892462b0f72976e35b39855ee159692ee2 100644
Binary files a/manual/luatex.pdf and b/manual/luatex.pdf differ
diff --git a/manual/luatex.tex b/manual/luatex.tex
index bc4a4b31efe4df4fe68ee19ecacf806b805aa816..1ccc9b7a59a39552d9eaac9a2a7bafcd5174e6a6 100644
--- a/manual/luatex.tex
+++ b/manual/luatex.tex
@@ -30,7 +30,7 @@
 
 \startdocument
   [status=intermediate release,
-   version=1.0.3]
+   version=1.0.4]
 
 \component luatex-titlepage
 
diff --git a/source/texk/web2c/luatexdir/NEWS b/source/texk/web2c/luatexdir/NEWS
index d01f0744a970a8c8e1dda4954c79852cc2c701d7..3bd279cfccfbb2681e0038bd578eb38f27328c6c 100644
--- a/source/texk/web2c/luatexdir/NEWS
+++ b/source/texk/web2c/luatexdir/NEWS
@@ -1,6 +1,51 @@
 
 This file is in the public domain.
 
+==============================================================
+LuaTeX Release 1.0.3  was released 2017021514
+==============================================================
+
+This is a minor upgrade and probably this version will go on texlive. There are a couple
+of fixes and additions.
+- We added a few a few more helpers in the pdf namespace (like set|get]gentounicode,
+  [set|get]omitcidset and set|get]decimaldigits. Some helpers were moved from the tex
+  to the pdf namespace.
+
+- We added a build_page_insert callback for inserts so that one can for instance adapt
+  spacing on demand.
+
+- On the agenda has been some more control over word start and end in hyphenation and
+  this is now possible via hyphenationbounds. We also updated the manual with some more
+  details.
+
+- An old tracker item with respect to control over spacing around math was revived and
+  has resulted in mathsurroundmode (one can wonder how useful this is).
+
+- We improved the resolution detection in included jpeg images.
+
+
+- An ffi library has been added to luatex so that it is more in sync with luajittex. This
+  permits easy and flexible loading of libraries. Our policy is to make luatex as lean
+  as possible with no dependencies and this is a step towards that. Eventually we hope
+  to support all relevant platforms.
+
+- The glue and skip register accessors have been improved as a step in freeing the user
+  from glue spec management.
+
+- We added a few more getters and setters for nodes in order to get a more consistent
+  set.
+
+- Irrelevant fields have been removed from the status table and an engine identifier
+  has been added.
+
+- Of course there are numerous fixes and improvements but none of these have consequences
+  for the interfaces.
+
+- The manual has been updated but will be improved over time.
+
+
+
+
 ==============================================================
 LuaTeX Release 0.95 for TeX Live 2016 was released 2016042515
 ==============================================================
diff --git a/source/texk/web2c/luatexdir/lua/lnodelib.c b/source/texk/web2c/luatexdir/lua/lnodelib.c
index a6fc98aba17086ee0d1781092bee36e9bd7eebea..dbe195ff2c0d863ed2fa7a23592289b3e41ea318 100644
--- a/source/texk/web2c/luatexdir/lua/lnodelib.c
+++ b/source/texk/web2c/luatexdir/lua/lnodelib.c
@@ -538,7 +538,7 @@ static int lua_nodelib_direct_getcomponents(lua_State * L)
 {
     halfword n = lua_tointeger(L, 1);
     if ((n) && (type(n) == glyph_node)) {
-        lua_pushinteger(L, lig_ptr(n));
+        nodelib_pushdirect_or_nil(lig_ptr(n));
     } else {
         lua_pushnil(L);
     }
diff --git a/source/texk/web2c/luatexdir/lua/lstatslib.c b/source/texk/web2c/luatexdir/lua/lstatslib.c
index 7c6e1bda2b8eddd6005bfe7b87a2fe3a5b5cf0ac..7473ca214a4da8c29904c468cdab7fb77379dee1 100644
--- a/source/texk/web2c/luatexdir/lua/lstatslib.c
+++ b/source/texk/web2c/luatexdir/lua/lstatslib.c
@@ -116,6 +116,13 @@ static const char *luatexrevision(void)
     return (const char *) (strrchr(luatex_version_string, '.') + 1);
 }
 
+static const char *getenginename(void)
+{
+    return engine_name;
+}
+
+
+
 static lua_Number get_luatexhashchars(void)
 {
   return (lua_Number) LUAI_HASHLIMIT;
@@ -217,8 +224,6 @@ static lua_Number shell_escape_state(void)
     }
 }
 
-static int luastate_max = 1;    /* fixed value */
-
 /* temp, for backward compat */
 static int init_pool_ptr = 0;
 
@@ -250,9 +255,10 @@ static struct statistic stats[] = {
     {"log_name", 'S', (void *) &getlogname},
     {"banner", 'S', (void *) &getbanner},
     {"luatex_version", 'G', &get_luatexversion},
-    {"luatex_revision", 'S', (void *) &luatexrevision},
+    {"luatex_revision", 'S', (void *) &luatexrevision}, 
     {"luatex_hashtype", 'S', (void *) &get_luatexhashtype},
     {"luatex_hashchars", 'N',  &get_luatexhashchars},
+    {"luatex_engine", 'S', (void *) &getenginename},
 
     {"ini_version", 'b', &ini_version},
 
@@ -302,7 +308,6 @@ static struct statistic stats[] = {
     {"largest_used_mark", 'g', &biggest_used_mark},
     {"luabytecodes", 'g', &luabytecode_max},
     {"luabytecode_bytes", 'g', &luabytecode_bytes},
-    {"luastates", 'g', &luastate_max},
     {"luastate_bytes", 'g', &luastate_bytes},
     {"callbacks", 'g', &callback_count},
     {"indirect_callbacks", 'g', &saved_callback_count},
diff --git a/source/texk/web2c/luatexdir/lua/luatex-api.h b/source/texk/web2c/luatexdir/lua/luatex-api.h
index 4ef40be8b71e44ae07f114f38f41ccb94c902104..f7c612ce204d4f180ec3e226a8bda0991ffa8e51 100644
--- a/source/texk/web2c/luatexdir/lua/luatex-api.h
+++ b/source/texk/web2c/luatexdir/lua/luatex-api.h
@@ -189,6 +189,7 @@ extern int callback_count;
 extern int saved_callback_count;
 
 extern const char *luatex_banner;
+extern const char *engine_name;
 
 /* luastuff.h */
 
diff --git a/source/texk/web2c/luatexdir/luatex.c b/source/texk/web2c/luatexdir/luatex.c
index 7933d17d6df1faa48c7c0ed43ad4bee73b873ccb..2b924cac350b4f1c8a1a276c7ce4a35de025a284 100644
--- a/source/texk/web2c/luatexdir/luatex.c
+++ b/source/texk/web2c/luatexdir/luatex.c
@@ -30,7 +30,7 @@
 
 int luatex_version = 100;        /* \.{\\luatexversion}  */
 int luatex_revision = '3';      /* \.{\\luatexrevision}  */
-int luatex_date_info = 2017011800;     /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/
+int luatex_date_info = 2017021514;     /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/
 const char *luatex_version_string = "1.0.3";
 const char *engine_name = my_name;     /* the name of this engine */