diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
index 888bcdc..010de1a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
@@ -526,10 +526,10 @@
 
         val fun = id.getText
 
-        def ensureStack(min: Int): Unit = if (stack.size < min) throw rtMissingParamError(min, fun)
         def popMarker(argNum: Int): Unit = if (pop1() != stack.PLIST_MARKER) throw rtTooManyParamsError(argNum, fun)
         def arg[X](argNum: Int, f: () => X): X = {
-            ensureStack(argNum + 1) // +1 for the frame marker.
+            if (stack.size < argNum + 1) // +1 for stack frame marker.
+                throw rtMissingParamError(argNum, fun)
 
             val x = f()
 
@@ -1074,26 +1074,22 @@
         }
 
         def doIsBefore(f: (NCToken, String) => Boolean): Unit = {
-            val (x1, x2) = arg2()
+            val x = arg1()
 
             stack.push(() => {
-                val (t, a, n) = extract2(x1, x2)
+                val Z(arg, n) = x()
 
-                val tok = toToken(t)
-
-                Z(idlCtx.toks.exists(t => t.getIndex > tok.getIndex && f(t, toStr(a))), n)
+                Z(idlCtx.toks.exists(t => t.getIndex > tok.getIndex && f(t, toStr(arg))), n)
             })
         }
 
         def doIsAfter(f: (NCToken, String) => Boolean): Unit = {
-            val (x1, x2) = arg2()
+            val x = arg1()
 
             stack.push(() => {
-                val (t, a, n) = extract2(x1, x2)
+                val Z(arg, n) = x()
 
-                val tok = toToken(t)
-
-                Z(idlCtx.toks.exists(t => t.getIndex < tok.getIndex && f(t, toStr(a))), n)
+                Z(idlCtx.toks.exists(t => t.getIndex < tok.getIndex && f(t, toStr(arg))), n)
             })
         }
 
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsToken.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsToken.scala
index 347f63a..4e768f9 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsToken.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/idl/compiler/functions/NCIdlFunctionsToken.scala
@@ -45,7 +45,7 @@
     private def mkMeta(truth: String):TestDesc = TestDesc(truth = truth, token = mkToken(meta = meta))
 
     @Test
-    def test(): Unit =
+    def testMainTokenProperties(): Unit =
         test(
             TestDesc(
                 truth = "tok_id() == 'a'",
@@ -57,7 +57,7 @@
             mkMeta(truth = s"tok_sparsity() == ${meta("nlpcraft:nlp:sparsity")}"),
             mkMeta(truth = s"tok_unid() == '${meta("nlpcraft:nlp:unid")}'"),
             TestDesc(
-                truth = s"tok_is_abstract() == true",
+                truth = s"tok_is_abstract()",
                 token = mkToken(`abstract` = true)
             ),
             mkMeta(truth = s"tok_is_abstract() == false"),
@@ -70,11 +70,11 @@
             mkMeta(truth = s"tok_is_stopword() == ${meta("nlpcraft:nlp:stopword")}"),
             mkMeta(truth = s"tok_is_swear() == ${meta("nlpcraft:nlp:swear")}"),
             TestDesc(
-                truth = s"tok_is_user() == true",
+                truth = s"tok_is_user()",
                 token = mkToken(id = "aa")
             ),
             TestDesc(
-                truth = s"tok_is_user() == false",
+                truth = s"!tok_is_user()",
                 token = mkToken(id = "nlpcraft:nlp")
             ),
             mkMeta(truth = s"tok_is_wordnet() == ${meta("nlpcraft:nlp:dict")}"),
@@ -110,22 +110,56 @@
         )
 
     @Test
-    def testTokenOrder(): Unit = {
+    def testTokenFirstLast(): Unit = {
         val tok = mkToken(id = "a")
 
         tok.getMetadata.put("nlpcraft:nlp:index", 0)
 
         test(
             TestDesc(
-                truth = "tok_is_first() == true",
+                truth = "tok_is_first()",
                 token = tok,
                 idlCtx = mkIdlContext(toks = Seq(tok))
             ),
             TestDesc(
-                truth = "tok_is_last() == true",
+                truth = "tok_is_last()",
                 token = tok,
                 idlCtx = mkIdlContext(toks = Seq(tok))
             )
         )
     }
+
+    @Test
+    def testTokenBeforeId(): Unit = {
+        val tok1 = mkToken(id = "1")
+        val tok2 = mkToken(id = "2")
+
+        tok1.getMetadata.put("nlpcraft:nlp:index", 0)
+        tok2.getMetadata.put("nlpcraft:nlp:index", 1)
+
+        test(
+            TestDesc(
+                truth = "tok_is_before_id('2')",
+                token = tok1,
+                idlCtx = mkIdlContext(Seq(tok1, tok2))
+            )
+        )
+    }
+
+    @Test
+    def testTokenAfterId(): Unit = {
+        val tok1 = mkToken(id = "1")
+        val tok2 = mkToken(id = "2")
+
+        tok1.getMetadata.put("nlpcraft:nlp:index", 0)
+        tok2.getMetadata.put("nlpcraft:nlp:index", 1)
+
+        test(
+            TestDesc(
+                truth = "tok_is_after_id('1')",
+                token = tok2,
+                idlCtx = mkIdlContext(Seq(tok1, tok2))
+            )
+        )
+    }
 }
