diff --git a/pub/lib/node.cpp b/pub/lib/node.cpp
index da8ac38cdfe5ddbe1261f91ce6622534dcb03b96..968962fafb02b74fa1b6b83bbb4075023d0bbcaa 100644
--- a/pub/lib/node.cpp
+++ b/pub/lib/node.cpp
@@ -738,6 +738,16 @@ const RObj CNodeIdxK::tree_val( const CContext& ctx ) const
 }
 
 
+//**************************************************************************************************
+//* CNodeSession: session-wide workspace information
+//**************************************************************************************************
+
+const RObj CNodeSessionNK::tree_val( const CContext& ctx ) const
+{
+    return RObjInt( new CObjInt( NOlm::mem_size() ) );
+}
+
+
 //**************************************************************************************************
 //* CNodeIva: indexed variable node
 //**************************************************************************************************
@@ -760,10 +770,6 @@ const RObj CNodeIva::tree_val( const CContext& ctx ) const
     if ( !(var->pointwise() || var->slicewise() || var->filewise()) && ref->tk )
         throw "reference "+var->var_info()+" does not admit an index";
 
-    // sessionwide references
-    if  ( var->categ == VCateg::NK )
-        return RObjInt( new CObjInt( NOlm::mem_size() ) );
-
     // Get k from context:
     int k = ref->get_k( ctx );
 
diff --git a/pub/lib/xax_lex.lpp b/pub/lib/xax_lex.lpp
index 9083f2fb633d95ffa6a1631b1552bc9c18e006d4..b55b40116d2ebd8a49c65de3c64f32115c81be47 100644
--- a/pub/lib/xax_lex.lpp
+++ b/pub/lib/xax_lex.lpp
@@ -52,6 +52,9 @@ struct xaxtype {
 RNode node_I( new CNodeIdxI() );
 RNode node_J( new CNodeIdxJ() );
 RNode node_K( new CNodeIdxK() );
+
+RNode node_NK( new CNodeSessionNK() );
+
 RNode node_E( new CNodeVal( M_E ) );
 RNode node_PI( new CNodeVal( M_PI ) );
 RNode node_INF( new CNodeVal( INFINITY ) );
@@ -96,6 +99,10 @@ i {
         xaxlval->t = node_I;
         return VAL; }
 
+nk {
+        xaxlval->t = node_NK;
+        return VAL; }
+
 [xy]|dy|n[ijk]|([zpr]{DIG}+)|outcome|chi2|R2 {
         xaxlval->v = PVar( new CVar(xaxtext) );
         return REF; }
diff --git a/pub/lib/xax_yacc.ypp b/pub/lib/xax_yacc.ypp
index 3ff9e3259078e8760b80203ded5df04efbc40b05..4460709024bd4090629acdee0d51a3b13aa1090e 100644
--- a/pub/lib/xax_yacc.ypp
+++ b/pub/lib/xax_yacc.ypp
@@ -74,7 +74,7 @@ int xaxlex(YYSTYPE *xaxlval); // created by lex.l
 %left BOP_PM  /* error */
 
 /* other tokens created by xax_lex.lpp: */
-%token VAL REF DUMMY CEV FNCT GENI CVIN END CONV PCONV DIRAC IDF
+%token VAL REF0 REF DUMMY CEV FNCT GENI CVIN END CONV PCONV DIRAC IDF
 
 /* Grammar follows */