diff --git a/test/validate/userfunc.st b/test/validate/userfunc.st
index ad9f7efb204fa98c3aa1f903b1cfa153f905fa81..2596cce3d3ea8072b60866f865eee6261ab9746e 100644
--- a/test/validate/userfunc.st
+++ b/test/validate/userfunc.st
@@ -11,31 +11,27 @@ program userfuncTest
 option +s;
 
 %{
-static void incr(SS_ID ssId, int *pv, VAR_ID v)
-{
-    seq_pvGet(ssId, v, SYNC);
-    *pv += 1;
-    seq_pvPut(ssId, v, SYNC);
-}
+static void incr(SS_ID ssId, int *pv, VAR_ID v);
+static void set_i(SEQ_VARS *const pVar, int value);
 }%
 
 int i = 0;
 assign i;
 monitor i;
 
-foreign pVar, ssId;
-
 entry {
-    seq_test_init(10);
+    seq_test_init(20);
 }
 
 ss myss {
     state doit {
         int i_saved;
         when (delay(0.1)) {
-            incr(ssId, &i, pvIndex(i));
+            incr(ssId(), &i, pvIndex(i));
             testOk1(i_saved == i-1);
             i_saved = i;
+            set_i(pVar(), 1);
+            testOk1(i == 1);
         } state doit
         when (i == 10) {
         } exit
@@ -45,3 +41,17 @@ ss myss {
 exit {
     seq_test_done();
 }
+
+%{
+static void incr(SS_ID ssId, int *pv, VAR_ID v)
+{
+    seq_pvGet(ssId, v, SYNC);
+    *pv += 1;
+    seq_pvPut(ssId, v, SYNC);
+}
+
+static void set_i(SEQ_VARS *const pVar, int value)
+{
+    pVar->i = value;
+}
+}%