diff --git a/Regression_Test_java/.TITAN_properties b/Regression_Test_java/.TITAN_properties
index c192ec018d56921f4a892c49a67349c827173c22..4f279b43a4870b5b852239b39984c8611bfdcce9 100644
--- a/Regression_Test_java/.TITAN_properties
+++ b/Regression_Test_java/.TITAN_properties
@@ -7,7 +7,6 @@
       <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
       <targetExecutable>bin/regressionTestSmall</targetExecutable>
       <addSourceLineInfo>true</addSourceLineInfo>
-      <omitInValueList>true</omitInValueList>
     </MakefileSettings>
     <LocalBuildSettings>
       <MakefileScript/>
@@ -27,6 +26,18 @@
         <ExcludeFromBuild>true</ExcludeFromBuild>
       </FileProperties>
     </FileResource>
+    <FileResource>
+      <FilePath>src/TrecofOper.ttcn</FilePath>
+      <FileProperties>
+        <ExcludeFromBuild>true</ExcludeFromBuild>
+      </FileProperties>
+    </FileResource>
+    <FileResource>
+      <FilePath>src/TtemplateRec.ttcn</FilePath>
+      <FileProperties>
+        <ExcludeFromBuild>true</ExcludeFromBuild>
+      </FileProperties>
+    </FileResource>
     <FileResource>
       <FilePath>src/TverdictOper.ttcn</FilePath>
       <FileProperties>
@@ -110,5 +121,145 @@
         <ExcludeFromBuild>true</ExcludeFromBuild>
       </FolderProperties>
     </FolderResource>
+    <FolderResource>
+      <FolderPath>src/text2ttcn</FolderPath>
+      <FolderProperties>
+        <CentralStorage>false</CentralStorage>
+        <ExcludeFromBuild>true</ExcludeFromBuild>
+      </FolderProperties>
+    </FolderResource>
   </FolderProperties>
+  <Configurations>
+    <Configuration name="legacy">
+      <ProjectProperties>
+        <MakefileSettings>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/regressionTestSmall</targetExecutable>
+          <addSourceLineInfo>true</addSourceLineInfo>
+          <omitInValueList>true</omitInValueList>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <MakefileScript/>
+          <workingDirectory>java_src</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+      <FolderProperties>
+        <FolderResource>
+          <FolderPath>src/ASN1/Test330</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/ASN1/Test332</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/ASN1/errorMessages</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/ASN1/errorMessages2</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/ASN1/parse</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/cfgFile/testport_parameters</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/cfg_list_concat</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/done</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/json</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+        <FolderResource>
+          <FolderPath>src/text2ttcn_nolegacy</FolderPath>
+          <FolderProperties>
+            <CentralStorage>false</CentralStorage>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FolderProperties>
+        </FolderResource>
+      </FolderProperties>
+      <FileProperties>
+        <FileResource>
+          <FilePath>src/ASN1/enum1/enum1</FilePath>
+          <FileProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FileProperties>
+        </FileResource>
+        <FileResource>
+          <FilePath>src/ASN1/enum2/enum2</FilePath>
+          <FileProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FileProperties>
+        </FileResource>
+        <FileResource>
+          <FilePath>src/TrecofOper.ttcn</FilePath>
+          <FileProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FileProperties>
+        </FileResource>
+        <FileResource>
+          <FilePath>src/TtemplateRec.ttcn</FilePath>
+          <FileProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FileProperties>
+        </FileResource>
+        <FileResource>
+          <FilePath>src/TverdictOper.ttcn</FilePath>
+          <FileProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FileProperties>
+        </FileResource>
+        <FileResource>
+          <FilePath>src/commProcedure/AdvancedRedirects.ttcn</FilePath>
+          <FileProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FileProperties>
+        </FileResource>
+        <FileResource>
+          <FilePath>src/functionSubref/TvalueofSubref.ttcn</FilePath>
+          <FileProperties>
+            <ExcludeFromBuild>true</ExcludeFromBuild>
+          </FileProperties>
+        </FileResource>
+      </FileProperties>
+    </Configuration>
+  </Configurations>
 </TITAN_Designer_Properties>
\ No newline at end of file
diff --git a/Regression_Test_java/parallel_main.cfg b/Regression_Test_java/parallel_main.cfg
old mode 100755
new mode 100644
index 8ac0102c03ec40ed029e0a23f1374e6adc54330a..ee94f71874d3315765b00c114e3bf90ac707c0a8
--- a/Regression_Test_java/parallel_main.cfg
+++ b/Regression_Test_java/parallel_main.cfg
@@ -11,7 +11,7 @@
 
 [ORDERED_INCLUDE]
 "src/ERC/config.cfg"  #fails in single mode, cfg file parse problems, 4 pass in parallel mode
-
+#"src/text2ttcn_nolegacy/text2ttcn_2.cfg" #not necessary, see in single mode
 [EXECUTE]
 #==acceptance_test:
 #testerlanc  # exec time: 40sec
@@ -34,7 +34,8 @@ ConnectMapOperNegTest #parallel ok 3 pass
 TdefaultOper #ok,
 #ispresent:
 IsPresent_Test.control #ok, 84 pass
-
+#text2ttcn
+component_test.control #the same in legacy mode and nolegacy mode
 [MAIN_CONTROLLER]
 # The options herein control the behavior of MC.
 TCPPort := 7339
diff --git a/Regression_Test_java/single_bugs.cfg b/Regression_Test_java/single_bugs.cfg
old mode 100755
new mode 100644
index 7cc9be27483257c2afa929905b5b2bbcb1adf9c1..26035f1d99f26e4aab1a4047f62d2658fd5735e5
--- a/Regression_Test_java/single_bugs.cfg
+++ b/Regression_Test_java/single_bugs.cfg
@@ -24,7 +24,7 @@
 #HACK: escaped double quote added, ass. not. nok Error message:
 # Error while setting parameter field 'tsp_editor' to 'vim': Referenced module parameter cannot be found. Module `vim' does not exist, and no parameter with name `vim' exists in any module.
 "src/ERC/config.cfg"  #fails in single mode, cfg file parse problems, 4 pass in parallel mode TODO: cfg parser bug fix
-
+"src/recofOper/config.cfg" #only for init! (58 pass)
 [EXECUTE]
 #all_from_with_functions #TODO: JSON enc-dec function handling,
 #encdec_OK #TODO: JSON, BER encoder
@@ -42,7 +42,9 @@
 #json (There are testcases commented out in it!! In preinit of JsonTypes it stops with exception)
 #AttributeTestcases.control
 #JsonTestcases.control
-
+TrecofOper.tc_empty_record_element #DTE, unrecoverable (config file is necessary!)
+TrecofOper.tc_empty_record_element2 #DTE, unrecoverable
+record_test.tc_REC_string2ttcn_empty #fail, setting: nolegacy!!!
 [LOGGING]
 # In this section you can specify the name of the log file and the classes of events
 # you want to log into the file or display on console (standard error).
diff --git a/Regression_Test_java/single_config.cfg b/Regression_Test_java/single_config.cfg
index feefdfe2089f13249b567775aca8170adc5d9131..e51476e8784e53e366f0c13308a4118344bce5ff 100644
--- a/Regression_Test_java/single_config.cfg
+++ b/Regression_Test_java/single_config.cfg
@@ -18,6 +18,9 @@
 "src/ucharstrOper/config.cfg" 
 "src/hexstrOper/config.cfg" #TODO: one testase is commented out (send())
 "src/implicitOmit/config.cfg" #ok, 18 pass
+"src/text2ttcn_nolegacy/text2ttcn_1.cfg"
+#"src/text2ttcn/text2ttcn_1.cfg" #legacy mode
+"src/recofOper/config.cfg" #62 pass + 2 tc moved to single_bugs.cfg
 [EXECUTE]
 #==acceptance_test==
 #chinese
@@ -128,6 +131,7 @@ EnumDefBitHexOct
 #functionSubref:
 TfunctionSubref #22 pass, 1 error (see in single_bugs.cfg)
 #TpardTemplateSubref #1 pass, 6 error (see in single_bugs.cfg)
+
 #fuzzy:
 FuzzyTestcases.control
 #hexstrOper:
@@ -157,6 +161,22 @@ IsChosen_Test #4pass
 #AttributeTestcases.control
 #JsonTestcases.control
 
+#lazyEval:
+lazy_main.control #130 pass
+
+#logFiles ?
+# TODO: not checked
+#logger
+#logger_control #special test
+#logcontrol
+#lostTimer:
+TlostTimer.control
+#TnonMandatory # excluded
+#macros
+Macros # 2pass
+# modifiedTemplate
+TmodifiedTemplate # 5 pass
+
 #predefFunctions
 bit_to_OK.control
 bit_to_SW.control
@@ -197,6 +217,10 @@ predefFunctTest.control
 #predefFunctTest.tc_predef_oct2char_good2 //fail, TODO: bugfix
 #predefFunctTest.tc_predef_oct2char_octetstr_elem //fail, TODO: bugfix
 
+#omitdef
+
+#pattern_quadruples
+
 ### RAW ###
 Annex_E_variants.control
 Bug521125.control
@@ -228,6 +252,13 @@ RAW_integer_test
 ustr.control
 RAWCodingAttributes.control
 
+### recofOper ###
+# see in [ORDERED_INCLUDE]
+#TrecofParamRef.control #2 pass, 10 fail, 1 error = DO NOT HANDLE THIS, jump it over ! TODO: fix it
+#TrecofParamRefEncDec.control
+
+#text2ttcn_legacy: see [ORDERED_INCLUDE]
+#text2ttcn: not ready, that is the legacy code
 
 #cont here ....
 #ucharstrOper  #pass, see in [ORDERED_INCLUDE] "src/ucharstrOper/config.cfg"
@@ -242,10 +273,9 @@ TbasicStatem.control
 TtemplateChar.control
 #tryCatch_Functions.control
 TtemplateBool.control
-TrecofOper.control
 SelectUnion.control
 TtemplateEnum.control
-TtemplateRec.control
+TtemplateRec.control # 1 fail!!
 IsTemplateKind.control
 ExclusiveRangeTemplate.control
 TtemplateBitstr.control
@@ -267,12 +297,10 @@ TtemplateUnion.control
 TarrayOper.control
 #everything.control
 #types.control
-TlostTimer.control
 #TtemplateRecAsn.control
 TtemplateSet.control
 TtemplateRecof.control
 #ASN_Definitions.control
-TanytypeWrapOper.control
 #ImportedTemplates.control
 TsetofOper.control
 
diff --git a/Regression_Test_java/src/recofOper/BerType.asn b/Regression_Test_java/src/recofOper/BerType.asn
new file mode 100644
index 0000000000000000000000000000000000000000..33eda40f9b9923e0f7785ee2a1b0894bacf85c9a
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/BerType.asn
@@ -0,0 +1,26 @@
+--/////////////////////////////////////////////////////////////////////////////
+-- Copyright (c) 2000-2019 Ericsson Telecom AB
+-- All rights reserved. This program and the accompanying materials
+-- are made available under the terms of the Eclipse Public License v2.0
+-- which accompanies this distribution, and is available at
+-- https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+--
+-- Contributors:
+--   Balasko, Jeno
+--   Baranyi, Botond
+--
+--/////////////////////////////////////////////////////////////////////////////
+BerType
+DEFINITIONS
+
+AUTOMATIC TAGS
+
+::=
+
+BEGIN
+
+IMPORTS ;
+
+RoI-ber ::= SEQUENCE OF INTEGER
+
+END
diff --git a/Regression_Test_java/src/recofOper/Circular1.ttcn b/Regression_Test_java/src/recofOper/Circular1.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..713f242a7c46b20cbcf8bdd96cdbf8e1f0a5d46b
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/Circular1.ttcn
@@ -0,0 +1,27 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+ 
+module Circular1 {
+
+// testing pre-generated record of/set of types with circular import (HT95344)
+// modules Circular1 and Circular2 import each other
+// type CharstringList is defined in Circular2 and used here
+// (only compilation and the C++ build are tested)
+import from Circular2 all;
+
+function f_dummy(CharstringList p_param)
+{
+  log(p_param);
+}
+ 
+}
diff --git a/Regression_Test_java/src/recofOper/Circular2.ttcn b/Regression_Test_java/src/recofOper/Circular2.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..45adfac1c58a31d7ce160c2f36da6a11517f6caf
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/Circular2.ttcn
@@ -0,0 +1,22 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+
+module Circular2 {
+
+// nothing is actually used from module Circular1, this is only here to test
+// pre-generated record of/set of types in circularly imported modules
+import from Circular1 all;
+
+type record of charstring CharstringList;
+
+}
diff --git a/Regression_Test_java/src/recofOper/TrecofCompat.ttcn b/Regression_Test_java/src/recofOper/TrecofCompat.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..566f6a7f71898af8a0432f2e1dea762ea4162298
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/TrecofCompat.ttcn
@@ -0,0 +1,267 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+
+// This module tests the compatibility between record-ofs and set-ofs of base
+// element types
+module TrecofCompat {
+
+type component CT_Empty {}
+
+// record of
+type record of integer RoI1;
+type record of integer RoI2;
+
+type record of boolean RoB1;
+type record of boolean RoB2;
+
+type record of float RoF1;
+type record of float RoF2;
+
+type record of bitstring RoBS1;
+type record of bitstring RoBS2;
+
+type record of hexstring RoHS1;
+type record of hexstring RoHS2;
+
+type record of octetstring RoOS1;
+type record of octetstring RoOS2;
+
+type record of charstring RoCS1;
+type record of charstring RoCS2;
+
+type record of universal charstring RoUS1;
+type record of universal charstring RoUS2;
+
+type record of integer RoI1_opt with { extension "optimize:memalloc" };
+type record of integer RoI2_opt with { extension "optimize:memalloc" };
+
+testcase tc_record_of_compat() runs on CT_Empty
+{
+  var RoI1 v_roi1 := { 1, 2 };
+  var RoI2 v_roi2 := v_roi1;
+  if (not match( { 1, 2 }, v_roi2) or v_roi1 != v_roi2) { setverdict(fail, "record of integer incompatibility"); }
+
+  var RoB1 v_rob1 := { true, false };
+  var RoB2 v_rob2 := v_rob1;
+  if (not match( { true, false }, v_rob2) or v_rob1 != v_rob2) { setverdict(fail, "record of boolean incompatibility"); }
+
+  var RoF1 v_rof1 := { 0.4, 9.6 };
+  var RoF2 v_rof2 := v_rof1;
+  if (not match( { 0.4, 9.6 }, v_rof2) or v_rof1 != v_rof2) { setverdict(fail, "record of float incompatibility"); }
+
+  var RoBS1 v_robs1 := { '1101'B, '10101'B };
+  var RoBS2 v_robs2 := v_robs1;
+  if (not match( { '1101'B, '10101'B }, v_robs2) or v_robs1 != v_robs2) { setverdict(fail, "record of bitstring incompatibility"); }
+
+  var RoHS1 v_rohs1 := { '1AF74'H, 'D000D'H };
+  var RoHS2 v_rohs2 := v_rohs1;
+  if (not match( { '1AF74'H, 'D000D'H }, v_rohs2) or v_rohs1 != v_rohs2) { setverdict(fail, "record of hexstring incompatibility"); }
+
+  var RoOS1 v_roos1 := { 'DEAD'O, '1BC5'O };
+  var RoOS2 v_roos2 := v_roos1;
+  if (not match( { 'DEAD'O, '1BC5'O }, v_roos2) or v_roos1 != v_roos2) { setverdict(fail, "record of octetstring incompatibility"); }
+
+  var RoCS1 v_rocs1 := { "red", "blue" };
+  var RoCS2 v_rocs2 := v_rocs1;
+  if (not match( { "red", "blue" }, v_rocs2) or v_rocs1 != v_rocs2) { setverdict(fail, "record of charstring incompatibility"); }
+
+  var RoUS1 v_rous1 := { "yellow", "green" };
+  var RoUS2 v_rous2 := v_rous1;
+  if (not match( { "yellow", "green" }, v_rous2) or v_rous1 != v_rous2) { setverdict(fail, "record of universal charstring incompatibility"); }
+
+  var RoI1_opt v_roi1_opt := { 1, 2 };
+  var RoI2_opt v_roi2_opt := v_roi1_opt;
+  if (not match( { 1, 2 }, v_roi2_opt) or v_roi1_opt != v_roi2_opt) { setverdict(fail, "record of integer (optimized) incompatibility"); }
+
+  setverdict(pass);
+}
+
+// record of template
+testcase tc_record_of_template_compat() runs on CT_Empty
+{
+  var template RoI1 vt_roi1 := { 1, 2 };
+  var template RoI2 vt_roi2 := vt_roi1;
+  if (not match( { 1, 2 }, vt_roi2) or not match(valueof(vt_roi1), vt_roi2)) 
+    { setverdict(fail, "record of integer template incompatibility"); }
+
+  var template RoB1 vt_rob1 := { true, false };
+  var template RoB2 vt_rob2 := vt_rob1;
+  if (not match( { true, false }, vt_rob2) or not match(valueof(vt_rob1), vt_rob2)) 
+    { setverdict(fail, "record of boolean template incompatibility"); }
+
+  var template RoF1 vt_rof1 := { 0.4, 9.6 };
+  var template RoF2 vt_rof2 := vt_rof1;
+  if (not match( { 0.4, 9.6 }, vt_rof2) or not match(valueof(vt_rof1), vt_rof2)) 
+    { setverdict(fail, "record of float template incompatibility"); }
+
+  var template RoBS1 vt_robs1 := { '1101'B, '10101'B };
+  var template RoBS2 vt_robs2 := vt_robs1;
+  if (not match( { '1101'B, '10101'B }, vt_robs2) or not match(valueof(vt_robs1), vt_robs2)) 
+    { setverdict(fail, "record of bitstring template incompatibility"); }
+
+  var template RoHS1 vt_rohs1 := { '1AF74'H, 'D000D'H };
+  var template RoHS2 vt_rohs2 := vt_rohs1;
+  if (not match( { '1AF74'H, 'D000D'H }, vt_rohs2) or not match(valueof(vt_rohs1), vt_rohs2)) 
+    { setverdict(fail, "record of hexstring template incompatibility"); }
+
+  var template RoOS1 vt_roos1 := { 'DEAD'O, '1BC5'O };
+  var template RoOS2 vt_roos2 := vt_roos1;
+  if (not match( { 'DEAD'O, '1BC5'O }, vt_roos2) or not match(valueof(vt_roos1), vt_roos2)) 
+    { setverdict(fail, "record of octetstring template incompatibility"); }
+
+  var template RoCS1 vt_rocs1 := { "red", "blue" };
+  var template RoCS2 vt_rocs2 := vt_rocs1;
+  if (not match( { "red", "blue" }, vt_rocs2) or not match(valueof(vt_rocs1), vt_rocs2)) 
+    { setverdict(fail, "record of charstring template incompatibility"); }
+
+  var template RoUS1 vt_rous1 := { "yellow", "green" };
+  var template RoUS2 vt_rous2 := vt_rous1;
+  if (not match( { "yellow", "green" }, vt_rous2) or not match(valueof(vt_rous1), vt_rous2)) 
+    { setverdict(fail, "record of universal charstring template incompatibility"); }
+
+  var template RoI1_opt vt_roi1_opt := { 1, 2 };
+  var template RoI2_opt vt_roi2_opt := vt_roi1_opt;
+  if (not match( { 1, 2 }, vt_roi2_opt) or not match(valueof(vt_roi1_opt), vt_roi2_opt)) 
+    { setverdict(fail, "record of integer template (optimized) incompatibility"); }
+
+  setverdict(pass);
+}
+
+// set of
+type set of integer SoI1;
+type set of integer SoI2;
+
+type set of boolean SoB1;
+type set of boolean SoB2;
+
+type set of float SoF1;
+type set of float SoF2;
+
+type set of bitstring SoBS1;
+type set of bitstring SoBS2;
+
+type set of hexstring SoHS1;
+type set of hexstring SoHS2;
+
+type set of octetstring SoOS1;
+type set of octetstring SoOS2;
+
+type set of charstring SoCS1;
+type set of charstring SoCS2;
+
+type set of universal charstring SoUS1;
+type set of universal charstring SoUS2;
+
+type set of integer SoI1_opt with { extension "optimize:memalloc" };
+type set of integer SoI2_opt with { extension "optimize:memalloc" };
+
+testcase tc_set_of_compat() runs on CT_Empty
+{
+  var SoI1 v_soi1 := { 1, 2 };
+  var SoI2 v_soi2 := v_soi1;
+  if (not match( { 1, 2 }, v_soi2) or v_soi1 != v_soi2) { setverdict(fail, "set of integer incompatibility"); }
+
+  var SoB1 v_sob1 := { true, false };
+  var SoB2 v_sob2 := v_sob1;
+  if (not match( { true, false }, v_sob2) or v_sob1 != v_sob2) { setverdict(fail, "set of boolean incompatibility"); }
+
+  var SoF1 v_sof1 := { 0.4, 9.6 };
+  var SoF2 v_sof2 := v_sof1;
+  if (not match( { 0.4, 9.6 }, v_sof2) or v_sof1 != v_sof2) { setverdict(fail, "set of float incompatibility"); }
+
+  var SoBS1 v_sobs1 := { '1101'B, '10101'B };
+  var SoBS2 v_sobs2 := v_sobs1;
+  if (not match( { '1101'B, '10101'B }, v_sobs2) or v_sobs1 != v_sobs2) { setverdict(fail, "set of bitstring incompatibility"); }
+
+  var SoHS1 v_sohs1 := { '1AF74'H, 'D000D'H };
+  var SoHS2 v_sohs2 := v_sohs1;
+  if (not match( { '1AF74'H, 'D000D'H }, v_sohs2) or v_sohs1 != v_sohs2) { setverdict(fail, "set of hexstring incompatibility"); }
+
+  var SoOS1 v_soos1 := { 'DEAD'O, '1BC5'O };
+  var SoOS2 v_soos2 := v_soos1;
+  if (not match( { 'DEAD'O, '1BC5'O }, v_soos2) or v_soos1 != v_soos2) { setverdict(fail, "set of octetstring incompatibility"); }
+
+  var SoCS1 v_socs1 := { "red", "blue" };
+  var SoCS2 v_socs2 := v_socs1;
+  if (not match( { "red", "blue" }, v_socs2) or v_socs1 != v_socs2) { setverdict(fail, "set of charstring incompatibility"); }
+
+  var SoUS1 v_sous1 := { "yellow", "green" };
+  var SoUS2 v_sous2 := v_sous1;
+  if (not match( { "yellow", "green" }, v_sous2) or v_sous1 != v_sous2) { setverdict(fail, "set of universal charstring incompatibility"); }
+
+  var SoI1_opt v_soi1_opt := { 1, 2 };
+  var SoI2_opt v_soi2_opt := v_soi1_opt;
+  if (not match( { 1, 2 }, v_soi2_opt) or v_soi1_opt != v_soi2_opt) { setverdict(fail, "set of integer (optimized) incompatibility"); }
+
+  setverdict(pass);
+}
+
+// set of template
+testcase tc_set_of_template_compat() runs on CT_Empty
+{
+  var template SoI1 vt_soi1 := { 1, 2 };
+  var template SoI2 vt_soi2 := vt_soi1;
+  if (not match( { 1, 2 }, vt_soi2) or not match(valueof(vt_soi1), vt_soi2)) 
+    { setverdict(fail, "set of integer template incompatibility"); }
+
+  var template SoB1 vt_sob1 := { true, false };
+  var template SoB2 vt_sob2 := vt_sob1;
+  if (not match( { true, false }, vt_sob2) or not match(valueof(vt_sob1), vt_sob2)) 
+    { setverdict(fail, "set of boolean template incompatibility"); }
+
+  var template SoF1 vt_sof1 := { 0.4, 9.6 };
+  var template SoF2 vt_sof2 := vt_sof1;
+  if (not match( { 0.4, 9.6 }, vt_sof2) or not match(valueof(vt_sof1), vt_sof2)) 
+    { setverdict(fail, "set of float template incompatibility"); }
+
+  var template SoBS1 vt_sobs1 := { '1101'B, '10101'B };
+  var template SoBS2 vt_sobs2 := vt_sobs1;
+  if (not match( { '1101'B, '10101'B }, vt_sobs2) or not match(valueof(vt_sobs1), vt_sobs2)) 
+    { setverdict(fail, "set of bitstring template incompatibility"); }
+
+  var template SoHS1 vt_sohs1 := { '1AF74'H, 'D000D'H };
+  var template SoHS2 vt_sohs2 := vt_sohs1;
+  if (not match( { '1AF74'H, 'D000D'H }, vt_sohs2) or not match(valueof(vt_sohs1), vt_sohs2)) 
+    { setverdict(fail, "set of hexstring template incompatibility"); }
+
+  var template SoOS1 vt_soos1 := { 'DEAD'O, '1BC5'O };
+  var template SoOS2 vt_soos2 := vt_soos1;
+  if (not match( { 'DEAD'O, '1BC5'O }, vt_soos2) or not match(valueof(vt_soos1), vt_soos2)) 
+    { setverdict(fail, "set of octetstring template incompatibility"); }
+
+  var template SoCS1 vt_socs1 := { "red", "blue" };
+  var template SoCS2 vt_socs2 := vt_socs1;
+  if (not match( { "red", "blue" }, vt_socs2) or not match(valueof(vt_socs1), vt_socs2)) 
+    { setverdict(fail, "set of charstring template incompatibility"); }
+
+  var template SoUS1 vt_sous1 := { "yellow", "green" };
+  var template SoUS2 vt_sous2 := vt_sous1;
+  if (not match( { "yellow", "green" }, vt_sous2) or not match(valueof(vt_sous1), vt_sous2)) 
+    { setverdict(fail, "set of universal charstring template incompatibility"); }
+
+  var template SoI1_opt vt_soi1_opt := { 1, 2 };
+  var template SoI2_opt vt_soi2_opt := vt_soi1_opt;
+  if (not match( { 1, 2 }, vt_soi2_opt) or not match(valueof(vt_soi1_opt), vt_soi2_opt)) 
+    { setverdict(fail, "set of integer template (optimized) incompatibility"); }
+
+  setverdict(pass);
+}
+
+control {
+  execute(tc_record_of_template_compat());
+  execute(tc_record_of_compat());
+  execute(tc_set_of_template_compat());
+  execute(tc_set_of_compat());
+}
+
+}
diff --git a/Regression_Test_java/src/recofOper/TrecofOper.ttcn b/Regression_Test_java/src/recofOper/TrecofOper.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..46012c76a5616e0b801095205744957ca9a34abd
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/TrecofOper.ttcn
@@ -0,0 +1,1425 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *   Beres, Szabolcs
+ *   Godar, Marton
+ *   Kovacs, Ferenc
+ *   Raduly, Csaba
+ *   Szabados, Kristof
+ *   Szabo, Janos Zoltan – initial implementation
+ *
+ ******************************************************************************/
+module TrecofOper {
+// ********** Type definitions  *********************
+type component recofOper_mycomp {};
+type enumerated recofOper_myenum {xx1,xx2,xx3};
+type record recofOper_trecord {
+	integer x1 optional,
+	float x2 };
+type record of octetstring recofOper_trecof;
+type set recofOper_tset {
+	integer x1,
+	float x2 optional };
+type set of charstring recofOper_tsetof;
+type union recofOper_tunion {
+	integer x1,
+	float x2 };
+type record of integer recofOper_myrecof1; 	// record of basic types
+type record of recofOper_myenum recofOper_myrecof2; // record of enum
+type record of recofOper_trecord recofOper_myrecof3;  // record of record
+type record of recofOper_trecof recofOper_myrecof4; // record of record of
+type record of recofOper_tset recofOper_myrecof5;  // record of set
+type record of recofOper_tsetof recofOper_myrecof6; // record of set of
+type record of recofOper_tunion recofOper_myrecof7; // record of union
+type record length (3)
+  of record length (3)
+  of record length (3) of integer threeD;
+// *************** Constanst ***********************
+const recofOper_trecord recofOper_temp1:={ x1:=omit, x2:=3.4 };
+const recofOper_trecof recofOper_temp2:={ 'AF12'O };
+const recofOper_tset recofOper_temp3:={ x1:=234, x2:=1.9};
+const recofOper_tsetof recofOper_temp4:={"f","8"};
+const recofOper_tunion recofOper_temp5:={ x2:=1.3 };
+const recofOper_myrecof1 recofOper_const1:={ 1,2 }	//record of basic types
+const recofOper_myrecof2 recofOper_const2:={ xx2, xx1 }
+const recofOper_myrecof3 recofOper_const4:={   //record of record
+  { x1:=1, x2:=1.2 },recofOper_temp1 };
+const recofOper_myrecof4 recofOper_const6:={   //record of record of
+ { '12AB'O, 'CD12'O },  recofOper_temp2 };
+const recofOper_myrecof5 recofOper_const8:={   //record of set
+ { x1:=2, x2:=1.3}, recofOper_temp3 };
+const recofOper_myrecof6 recofOper_const10:={   //record of set of
+ {"a","b"}, recofOper_temp4 }; //{"f","8"},
+const recofOper_myrecof7 recofOper_const12:={   //record of union
+ { x1 :=3 }, recofOper_temp5  }; //{ x2:=1.3 }
+
+testcase recofAssign() runs on recofOper_mycomp{
+var recofOper_myrecof1 x1:={ 12,34} 	//record of basic types
+var recofOper_myrecof1 x2,x3,x4;
+x2:={ 32, 12 };
+x3:={12};
+x3:={23,21};
+x4:={};
+if (x1[0]==12) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[1]==34) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0]==32) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[1]==12) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[0]==23) {setverdict(pass);}	//later, change size
+     else {setverdict(fail);}
+if (x3[1]==21) {setverdict(pass);}
+     else {setverdict(fail);}
+//if (x4=={}) {setverdict(pass);}	//empty record of
+//     else {setverdict(fail);}
+}
+
+testcase recofReAssign() runs on recofOper_mycomp
+{
+  var recofOper_myrecof1 x := { 1, 2, 3, 4 };
+  // assigning a new value that is shorter than the previous
+  x := { -, 5, - };
+  if (sizeof(x) == 3) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[0] == 1) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[1] == 5) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[2] == 3) { setverdict(pass); }
+  else { setverdict(fail); }
+  x := { 6 };
+  if (sizeof(x) == 1) { setverdict(pass); }
+  else { setverdict(fail); }
+  if (x[0] == 6) { setverdict(pass); }
+  x := { };
+  if (sizeof(x) == 0) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+testcase recofAssignEnum() runs on recofOper_mycomp{
+var recofOper_myrecof2 x1:={ xx2 }	//record of enum
+var recofOper_myrecof2 x2;
+x2:={xx2,xx1};
+//at declaration
+if (x1[0]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+//later
+if (x2[0]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1]==xx1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignRec() runs on recofOper_mycomp{
+var recofOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var recofOper_myrecof3 x1:={   //record of record
+ { x1:=1, x2:=1.2 }, temp1 };
+var recofOper_myrecof3 x2;
+x2:={ { x1:=1, x2:=1.2 }, temp1 };
+if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignRecof() runs on recofOper_mycomp{
+var recofOper_trecof temp2:={'AF12'O};
+var recofOper_myrecof4 x1:={   //record of record of
+ { '12AB'O, 'CD12'O }, temp2 };
+var recofOper_myrecof4 x2;
+x2:={ { '12AB'O, 'CD12'O }, temp2 };
+if (x1[0][0]=='12AB'O) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=='12AB'O) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=='AF12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignSet() runs on recofOper_mycomp{
+var recofOper_tset temp1:={ x1:=2, x2:=omit };
+var recofOper_myrecof5 x1:={   //record of set
+ { x1:=1, x2:=1.2 }, temp1 };
+var recofOper_myrecof5 x2;
+x2:={ { x1:=1, x2:=1.2 }, temp1 };
+if (x1[0].x1==1) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignSetof() runs on recofOper_mycomp{
+var recofOper_tsetof temp2:={"a","7"};
+var recofOper_myrecof6 x1:={   //record of set of
+ { "1", "a" }, temp2 };
+var recofOper_myrecof6 x2;
+x2:={ { "1", "a" }, temp2 };
+if (x1[0][0]=="1") {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (x1[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=="1") {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (x2[0][1]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignUnion() runs on recofOper_mycomp{
+var recofOper_tunion temp5 := {x2:=1.3}
+var recofOper_myrecof7 x1:={   //record of union
+ { x1 :=3 }, temp5  }; //{ x2:=1.3
+var recofOper_myrecof7 x2;
+x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+if (x1[0].x1==3) {setverdict(pass);}	//at declaration
+     else {setverdict(fail);}
+if (ischosen(x1[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1]==temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==3) {setverdict(pass);}	//later
+     else {setverdict(fail);}
+if (ischosen(x2[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElem() runs on recofOper_mycomp{
+var recofOper_myrecof1 x1,x2,x3,x4,x5;	//record of basic types
+x1:={ 3, 2 };
+x2:={ 1, 2 };
+x3:=x2;
+x4:=x2;
+x5:={2};
+x2[0]:=3;			//change element to value
+x3[0]:=x1[0];			//change element to element
+x4[2]:=2;			// add element
+x5[2]:=3;			// out of order
+if (x1[1]==2) {setverdict(pass);}	//accessing individual element
+     else {setverdict(fail);}
+if (x2[0]==3) {setverdict(pass);}	// change element to value
+     else {setverdict(fail);}
+if (x2[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[0]==3) {setverdict(pass);}	// change element to element
+     else {setverdict(fail);}
+if (x3[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4[0]==1) {setverdict(pass);}	// add element
+     else {setverdict(fail);}
+if (x4[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x4[2]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x5[2]==3) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemEnum() runs on recofOper_mycomp{
+var recofOper_myrecof2 x1, x2,x3;	//record of enumerated
+x1:={ xx1, xx2 };
+x2:={xx1, xx2};
+x3:={};
+x1[0]:=xx3;			//change element
+x2[2]:=xx3;			// add element
+x3[2]:=xx3;			// out of order
+if (x1[0]==xx3) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0]==xx1) {setverdict(pass);}	// add element
+     else {setverdict(fail);}
+if (x2[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2]==xx3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2]==xx3) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemRec() runs on recofOper_mycomp{
+//var recofOper_trecord temp1:={ x1:=omit, x2:=3.4 };
+var recofOper_myrecof3 x1,x2,x3; 	//record of record
+x1:={   { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x2:=x1;
+x1[0].x1:=2;
+//temp1.x1:=3;
+x1[1].x1:=3;
+x2[2]:= {x1:=2, x2:=1.3};		// add element
+x3[1]:= {x1:=2, x2:=1.3};		//out of order
+if (x1[0].x1==2) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x1==3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//add element
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[1].x1==2) {setverdict(pass);}	   // out of order
+     else {setverdict(fail);}
+if (x3[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recofAssignElemRecof() runs on recofOper_mycomp{
+var recofOper_myrecof4 x1,x2,x3;		 //record of record of
+x1:={  { '12AB'O, 'CD12'O }, { 'ABCD'O } };
+x2:=x1;
+x1[0][1]:='34AB'O;		//change element
+x2[2]:={ '1234'O};		//add element
+x3[2]:={'12CD'O};		//out of order
+if (x1[0][0]=='12AB'O) {setverdict(pass);}	// change element
+     else {setverdict(fail);}
+if (x1[0][1]=='34AB'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][0]=='ABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=='12AB'O) {setverdict(pass);}	// add element
+     else {setverdict(fail);}
+if (x2[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][0]=='ABCD'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2][0]=='1234'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2][0]=='12CD'O) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}}
+
+testcase recofAssignElemSet() runs on recofOper_mycomp{
+var recofOper_myrecof5 x1,x2,x3    	//record of set
+x1:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit }};
+x2:={ { x1:=1, x2:=1.2 }, { x1:=2, x2:=omit }};
+x1[0].x2:=3.4;				//change element
+x2[2]:={  x1:=2, x2:=1.3 };		// add element
+x3[2]:={  x1:=2, x2:=1.3 };		// out of order
+if (x1[0].x1==1) {setverdict(pass);}	//change element
+     else {setverdict(fail);}
+if (x1[0].x2==3.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x1[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==1) {setverdict(pass);}	//add element
+     else {setverdict(fail);}
+if (x2[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ispresent(x2[1].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x1==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2].x1==2) {setverdict(pass);}	//out of order
+     else {setverdict(fail);}
+if (x3[2].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemSetof() runs on recofOper_mycomp{
+var recofOper_tsetof temp2:={"a","7"};
+var recofOper_myrecof6 x1,x2,x3;   //record of set of
+x1:={ { "1" }, {"a","7"}};
+x2:={ { "1" }, {"a","7"}};
+x1[0][0]:="h";			// change element
+x2[2]:={"2"};			//add element
+x3[2]:={"2"};			//out of order
+if (x1[0][0]=="h") {setverdict(pass);}	  //change element
+     else {setverdict(fail);}
+if (x1[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0][0]=="1") {setverdict(pass);}	  //add element
+     else {setverdict(fail);}
+if (x2[1][0]=="a") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1][1]=="7") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2][0]=="2") {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2][0]=="2") {setverdict(pass);}		// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofAssignElemUnion() runs on recofOper_mycomp{
+var recofOper_tunion temp5 := {x2:=1.3}
+var recofOper_myrecof7 x1,x2,x3;   //record of union
+x1:={ {x1 :=3 }, {x2:=1.3} };
+x2:={ {x1 :=3 }, {x2:=1.3} };
+x1[0].x2:=3.4;				//change element
+x2[2]:={ x2:=1.4}; 			// add element
+x3[2]:={ x2:=1.4}; 			// out of order
+if (x1[0].x2==3.4) {setverdict(pass);}		//change element
+     else {setverdict(fail);}
+if (ischosen(x1[0].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[0].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x1[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x1[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[0].x1==3) {setverdict(pass);}		//add element
+     else {setverdict(fail);}
+if (ischosen(x2[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2[2].x2==1.4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(x2[2].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x2[2].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x3[2].x2==1.4) {setverdict(pass);}		//out of order
+     else {setverdict(fail);}
+if (ischosen(x3[2].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(x3[2].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConst() runs on recofOper_mycomp{
+const recofOper_myrecof1 const1:={1,2,3} //record of basic types
+if (recofOper_const1[0]==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const1[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[0]==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1[1]==2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[2]==3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstEnum() runs on recofOper_mycomp{
+const recofOper_myrecof2 const1:={xx1,xx2,xx3} //record of enumerated
+if (recofOper_const2[0]==xx2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const2[1]==xx1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[0]==xx1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const1[1]==xx2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const1[2]==xx3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstRec() runs on recofOper_mycomp{
+const recofOper_myrecof3 const4:={   //record of record
+ { x1:=1, x2:=1.2 }, recofOper_temp1 };
+if (recofOper_const4[0].x1==1) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const4[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const4[1]==recofOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4[0].x1==1) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const4[0].x2==1.2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const4[1]==recofOper_temp1) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstRecof() runs on recofOper_mycomp{
+const recofOper_myrecof4 const6:={   //record of record of
+ { '12AB'O, 'CD12'O }, recofOper_temp2 };
+if (recofOper_const6[0][0]=='12AB'O) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const6[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const6[1]==recofOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6[0][0]=='12AB'O) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const6[0][1]=='CD12'O) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const6[1]==recofOper_temp2) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstSet() runs on recofOper_mycomp{
+const recofOper_myrecof5 const8:={   //record of set
+ { x1:=2, x2:=1.3}, recofOper_temp3 };
+if (recofOper_const8[0].x1==2) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const8[0].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const8[1]==recofOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8[0].x1==2) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const8[0].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const8[1]==recofOper_temp3) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstSetof() runs on recofOper_mycomp{
+const recofOper_myrecof6 const10:={   //record of set of
+ {"a","b"}, {"f","8"} };
+if (recofOper_const10[0][0]=="a") {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (recofOper_const10[0][1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const10[1]==recofOper_temp4) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[0][0]=="a") {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (const10[0][1]=="b") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[1][0]=="f") {setverdict(pass);}
+     else {setverdict(fail);}
+if (const10[1][1]=="8") {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofConstUnion() runs on recofOper_mycomp{
+const recofOper_myrecof7 const12:={   //record of union
+ { x1 :=3 }, { x2:=1.3 } };
+if (recofOper_const12[0].x1==3) {setverdict(pass);}	//definition part
+     else {setverdict(fail);}
+if (ischosen(recofOper_const12[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(recofOper_const12[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (recofOper_const12[1]==recofOper_temp5) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12[0].x1==3) {setverdict(pass);}	//testcase
+     else {setverdict(fail);}
+if (ischosen(const12[0].x1)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12[0].x2))) {setverdict(pass);}
+     else {setverdict(fail);}
+if (const12[1].x2==1.3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (ischosen(const12[1].x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(ischosen(const12[1].x1))) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recofComp() runs on recofOper_mycomp{
+var recofOper_myrecof1 x1,x2,x3,x4; //record of basic type
+x1:={ 1,2,3 };
+x2:={ 1,2,3 };
+x3:={ 1,2 };
+x4:={3,1,2};
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x4)) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x4) {setverdict(pass);}	// out of order
+     else {setverdict(fail);}
+}
+
+testcase recofCompEnum() runs on recofOper_mycomp{
+var recofOper_myrecof2 x1,x2,x3; 	// record of enumerated
+x1:={ xx1,xx2,xx3 };
+x2:={ xx1,xx2,xx3 };
+x3:={ xx1,xx2 };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompRec() runs on recofOper_mycomp{
+var recofOper_myrecof3 x1,x2,x3;	// record of record
+x1 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x2 :={ { x1:=1, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+x3 :={ { x1:=2, x2:=1.2 }, { x1:=omit, x2:=3.4 } };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+
+testcase recofCompRecof() runs on recofOper_mycomp{
+var recofOper_myrecof4 x1,x2,x3; //record of record of
+x1:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+x2:={ { '12AB'O, 'CD12'O }, {'AF12'O} };
+x3:={ { '12AB'O  }, {'AF12'O} };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompSet() runs on recofOper_mycomp{
+var recofOper_tset temp1:={ x1:=2, x2:=omit };
+var recofOper_myrecof5 x1,x2,x3; //record of set
+x1:={ { x1:=1, x2:=1.2 }, temp1 };
+x2:={ { x2:=1.2, x1:=1 }, { x1:=2, x2:=omit }};
+x3:={ { x1:=1, x2:=1.2 } };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompSetof() runs on recofOper_mycomp{
+var recofOper_tsetof temp2:={"a","7"};
+var recofOper_myrecof6 x1,x2,x3;   //record of set of
+x1:={ { "1", "a" },  temp2 };
+x2:={ { "1", "a" }, {"a","7"} };
+x3:={ { "1", "a" } };
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x2==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x1!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofCompUnion() runs on recofOper_mycomp{
+var recofOper_tunion temp5 := {x2:=1.3}
+var recofOper_myrecof7 x1,x2,x3; //record of union
+x1:={ { x1 :=3 }, { x2:=1.3 } };
+x2:={ { x1 :=3 }, temp5 }; //{ x2:=1.3 }
+x3:={ { x2 :=3.9 },temp5 }; //{ x2:=1.3 }
+if (x1==x2) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1==x3)) {setverdict(pass);}
+     else {setverdict(fail);}
+if (x2!=x3) {setverdict(pass);}
+     else {setverdict(fail);}
+if (not(x1!=x2)) {setverdict(pass);}
+     else {setverdict(fail);}
+}
+
+testcase recofEmpty() runs on recofOper_mycomp{
+  var recofOper_myrecof1 vl_list := {}
+  if (vl_list == {}) {setverdict(pass)}
+  else {setverdict(fail)}
+  if ({} == vl_list) {setverdict(pass)}
+  else {setverdict(fail)}
+}
+
+testcase recofListOperator() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1;
+  var recofOper_myrecof1 x2,x3,x4,x5,x6;
+  var recofOper_myrecof1 res1, res2, res3, res4, res5;
+  x1:={1,2};
+  x2:={1,2};
+  x3:={1};
+  x4:={1};
+  x4[1]:=3;
+  x5:={};
+  x6[2]:=1;
+  res1 := x1 & x2;
+  res2 := x2 & x3;
+  res3 := x2 & x3 & x5;
+  res4 := x3 & x4;
+  res5 := x1 & {};
+  if (res1 == {1,2,1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res2 == {1,2,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res3 == {1,2,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res4 == {1,1,3}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (res5 == {1,2}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase recofRotateOperators() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2,3,4,5};
+  var recofOper_myrecof1 x2,x3,x4,x5,x6,x7;	//set of basic types
+  x2 := x1 <@ 1;
+  x3 := x1 <@ 10;
+  x4 := x1 <@ 3 <@ 2;
+  x5 := x1 @> 1;
+  x6 := x1 @> 10;
+  x7 := x1 @> 3 @> 2;
+  if (x2 == {2,3,4,5,1}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x3 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x4 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x5 == {5,1,2,3,4}) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x6 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+  if (x7 == x1) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+testcase recofLengthof() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2};
+  var recofOper_myrecof1 x2,x3,x4,x5,x6;	//record of basic types
+  x2:={ 1, 2 };
+  x3:={1};
+  x4:={1};
+  x3:={1,2};								//change size by assignment
+  x4[1]:=3;									//change size by adding element
+  x5:={};									//empty record of
+  x6[2]:=1;									//out of order
+  if (lengthof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (lengthof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (lengthof(x3)==2) {setverdict(pass);}	//change size by assignment
+  else {setverdict(fail);}
+  if (lengthof(x4)==2) {setverdict(pass);}	//change size by adding element
+  else {setverdict(fail);}
+  if (lengthof(x5)==0) {setverdict(pass);}	//empty record of
+  else {setverdict(fail);}
+  if (lengthof(x6)==3) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase recofSizeof() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2};
+  var recofOper_myrecof1 x2,x3,x4,x5,x6;	//record of basic types
+  x2:={ 1, 2 };
+  x3:={1};
+  x4:={1};
+  x3:={1,2};		//change size by assignment
+  x4[1]:=3;		//change size by adding element
+  x5:={};			//empty record of
+  x6[2]:=1;		//out of order
+  if (sizeof(x1)==2) {setverdict(pass);}	//assignment at declaration
+  else {setverdict(fail);}
+  if (sizeof(x2)==2) {setverdict(pass);}	//assignment later
+  else {setverdict(fail);}
+  if (sizeof(x3)==2) {setverdict(pass);}	//change size by assignment
+  else {setverdict(fail);}
+  if (sizeof(x4)==2) {setverdict(pass);}	//change size by adding element
+  else {setverdict(fail);}
+  if (sizeof(x5)==0) {setverdict(pass);}	//empty record of
+  else {setverdict(fail);}
+  if (sizeof(x6)==3) {setverdict(pass);}	//out of order
+  else {setverdict(fail);}
+}
+
+testcase recofReplace() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2,3,4,5};
+  var recofOper_myrecof1 a:={8,8,8};
+  var recofOper_myrecof1 x2;
+  x2 := replace(x1,2,3,a);
+  if (x2 == {1,2,8,8,8}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+// TR: HS22809 - A null value is generated for empty constant arrays by the compiler,
+// this can make calling 'replace' ambiguous (since there's a 'replace' function generated for both the
+// array and its template.
+testcase recofReplaceEmpty() runs on recofOper_mycomp {
+  var recofOper_myrecof1 x1 := { 1, 2, 3 };
+  const recofOper_myrecof1 a := {};  
+  var recofOper_myrecof1 x2;
+  x2 := replace(x1, 0, 1, a);
+  if (x2 == { 2, 3 }) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+testcase recofSubstr() runs on recofOper_mycomp{
+  var recofOper_myrecof1 x1:={1,2,3,4,5};
+  var recofOper_myrecof1 x2;
+  x2 := substr(x1,2,3);
+  if (x2 == {3,4,5}) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+type record intrec { recofOper_myrecof1 a }
+type record of intrec intreclist
+
+testcase recofIsvalue() runs on recofOper_mycomp{
+  var recofOper_myrecof1 v_def;
+  var recofOper_myrecof1 v_empty := {-,-,-,-,-,-,-,-,-,-};
+  var recofOper_myrecof1 v_full := {1,2,3,4,5,6,7,8,9,10}
+
+  if ( isvalue(v_def) ) { setverdict(fail); }else { setverdict(pass); };
+  if ( isvalue(v_empty) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_empty[1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_empty[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_full[1]) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v_def[1] := 3;
+  if ( isvalue(v_def) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isvalue(v_def[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_def[0]) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v_empty[0] := 17; // not empty anymore
+  if ( isvalue(v_empty[0]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isvalue(v_empty) ) { setverdict(fail); } else { setverdict(pass); };
+
+  template intreclist it1 := { { a := { 1, 2, 3 } } };
+  template intreclist it2 modifies it1 := { { a := { 1, 2, -, -, -, 100 } } };
+  template intrec itt1               := { a := { 1, 2, 3 } };
+  template intrec itt2 modifies itt1 := { a := { 1, 2, -, -, -, 100 } };
+  if (isvalue (it1)) {setverdict (pass);}
+  else {setverdict (fail);}
+
+  if (isvalue (it2)) { setverdict (fail);}
+  else { setverdict (pass);}
+
+  if (isvalue (itt1)) {setverdict (pass);}
+  else {setverdict ( fail );}
+
+  if (isvalue (itt2)) { setverdict (fail);}
+  else {setverdict (pass);}
+
+  const threeD d3 := {
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    }
+  }
+  var threeD nowhere := {
+  { {-,1,-},{-,1,-},{-,1,-} },
+  { {-,1,-},{-,-,-},{-,1,-} },
+  { {-,1,-},{-,1,-},{-,1,-} }
+
+  }
+  if ( isvalue(nowhere) ) { setverdict(fail, 1); } else { setverdict(pass); };
+  if ( isvalue(nowhere[1]) ) { setverdict(fail, 2); } else { setverdict(pass); };
+  if ( isvalue(nowhere[1][1]) ) { setverdict(fail, 3); } else { setverdict(pass); };
+  if ( isvalue(nowhere[1][1][1]) ) { setverdict(fail, 4); } else { setverdict(pass); };
+  if ( isvalue(d3) ) { setverdict(pass); } else { setverdict(fail, 5); };
+  if ( isvalue(d3[0]) ) { setverdict(pass); } else { setverdict(fail, 6); };
+  if ( isvalue(d3[0][1]) ) { setverdict(pass); } else { setverdict(fail, 7); };
+  if ( isvalue(d3[0][1][2]) ) { setverdict(pass); } else { setverdict(fail, 8); };
+}
+
+testcase recofIsvalue2() runs on recofOper_mycomp{
+  var recofOper_myrecof1 v;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[3] := 3;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[2] := 2;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[1] := 1;
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v[0] := 0;
+  if ( isvalue(v) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v[4] := 4;
+  if ( isvalue(v) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v[6] := 6; // there is now a hole at 5
+  if ( isvalue(v) ) { setverdict(fail); } else { setverdict(pass); };
+}
+
+testcase recofIsbound() runs on recofOper_mycomp{
+  var recofOper_myrecof1 v_def;
+  var recofOper_myrecof1 v_empty := {-,-,-,-,-,-,-,-,-,-};
+  var recofOper_myrecof1 v_full := {1,2,3,4,5,6,7,8,9,10}
+
+  if ( isbound(v_def) ) { setverdict(fail); }else { setverdict(pass); };
+  if ( isbound(v_empty) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_empty[1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_empty[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(v_full[1]) ) { setverdict(pass); } else { setverdict(fail); };
+
+  v_def[1] := 3;
+  if ( isbound(v_def) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_def[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(v_def[0]) ) { setverdict(fail); } else { setverdict(pass); };
+
+  v_empty[0] := 17; // not empty anymore
+  if ( isbound(v_empty[0]) ) { setverdict(pass); } else { setverdict(fail); };
+
+  template intreclist it1 := { { a := { 1, 2, 3 } } };
+  template intreclist it2 modifies it1 := { { a := { 1, 2, -, -, -, 100 } } };
+  template intrec itt1               := { a := { 1, 2, 3 } };
+  template intrec itt2 modifies itt1 := { a := { 1, 2, -, -, -, 100 } };
+  if (isbound (it1)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (it2)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (itt1)) { setverdict(pass); } else { setverdict(fail); };
+  if (isbound (itt2)) { setverdict(pass); } else { setverdict(fail); };
+
+  var  threeD d3_emtpy;
+  const threeD d3 := {
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    },
+    {
+        { 1,2,3 },
+        { 1,2,3 },
+        { 1,2,3 }
+    }
+  }
+  var threeD nowhere := {
+  { {-,1,-},{-,1,-},{-,1,-} },
+  { {-,1,-},{-,-,-},{-,1,-} },
+  { {-,1,-},{-,1,-},{-,1,-} }
+  }
+
+  if ( isbound(d3_emtpy) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3_emtpy[0]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3_emtpy[0][1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3_emtpy[0][1][2]) ) { setverdict(fail); } else { setverdict(pass); };
+  
+  if ( isbound(nowhere) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(nowhere[1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(nowhere[1][1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(nowhere[1][1][1]) ) { setverdict(fail); } else { setverdict(pass); };
+  if ( isbound(d3) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(d3[0]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(d3[0][1]) ) { setverdict(pass); } else { setverdict(fail); };
+  if ( isbound(d3[0][1][2]) ) { setverdict(pass); } else { setverdict(fail); };
+}
+
+testcase recofCompConst() runs on recofOper_mycomp{
+  const recofOper_myrecof1 c_r1 := { 1,2,3,4};
+  const recofOper_myrecof1 c_r2 := { 1,2,3,4};
+  const recofOper_myrecof1 c_r3 := { 4,3,2,1};
+  const recofOper_myrecof1 c_r4_ind := { [0] := 1, [1] := 2, [2] := 3, [3] := 4};
+  const recofOper_myrecof1 c_r5_ind := { [3] := 1, [1] := 2, [2] := 3, [0] := 4};
+  const recofOper_myrecof1 c_r6_ind := { [3] := 4, [1] := 2, [2] := 3, [0] := 1};  
+  const recofOper_myrecof1 c_r8_ind := { [0] := 1, [1] := 2, [2] := 3, [3] := 4};
+  
+  
+  var recofOper_myrecof1 vl_r7_ind := { [3] := 4, [1] := 2};
+
+  var recofOper_myrecof1 vl_r10 := { 1,2,3,4};
+  var recofOper_myrecof1 vl_r11 := { 1,2,3,4};
+  
+  if(c_r1 == c_r1) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_r1 == c_r2) {setverdict(pass);}
+  else {setverdict(fail);}
+
+  if(c_r1 == c_r4_ind) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_r4_ind == c_r4_ind) {setverdict(pass);}
+  else {setverdict(fail);}
+  
+  if(c_r1 == c_r6_ind) {setverdict(pass);}
+  else {setverdict(fail);}
+
+
+  if(c_r1 != vl_r7_ind) {setverdict(pass);}
+  else { setverdict(fail);}
+
+  if(c_r4_ind == c_r8_ind) {setverdict(pass); }
+  else {setverdict(fail);}
+
+  if(vl_r10 == vl_r11) {setverdict(pass);}
+  else {setverdict(fail);}
+}
+
+type record length(10) of integer MyRecordOfType10
+type record length(0..10) of integer MyRecordOfType0_10
+type record length(10..infinity) of integer MyRecordOfType10up
+type record length(0..10) of charstring StringArray length(12)
+type record of record of charstring StringArrayTwo length(12)
+type record of charstring MyRecof2 ("a", "aa", "aaa", "aaaa") length(2)
+type record length(2) of charstring MyRecof3 ("a", "aa", "aaa", "aaaa")
+type record length(2) of charstring MyRecof4 ("a", "aa", "aaa", "aaaa") length(2)
+// TODO: Add additional subtypes here.
+type MyRecof2 MyRecof5
+type MyRecof3 MyRecof6
+type MyRecof4 MyRecof7
+type MyRecof2 MyRecof8 ({"aa"})
+type record of integer MyRecof9 (1..10, 100)
+
+const MyRecof2 c_myrecof1 := {}
+const MyRecof2 c_myrecof2 := {"aa", "aa"}
+const MyRecof2 c_myrecof3 := {c_myrecof2[0], c_myrecof2[1]}
+const MyRecof3 c_myrecof4 := {"a", "aa"}
+const MyRecof3 c_myrecof5 := {c_myrecof4[0], c_myrecof4[1]}
+const MyRecof4 c_myrecof6 := {"aa", "aa"}
+const MyRecof4 c_myrecof7 := {c_myrecof6[0], c_myrecof6[1]}
+const MyRecof8 c_myrecof8 := {"aa"}
+const MyRecof9 c_myrecof9 := {1, 100}
+
+template MyRecof2 t_myrecof1 := {}
+template MyRecof2 t_myrecof2 := {"aa", "aa"}
+template MyRecof2 t_myrecof3 := c_myrecof2
+template MyRecof3 t_myrecof4 := {"a", "aa"}
+template MyRecof3 t_myrecof5 := c_myrecof5
+template MyRecof4 t_myrecof6 := {"aa", "aa"}
+template MyRecof4 t_myrecof7 := c_myrecof7
+template MyRecof8 t_myrecof8 := {"aa"}
+template MyRecof9 t_myrecof9 := {1, 100} length(2)
+
+testcase recofSubtype() runs on recofOper_mycomp {
+  var template MyRecordOfType10 vt_myrecof1 := { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
+  var MyRecordOfType10 v_myrecof1 := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
+  if (substr(v_myrecof1, 0, 2) == substr(vt_myrecof1, 1, 2)) { setverdict(pass) }
+  else { setverdict(fail) }
+}
+
+type record of charstring ROC;
+type record of integer  ROI;
+type record MyRecord1 {
+  integer       i optional,
+  float         x optional,
+  charstring    c
+}
+
+type record of ROI ROROI;
+
+type union MyUnion1 {
+  ROC roc,
+  integer i,
+  ROI roi,
+  MyRecord1 r
+}
+
+type record MyRec2 {
+  ROC roc optional,
+  ROI roi optional,
+  MyUnion1 u optional, 
+  MyRecord1 r optional
+}
+
+type record of MyRec2 MyRecOf
+
+type record MyRec3 {
+  ROROI roroi optional,
+  MyRec2 r optional
+}
+
+const MyRec2 c_myrec2_1:={ 
+  roc:=omit,
+  roi:={},
+  u:={r:={ i:=1, x:=1.0, c:="one"}},
+  r:={ i:=1, x:=1.0, c:="one"}
+}
+
+const MyRec3 c_myrec3_1 := {
+  roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
+  r:= omit
+}
+
+const MyRec3 c_myrec3_2 := {
+  roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
+  r:= {
+    roc:={},
+    roi:={},
+    u:={i:=5},
+    r:=omit
+  }
+} 
+
+const MyRec3 c_myrec3_innerOmits := {
+  roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
+  r:= {
+    roc:=omit,
+    roi:=omit,
+    u:=omit,
+    r:=omit
+  }
+} 
+
+testcase tc_recordOf_omit1() runs on recofOper_mycomp {
+  var MyRec2 vl_r1:=c_myrec2_1;
+  if(isbound(vl_r1.roc)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2 vl_r2:=c_myrec2_1;
+  if(isbound(vl_r2.roc[0])){setverdict(fail)}else {setverdict(pass)};
+  var MyRec2 vl_r3:=c_myrec2_1;
+  if(isbound(vl_r3.roi)){setverdict(pass)}else {setverdict(fail)};
+  var MyRec2 vl_r4:=c_myrec2_1;
+  if(isbound(vl_r4.roi[0])){setverdict(fail)}else {setverdict(pass)};
+  var MyRec2 vl_r5:=c_myrec2_1;
+  if(isbound(vl_r5.roi[90])){setverdict(fail)}else {setverdict(pass)};
+}
+
+testcase tc_recordOf_union() runs on recofOper_mycomp {
+  var MyRec2 vl_r:=c_myrec2_1;
+  if(isbound(vl_r.u)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r.i)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r.x)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.r.c)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.u.roi)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.roi[3])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.i)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.roc)){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.u.roc[0])){setverdict(fail)}else {setverdict(pass)}; 
+}
+
+testcase tc_recordOf_recordOfRecordOfInt() runs on recofOper_mycomp {
+  var MyRec3 vl_r:=c_myrec3_1;
+  if(isbound(vl_r.roroi)){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[0])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[1])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[2])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[200])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[0][0])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[0][8])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[0][9])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[1][0])){setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.roroi[1][1])){setverdict(fail)}else {setverdict(pass)};
+  if(isbound(vl_r.roroi[2][0])){setverdict(fail)}else {setverdict(pass)};
+}
+
+testcase tc_recordOf_recordInRecord() runs on recofOper_mycomp {
+  var MyRec3 vl_r:=c_myrec3_2;
+  if(isbound(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u.i)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.r)) {setverdict(pass)}else {setverdict(fail)};  //fails!
+}
+
+testcase tc_recordOf_recordInRecord_innerOmits() runs on recofOper_mycomp {
+  var MyRec3 vl_r:=c_myrec3_innerOmits;
+  if(isbound(vl_r.roroi)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+  if(isbound(vl_r.r.r)){setverdict(pass)}else {setverdict(fail)};
+}
+
+  testcase tc_recordOf_union_ispresent() runs on recofOper_mycomp {
+    var MyRec2 vl_r:=c_myrec2_1;
+    if(ispresent(vl_r.u)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r.i)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r.x)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.r.c)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.u.roi)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.roi[3])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.i)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.roc)){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.u.roc[0])){setverdict(fail)}else {setverdict(pass)}; 
+  }
+
+  testcase tc_recordOf_recordOfRecordOfInt_ispresent() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_1;
+    if(ispresent(vl_r.roroi)){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[0])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[1])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[2])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[200])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[0][0])){setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_recordOf_recordOfRecordOfInt2() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_1;
+    if(ispresent(vl_r.roroi[0][8])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[0][9])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[1][0])){setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.roroi[1][1])){setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.roroi[2][0])){setverdict(fail)}else {setverdict(pass)};
+  }
+
+  testcase tc_recordOf_recordInRecord_ispresent() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_2;
+    if(ispresent(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.u.i)) {setverdict(pass)}else {setverdict(fail)};
+  }
+
+  testcase tc_recordOf_recordInRecord2() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_2;
+    if(ispresent(vl_r.r.r)) {setverdict(fail)}else {setverdict(pass)}; 
+  }
+  
+  testcase tc_recordOf_recordInRecord_innerOmits_ispresent() runs on recofOper_mycomp {
+    var MyRec3 vl_r:=c_myrec3_innerOmits;
+    if(ispresent(vl_r.roroi)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
+    if(ispresent(vl_r.r.roc)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.roi)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.u)) {setverdict(fail)}else {setverdict(pass)};
+    if(ispresent(vl_r.r.r)){setverdict(fail)}else {setverdict(pass)};
+  }
+
+type record length(6) of integer MyArray6;
+
+//TR: HO84027
+testcase tc_sizeof_lengthof_roi_bugs() runs on recofOper_mycomp {
+  var template ROI vlt_roi :={}
+  var integer vl_array[6];  
+  var MyArray6 vl_array6;
+  var template MyArray6 vlt_array6;
+
+  vlt_roi[0]:=0;
+  vlt_roi[5]:=0;
+
+  vl_array[0]:=0;
+  vl_array[4]:=0;
+
+  vl_array6[0]:=0;
+  vl_array6[4]:=0;
+
+  vlt_array6[0]:=0;
+  vlt_array6[4]:=0;
+
+  if(sizeof(vlt_roi)==6)     { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vlt_roi)==6)   { setverdict(pass) } else { setverdict(fail) };
+
+  if(sizeof(vl_array)==6)    { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vl_array)==5)  { setverdict(pass) } else { setverdict(fail) };
+
+  if(sizeof(vl_array6)==5)   { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vl_array6)==5) { setverdict(pass) } else { setverdict(fail) };
+  
+  if(sizeof(vlt_array6)==5)  { setverdict(pass) } else { setverdict(fail) };
+  if(lengthof(vlt_array6)==5){ setverdict(pass) } else { setverdict(fail) };
+}
+
+testcase tc_sizeof_lengthof_standard1() runs on recofOper_mycomp {
+  if(lengthof(bitstring : '010'B) == 3) { setverdict(pass)} else { setverdict(fail) };
+  if(lengthof(hexstring : 'F3'H) == 2) { setverdict(pass)} else { setverdict(fail) };
+  if(lengthof(octetstring : 'F2'O) == 1) { setverdict(pass)} else { setverdict(fail) };
+  if(lengthof (universal charstring : "Length_of_Example")==17) { setverdict(pass)}else { setverdict(fail) };
+  if(lengthof(charstring : "HELLO") == 5) { setverdict(pass)}else { setverdict(fail) };
+  if(lengthof(octetstring : ('12'O, '34'O))==1){ setverdict(pass)}else { setverdict(fail) };
+  if(lengthof('1??1'B)==4){ setverdict(pass)}else { setverdict(fail) };
+  if(lengthof(universal charstring : ? length(8))==8 ) { setverdict(pass)}else { setverdict(fail) }; //DTE
+  if(lengthof('1*F'H length (8)) ==8){ setverdict(pass)}else { setverdict(fail) };
+  if(lengthof('00*FF'O length(1..2))==2) { setverdict(pass)}else { setverdict(fail) };
+}
+
+type record length(0..10) of integer MyList;
+
+testcase tc_sizeof_lengthof_standard2() runs on recofOper_mycomp {
+  var MyList vl_MyListVar := { 0, 1, -, 2, - };
+  log("vl_MyListVar: ",vl_MyListVar);
+  if(lengthof(vl_MyListVar)==4) { setverdict(pass)}else { setverdict(fail) };
+}
+
+testcase tc_sizeof_lengthof_standard4() runs on recofOper_mycomp {
+  template ROI tr_roI3 := { 1, *, 10 } length(5) 
+  if(lengthof(tr_roI3)==5){ setverdict(pass)}else { setverdict(fail) };
+}
+
+testcase tc_sizeof_lengthof_standard6() runs on recofOper_mycomp {
+  template ROI tr_roI5 := { 1, 2, 3, * } length(1..3) 
+  if(lengthof(tr_roI5)==3) { setverdict(pass)}else { setverdict(fail) };
+}
+
+// test cases for bug 494614:
+// when initializing a record-of-record element with an empty value ('{}') through module parameters,
+// an actual unbound record element was created, instead of the usual null pointer used for unbound elements;
+// copying this empty record caused a dynamic test case error
+
+modulepar recofOper_myrecof3 recofOper_mymodulepar; // initialized with value list notation
+modulepar recofOper_myrecof3 recofOper_mymodulepar2; // initialized with assignment notation
+
+testcase tc_empty_record_element() runs on recofOper_mycomp {
+  var recofOper_myrecof3 copy := recofOper_mymodulepar;
+  copy[0].x1 := omit; // this is where the record-of is actually copied, and where the DTE occured
+  copy[0].x2 := 1.0;
+  if (copy == { { omit, 1.0 } }) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+testcase tc_empty_record_element2() runs on recofOper_mycomp {
+  var recofOper_myrecof3 copy := recofOper_mymodulepar2;
+  copy[0].x1 := omit; // this is where the record-of is actually copied, and where the DTE occured
+  copy[0].x2 := 1.0;
+  if (copy == { { omit, 1.0 } }) { setverdict(pass); }
+  else { setverdict(fail); }
+}
+
+control {
+  const recofOper_trecord cl_temp1:={ x1:=omit, x2:=3.4 }; // constants in the control part
+  const recofOper_trecof cl_temp2:={ 'AF12'O };
+  const recofOper_tset cl_temp3:={ x1:=234, x2:=1.9};
+  const recofOper_tsetof cl_temp4:={"f","8"};
+  const recofOper_tunion cl_temp5:={ x2:=1.3 };
+  const recofOper_trecord vl_temp1:={ x1:=omit, x2:=3.4 }; // variables in the control part
+  const recofOper_trecof vl_temp2:={ 'AF12'O };
+  const recofOper_tset vl_temp3:={ x1:=234, x2:=1.9};
+  const recofOper_tsetof vl_temp4:={"f","8"};
+  const recofOper_tunion vl_temp5:={ x2:=1.3 };
+
+  execute(recofAssign());
+  execute(recofReAssign());
+  execute(recofAssignEnum());
+  execute(recofAssignRec());
+  execute(recofAssignRecof());
+  execute(recofAssignSet());
+  execute(recofAssignSetof());
+  execute(recofAssignUnion());
+  execute(recofAssignElem());
+  execute(recofAssignElemEnum());
+  execute(recofAssignElemRec());
+  execute(recofAssignElemRecof());
+  execute(recofAssignElemSet());
+  execute(recofAssignElemSetof());
+  execute(recofAssignElemUnion());
+  execute(recofConst());
+  execute(recofConstEnum());
+  execute(recofConstRec());
+  execute(recofConstRecof());
+  execute(recofConstSet());
+  execute(recofConstSetof());
+  execute(recofConstUnion());
+  execute(recofComp());
+  execute(recofCompConst());
+  execute(recofCompEnum());
+  execute(recofCompRec());
+  execute(recofCompRecof());
+  execute(recofCompSet());
+  execute(recofCompSetof());
+  execute(recofCompUnion());  
+  execute(recofEmpty());
+
+  execute(recofListOperator());
+  execute(recofRotateOperators());
+  execute(recofLengthof());
+  execute(recofSizeof());
+  execute(recofReplace());
+  execute(recofReplaceEmpty());
+  execute(recofSubstr());
+  execute(recofIsvalue());
+  execute(recofIsvalue2());
+  execute(recofIsbound());
+
+  execute(recofSubtype());
+  
+  execute(tc_recordOf_omit1());
+  execute(tc_recordOf_union());
+  execute(tc_recordOf_recordOfRecordOfInt());
+  execute(tc_recordOf_recordInRecord());
+  execute(tc_recordOf_recordInRecord_innerOmits());
+  execute(tc_recordOf_union_ispresent());
+  execute(tc_recordOf_recordOfRecordOfInt_ispresent());
+  execute(tc_recordOf_recordOfRecordOfInt2());
+  execute(tc_recordOf_recordInRecord_ispresent());
+  execute(tc_recordOf_recordInRecord2());
+  execute(tc_recordOf_recordInRecord_innerOmits_ispresent());
+  execute(tc_sizeof_lengthof_roi_bugs());
+  execute(tc_sizeof_lengthof_standard1());
+  execute(tc_sizeof_lengthof_standard2());
+  execute(tc_sizeof_lengthof_standard4());
+  execute(tc_sizeof_lengthof_standard6());
+  
+ // execute(tc_empty_record_element()); //DTE
+ // execute(tc_empty_record_element2()); //DTE
+}
+
+}
diff --git a/Regression_Test_java/src/recofOper/TrecofParamRef.ttcn b/Regression_Test_java/src/recofOper/TrecofParamRef.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..4f454bc7e7516aea729fd8fae3f5874a6324fb85
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/TrecofParamRef.ttcn
@@ -0,0 +1,762 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module TrecofParamRef {
+
+import from BerType language "ASN.1:1997" all with { encode "DER:1997" };
+
+// This module contains test cases, where a record of/set of and one of its elements are passed
+// as inout parameters to a function. Inside this function modifications to the element will also modify
+// the record of, while modifications to the record of may (in our case WILL) modify the element.
+
+type component CT_Empty {};
+
+// 1. Assignment
+type record of integer RoI;
+
+function f_param_ref_assign(inout RoI p_roi, inout integer p_elem) runs on CT_Empty
+{
+  p_roi := { 10 };
+
+  if (p_roi == { 10 }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 10 }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+}
+
+testcase tc_param_ref_assign() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_assign(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+}
+
+// 2. Concatenation
+function f_param_ref_concat(inout RoI p_roi, inout integer p_elem) runs on CT_Empty
+{
+  const RoI c := { 9, 8, 7 };
+
+  p_roi := c & { 4, 5 };
+
+  if (p_roi == { 9, 8, 7, 4, 5 }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 9, 8, 7, 4, 5 }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 9, 8, 7, 4, 5, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 9, 8, 7, 4, 5, 20 }"); }
+
+  p_roi := p_roi & { 6, 7 };
+
+  if (p_roi == { 9, 8, 7, 4, 5, 20, 6, 7 }) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: { 9, 8, 7, 4, 5, 20, 6, 7 }"); }
+}
+
+testcase tc_param_ref_concat() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_concat(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 9, 8, 7, 4, 5, 20, 6, 7 }") { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", v_roi, ", expected: { 9, 8, 7, 4, 5, 20, 6, 7 }"); }
+}
+
+// 3. Replacing
+function f_param_ref_replace(inout RoI p_roi, inout integer p_elem) runs on CT_Empty
+{
+  const RoI c1 := { 7, 6 };
+  const RoI c2 := { 5, 4, 3 };
+
+  p_roi := replace(p_roi, 2, 4, c1);
+
+  if (p_roi == { 0, 1, 7, 6 }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 0, 1, 7, 6 }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 0, 1, 7, 6, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 0, 1, 7, 6, <unbound>, 20 }"); }
+
+  p_roi := replace(p_roi, 4, 2, c2);
+  
+  if (p_roi == { 0, 1, 7, 6, 5, 4, 3 }) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: { 0, 1, 7, 6, 5, 4, 3 }"); }
+
+  if (p_elem == 4) { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_elem, ", expected: 4"); }
+}
+
+testcase tc_param_ref_replace() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_replace(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 0, 1, 7, 6, 5, 4, 3 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 0, 1, 7, 6, 5, 4, 3 }"); }
+}
+
+// 3.B Simplified replacing
+//======== Simplified case, deterministic behavior expected: =====
+
+function f_param_ref_replace_1arg(inout RoI p_roi) runs on CT_Empty
+{
+  const RoI c1 := { 7, 6 };
+  const RoI c2 := { 5, 4, 3 };
+
+  p_roi := replace(p_roi, 2, 4, c1);
+
+  if (p_roi == { 0, 1, 7, 6 }) { setverdict(pass); } //ok
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 0, 1, 7, 6 }"); }
+//
+//  if (log2str(p_roi[5]) == "<unbound>") { setverdict(pass); }
+//  else { setverdict(fail, "@2 got: ", p_roi[5], ", expected: <unbound>"); } //nok!!!
+
+  p_roi[5] := 20;
+
+  if (log2str(p_roi) == "{ 0, 1, 7, 6, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 0, 1, 7, 6, <unbound>, 20 }"); }
+
+  p_roi := replace(p_roi, 4, 2, c2);
+  
+  if (p_roi == { 0, 1, 7, 6, 5, 4, 3 }) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: { 0, 1, 7, 6, 5, 4, 3 }"); }
+
+  if (p_roi[5] == 4) { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_roi[5], ", expected: 4"); }
+}
+
+//There is no expected sideeffect
+testcase tc_param_ref_replace_1arg() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_replace_1arg(v_roi);
+  
+  if (log2str(v_roi) == "{ 0, 1, 7, 6, 5, 4, 3 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 0, 1, 7, 6, 5, 4, 3 }"); }
+}
+// 4. JSON decoding
+type record of integer RoI_json with { encode "JSON" };
+
+external function f_enc_json(in RoI_json x) return octetstring
+  with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_json(in octetstring os, out RoI_json x)
+  with { extension "prototype(fast) decode(JSON)" }
+
+function f_param_ref_json(inout RoI_json p_roi, inout integer p_elem) runs on CT_Empty
+{
+  var RoI_json enc_val := { 10, 16 };
+  var octetstring os := f_enc_json(enc_val);
+  f_dec_json(os, p_roi);
+
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, 16, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, 16, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  enc_val := { 3, 2, 1, 9, 8, 7, 6 };
+  os := f_enc_json(enc_val);
+  f_dec_json(os, p_roi);
+  
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (p_elem == 7) { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_elem, ", expected: 7"); }
+}
+
+testcase tc_param_ref_json() runs on CT_Empty
+{
+  var RoI_json v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_json(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 3, 2, 1, 9, 8, 7, 6 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 3, 2, 1, 9, 8, 7, 6 }"); }
+}
+
+// 5. XER decoding
+type record of integer RoI_xer with { encode "XML" };
+
+external function f_enc_xer(in RoI_xer x) return octetstring
+  with { extension "prototype(convert) encode(XER:XER_EXTENDED)" }
+
+external function f_dec_xer(in octetstring os, out RoI_xer x)
+  with { extension "prototype(fast) decode(XER:XER_EXTENDED)" }
+
+function f_param_ref_xer(inout RoI_xer p_roi, inout integer p_elem) runs on CT_Empty
+{
+  var RoI_xer enc_val := { 10, 16 };
+  var octetstring os := f_enc_xer(enc_val);
+  f_dec_xer(os, p_roi);
+
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, 16, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, 16, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  enc_val := { 3, 2, 1, 9, 8, 7, 6 };
+  os := f_enc_xer(enc_val);
+  f_dec_xer(os, p_roi);
+  
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (p_elem == 7) { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_elem, ", expected: 7"); }
+}
+
+testcase tc_param_ref_xer() runs on CT_Empty
+{
+  var RoI_xer v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_xer(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 3, 2, 1, 9, 8, 7, 6 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 3, 2, 1, 9, 8, 7, 6 }"); }
+}
+
+// 6. TEXT decoding
+type record of integer RoI_text with { encode "TEXT"; variant "BEGIN('numbrz:'),END(';'),SEPARATOR(' ')"; };
+
+external function f_enc_text(in RoI_text x) return charstring
+  with { extension "prototype(convert) encode(TEXT)" }
+
+external function f_dec_text(in charstring cs, out RoI_text x)
+  with { extension "prototype(fast) decode(TEXT)" }
+
+function f_param_ref_text(inout RoI_text p_roi, inout integer p_elem) runs on CT_Empty
+{
+  var RoI_text enc_val := { 10, 16 };
+  var charstring cs := f_enc_text(enc_val);
+  f_dec_text(cs, p_roi);
+
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, 16, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, 16, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  enc_val := { 3, 2, 1, 9, 8, 7, 6 };
+  cs := f_enc_text(enc_val);
+  f_dec_text(cs, p_roi);
+  
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (p_elem == 7) { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_elem, ", expected: 7"); }
+}
+
+testcase tc_param_ref_text() runs on CT_Empty
+{
+  var RoI_text v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_text(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 3, 2, 1, 9, 8, 7, 6 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 3, 2, 1, 9, 8, 7, 6 }"); }
+}
+
+// 7. RAW decoding
+type record of integer RoI_raw with { encode "RAW"; variant "" };
+
+external function f_enc_raw(in RoI_raw x) return octetstring
+  with { extension "prototype(convert) encode(RAW)" }
+
+external function f_dec_raw(in octetstring os, out RoI_raw x)
+  with { extension "prototype(fast) decode(RAW)" }
+
+function f_param_ref_raw(inout RoI_raw p_roi, inout integer p_elem) runs on CT_Empty
+{
+  var RoI_raw enc_val := { 10, 16 };
+  var octetstring os := f_enc_raw(enc_val);
+  f_dec_raw(os, p_roi);
+
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, 16, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, 16, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  enc_val := { 3, 2, 1, 9, 8, 7, 6 };
+  os := f_enc_raw(enc_val);
+  f_dec_raw(os, p_roi);
+  
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (p_elem == 7) { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_elem, ", expected: 7"); }
+}
+
+testcase tc_param_ref_raw() runs on CT_Empty
+{
+  var RoI_raw v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_raw(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 3, 2, 1, 9, 8, 7, 6 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 3, 2, 1, 9, 8, 7, 6 }"); }
+}
+
+// 8. BER decoding, using record of integer type defined in BerType.asn
+
+external function f_enc_ber(in RoI_ber x) return octetstring
+  with { extension "prototype(convert) encode(BER:BER_ENCODE_DER)" }
+
+external function f_dec_ber(in octetstring os, out RoI_ber x)
+  with { extension "prototype(fast) decode(BER:BER_ACCEPT_ALL)" }
+
+function f_param_ref_ber(inout RoI_ber p_roi, inout integer p_elem) runs on CT_Empty
+{
+  var RoI_ber enc_val := { 10, 16 };
+  var octetstring os := f_enc_ber(enc_val);
+  f_dec_ber(os, p_roi);
+
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, 16, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, 16, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  enc_val := { 3, 2, 1, 9, 8, 7, 6 };
+  os := f_enc_ber(enc_val);
+  f_dec_ber(os, p_roi);
+  
+  if (p_roi == enc_val) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_roi, ", expected: ", enc_val); }
+
+  if (p_elem == 7) { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_elem, ", expected: 7"); }
+}
+
+testcase tc_param_ref_ber() runs on CT_Empty
+{
+  var RoI_ber v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_ber(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 3, 2, 1, 9, 8, 7, 6 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 3, 2, 1, 9, 8, 7, 6 }"); }
+}
+
+// 9. The record of is embedded in another structure
+type record EmbRec {
+  charstring text,
+  RoI numbers
+}
+
+function f_param_ref_emb_recof(inout EmbRec p_rec, inout integer p_elem) runs on CT_Empty
+{
+  p_rec := { "second", { 10 } };
+
+  if (p_rec == { "second", { 10 } }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_rec, ", expected: { text := \"second\", numbers := { 10 } }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_rec) == "{ text := \"second\", numbers := { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_rec, ", expected: { text := \"second\", numbers := { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }"); }
+}
+
+testcase tc_param_ref_emb_recof() runs on CT_Empty
+{
+  var EmbRec v_rec := { "first", { 0, 1, 2, 3, 4, 5 } };
+  f_param_ref_emb_recof(v_rec, v_rec.numbers[5]);
+  
+  if (log2str(v_rec) == "{ text := \"second\", numbers := { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_rec, ", expected: { text := \"second\", numbers := { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }"); }
+}
+
+// 10. The second parameter is not the whole element type, just a part of it
+type record ElemType {
+  integer num,
+  charstring str
+}
+
+type record of ElemType Elems;
+
+function f_param_ref_emb_elem(inout Elems p_elems, inout integer p_num) runs on CT_Empty
+{
+  p_elems := { { 10, "ten" } };
+
+  if (p_elems == { { 10, "ten" } }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_elems, ", expected: { { num := 10, str := \"ten\" } }"); }
+
+  if (log2str(p_num) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_num, ", expected: <unbound>"); }
+
+  p_num := 20;
+
+  if (log2str(p_elems) == "{ { num := 10, str := \"ten\" }, <unbound>, { num := 20, str := <unbound> } }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_elems, ", expected: { { num := 10, str := \"ten\" }, <unbound>, { num := 20, str := <unbound> } }"); }
+}
+
+testcase tc_param_ref_emb_elem() runs on CT_Empty
+{
+  var Elems v_elems := { { 1, "one" }, { 2, "two" }, { 3, "three" }, { 4, "four" } };
+  f_param_ref_emb_elem(v_elems, v_elems[2].num);
+  
+  if (log2str(v_elems) == "{ { num := 10, str := \"ten\" }, <unbound>, { num := 20, str := <unbound> } }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_elems, ", expected: { { num := 10, str := \"ten\" }, <unbound>, { num := 20, str := <unbound> } }"); }
+}
+
+// 11. Two embedded functions, each called with a reference to one of the elements in the record of
+function f_param_ref_emb_inner(inout RoI p_roi, inout integer p_elem) runs on CT_Empty
+{
+  p_roi := { 10 };
+
+  if (p_roi == { 10 }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 10 }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, <unbound>, <unbound>, 20 }"); }
+}
+
+function f_param_ref_emb_outer(inout RoI p_roi, inout integer p_elem) runs on CT_Empty
+{
+  f_param_ref_emb_inner(p_roi, p_roi[3]);
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 30;
+
+  if (log2str(p_roi) == "{ 10, <unbound>, <unbound>, 20, <unbound>, 30 }") { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_roi, ", expected: { 10, <unbound>, <unbound>, 20, <unbound>, 30 }"); }
+}
+
+testcase tc_param_ref_emb_func() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_emb_outer(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 10, <unbound>, <unbound>, 20, <unbound>, 30 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 10, <unbound>, <unbound>, 20, <unbound>, 30 }"); }
+}
+
+// 12. The element as out parameter instead of inout (it will be set to unbound at the begining of the function)
+function f_param_ref_out_par(inout RoI p_roi, out integer p_elem) runs on CT_Empty
+{
+  if (log2str(p_roi) == "{ 0, 1, 2, 3, <unbound>, 5 }") { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 0, 1, 2, 3, <unbound>, 5 }"); }
+
+  p_roi := { 9, 8, 7, 6, 5 };
+
+  if (p_elem == 5) { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: 5"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 9, 8, 7, 6, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 9, 8, 7, 6, 20 }"); }
+}
+
+testcase tc_param_ref_out_par() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_out_par(v_roi, v_roi[4]);
+  
+  if (log2str(v_roi) == "{ 9, 8, 7, 6, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_roi, ", expected: { 9, 8, 7, 6, 20 }"); }
+}
+
+// 13. Copying the array
+function f_param_ref_copy(inout RoI p_roi, inout integer p_elem) runs on CT_Empty
+{
+  var RoI v_copy := p_roi;
+  p_roi := { 10 };
+
+  if (p_roi == { 10 }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 10 }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  if (v_copy == { 0, 1, 2, 3, 4, 5 }) { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_copy, ", expected: { 0, 1, 2, 3, 4, 5 }"); }
+  
+  v_copy := p_roi;
+  v_copy[5] := 11;
+  v_copy[2] := 3;
+
+  if (log2str(p_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@5 got: ", p_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+}
+
+testcase tc_param_ref_copy() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  var RoI v_copy := v_roi;
+  f_param_ref_copy(v_roi, v_roi[5]);
+  
+  if (log2str(v_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@6 got: ", v_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  if (v_copy == { 0, 1, 2, 3, 4, 5 }) { setverdict(pass); }
+  else { setverdict(fail, "@7 got: ", v_copy, ", expected: { 0, 1, 2, 3, 4, 5 }"); }
+}
+
+// 14. Arrays
+type integer Ints[6];
+function f_param_ref_array(inout Ints p_arr, inout integer p_elem) runs on CT_Empty
+{
+  p_arr := { 10, 12, 14, 16, 18, 20 };
+
+  if (p_elem == 20) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_elem, ", expected: 20"); }
+
+  p_elem := 7;
+
+  if (log2str(p_arr) == "{ 10, 12, 14, 16, 18, 7 }") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_arr, ", expected: { 10, 12, 14, 16, 18, 7 }"); }
+}
+
+testcase tc_param_ref_array() runs on CT_Empty
+{
+  var Ints v_arr := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_array(v_arr, v_arr[5]);
+  
+  if (log2str(v_arr) == "{ 10, 12, 14, 16, 18, 7 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", v_arr, ", expected: { 10, 12, 14, 16, 18, 7 }"); }
+}
+
+// 15. Multiple array indexes
+type record of EmbRec EmbRecs;
+
+function f_param_ref_multi(inout EmbRecs p_recs, inout integer p_elem) runs on CT_Empty
+{
+  p_recs := { { "just one", { 10 } } };
+
+  if (p_recs == { { "just one", { 10 } } }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_recs, ", expected: { { text := \"just one\", numbers := { 10 } } }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_recs) == "{ { text := \"just one\", numbers := { 10 } }, <unbound>, { text := <unbound>, numbers := { <unbound>, 20 } } }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_recs, ", expected: { { text := \"just one\", numbers := { 10 } }, <unbound>, { text := <unbound>, numbers := { <unbound>, 20 } } }"); }
+}
+
+testcase tc_param_ref_multi() runs on CT_Empty
+{
+  var EmbRecs v_recs := { { "first", { 5, 10, 15 } }, { "second", { 7 } }, { "third", { 1, 2, 3 } } };
+  f_param_ref_multi(v_recs, v_recs[2].numbers[1]);
+  
+  if (log2str(v_recs) == "{ { text := \"just one\", numbers := { 10 } }, <unbound>, { text := <unbound>, numbers := { <unbound>, 20 } } }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_recs, ", expected: { { text := \"just one\", numbers := { 10 } }, <unbound>, { text := <unbound>, numbers := { <unbound>, 20 } } }"); }
+}
+
+// 16. Template parameter
+function f_param_ref_templ8(inout template RoI pt_roi, inout template integer pt_elem) runs on CT_Empty
+{
+  pt_roi := { 10 };
+
+  if (log2str(pt_roi) == "{ 10 }") { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", pt_roi, ", expected: { 10 }"); }
+
+  if (log2str(pt_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", pt_elem, ", expected: <unbound>"); }
+
+  pt_elem := 20;
+
+  if (log2str(pt_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", pt_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+}
+
+testcase tc_param_ref_templ8() runs on CT_Empty
+{
+  var template RoI vt_roi := { 0, 1, 2, 3, 4, 5 };
+  f_param_ref_templ8(vt_roi, vt_roi[5]);
+
+  if (log2str(vt_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", vt_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+}
+
+// 17. Same as no. 9 (record of embedded in a record) but with the record of field being optional
+type record EmbRecOpt {
+  charstring text,
+  RoI numbers optional
+}
+
+function f_param_ref_emb_recof_opt(inout EmbRecOpt p_rec, inout integer p_elem) runs on CT_Empty
+{
+  p_rec := { "second", omit };
+
+  if (p_rec == { "second", omit }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_rec, ", expected: { text := \"second\", numbers := omit }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_rec) == "{ text := \"second\", numbers := { <unbound>, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_rec, ", expected: { text := \"second\", numbers := { <unbound>, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }"); }
+}
+
+testcase tc_param_ref_emb_recof_opt() runs on CT_Empty
+{
+  var EmbRecOpt v_rec := { "first", { 0, 1, 2, 3, 4, 5 } };
+  f_param_ref_emb_recof_opt(v_rec, v_rec.numbers[5]);
+  
+  if (log2str(v_rec) == "{ text := \"second\", numbers := { <unbound>, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_rec, ", expected: { text := \"second\", numbers := { <unbound>, <unbound>, <unbound>, <unbound>, <unbound>, 20 } }"); }
+}
+
+// 18. The function call is part of a lazy parameter expression
+function f_param_ref_emb_lazy(inout RoI p_roi, inout integer p_elem) runs on CT_Empty return charstring
+{
+  p_roi := { 10 };
+
+  if (p_roi == { 10 }) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", p_roi, ", expected: { 10 }"); }
+
+  if (log2str(p_elem) == "<unbound>") { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", p_elem, ", expected: <unbound>"); }
+
+  p_elem := 20;
+
+  if (log2str(p_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@3 got: ", p_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+
+  return int2str(p_elem);
+}
+
+function f_lazy(in integer p_val, in @lazy charstring p_str) runs on CT_Empty
+{
+  if (isbound(p_val)) {
+    log(p_str);
+    setverdict(pass);
+  }
+  else {
+    setverdict(fail, "lazy expression evaluated too soon");
+  }
+}
+
+testcase tc_param_ref_emb_lazy() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3, 4, 5 };
+  f_lazy(v_roi[1], f_param_ref_emb_lazy(v_roi, v_roi[5]));
+  
+  if (log2str(v_roi) == "{ 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }") { setverdict(pass); }
+  else { setverdict(fail, "@4 got: ", v_roi, ", expected: { 10, <unbound>, <unbound>, <unbound>, <unbound>, 20 }"); }
+}
+
+// 19. The function call is interrupted by a DTE, the reference to the element should be cleaned up (HT47424)
+function f_dte(in RoI p_roi, inout integer p_val) runs on CT_Empty
+{
+  var integer bad_index := -1;
+  if (p_val < p_roi[bad_index]) {
+    setverdict(fail, "expected DTE in if clause");
+  }
+}
+
+testcase tc_param_ref_dte() runs on CT_Empty
+{
+  var RoI v_roi := { 0, 1, 2, 3 };
+  @try {
+    f_dte(v_roi, v_roi[2]);
+    setverdict(fail, "expected DTE in function call");
+  }
+  @catch (dummy) {}
+  v_roi := { };
+  var RoI v_copy := v_roi;
+  var charstring log_exp := "{ }";
+  if (log2str(v_roi) == log_exp) { setverdict(pass); }
+  else { setverdict(fail, "@1 got: ", v_roi, ", expected: ", log_exp); }
+  if (log2str(v_copy) == log_exp) { setverdict(pass); }
+  else { setverdict(fail, "@2 got: ", v_copy, ", expected: ", log_exp); }
+}
+
+control {
+  execute(tc_param_ref_assign());
+  execute(tc_param_ref_concat());
+  execute(tc_param_ref_replace());
+  execute(tc_param_ref_replace_1arg());
+
+  execute(tc_param_ref_json());
+  execute(tc_param_ref_xer());
+  execute(tc_param_ref_text());
+  execute(tc_param_ref_raw());
+  execute(tc_param_ref_ber());
+
+  execute(tc_param_ref_emb_recof());
+  execute(tc_param_ref_emb_elem());
+  execute(tc_param_ref_emb_func());
+
+  execute(tc_param_ref_out_par());
+  execute(tc_param_ref_copy());
+  execute(tc_param_ref_array());
+  execute(tc_param_ref_multi());
+
+  //execute(tc_param_ref_templ8()); Doesn't work for templates
+
+  execute(tc_param_ref_emb_recof_opt());
+  execute(tc_param_ref_emb_lazy());
+
+  execute(tc_param_ref_dte());
+}
+
+} // end of module
diff --git a/Regression_Test_java/src/recofOper/config.cfg b/Regression_Test_java/src/recofOper/config.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..998c1b1422bf3ba54c620a93bd9284a4c2f6c283
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/config.cfg
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright (c) 2000-2019 Ericsson Telecom AB
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+#
+# Contributors:
+#   Balasko, Jeno
+#   Baranyi, Botond
+#   Szabo, Janos Zoltan – initial implementation
+#
+###############################################################################
+[MODULE_PARAMETERS]
+recofOper_mymodulepar := { {} }
+recofOper_mymodulepar2 := { [0] := {} }
+[LOGGING]
+Logfile := "recofOper.log"
+FileMask := LOG_ALL
+ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS
+[EXECUTE]
+TrecofOper
+TrecofCompat
diff --git a/Regression_Test_java/src/recofOper/config_rt2.cfg b/Regression_Test_java/src/recofOper/config_rt2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..07df87e37d2bd00d45417d80f698fcdf59b774e6
--- /dev/null
+++ b/Regression_Test_java/src/recofOper/config_rt2.cfg
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright (c) 2000-2019 Ericsson Telecom AB
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+#
+# Contributors:
+#   Balasko, Jeno
+#   Baranyi, Botond
+#
+###############################################################################
+[MODULE_PARAMETERS]
+recofOper_mymodulepar := { {} }
+recofOper_mymodulepar2 := { [0] := {} }
+[LOGGING]
+Logfile := "recofOper.log"
+FileMask := LOG_ALL
+ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS
+[EXECUTE]
+TrecofOper
+TrecofCompat
+TrecofParamRef
diff --git a/Regression_Test_java/src/text2ttcn/array_test.ttcn b/Regression_Test_java/src/text2ttcn/array_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..4b2e72890f0732e0a3bc4700da322d40e6b9f2b6
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/array_test.ttcn
@@ -0,0 +1,1021 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module array_test
+{
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  template AI3 tspt_array_i3_a := *
+  template AI3 tspt_array_i3_q := ?
+  template AI3 tspt_array_i3_v0 := {-,-,-} //error, length shall be 3
+  template AI3 tspt_array_i3_v1:= {1,-,-}
+  template AI3 tspt_array_i3_v2:= {1,2,-}
+  template AI3 tspt_array_i3_v3v := {0, 1, 2}
+  //template AI3 tspt_array_i3_v4 := {0, 1, 2, 3} //error, length shall be 3
+  template AI3 tspt_array_i3_v3a := {0, *, 2}
+  template AI3 tspt_array_i3_v3q := {?, 1, 2}
+  //template AI3 tspt_array_i3_v3o := {omit, 1, 2} //"error: `omit' value is not allowed in this context"
+  template AI3 tspt_array_i3_v3vl := {0, 1, (1,2)} //value list
+  template AI3 tspt_array_i3_vl := ( {0,1,2},{9,10,11})
+  template AI3 tspt_array_i3_v3r := {0, 1, (1..3)} //range
+  template AI3 tspt_array_i3_v3mix := {(0,1), 1, (1..3)}
+  template AI3 tspt_array_i3_v3c := {(0,1), 1, complement(2,3)}
+  template AI3 tspt_array_i3_v3p := { permutation(1,2,3) } //TR: HS10539, fixed
+  template AI3 tspt_array_i3_v3pa := { permutation(1,2,*) }
+  
+  template AI3 tspt_array_i3_mod4a := {9,10,11}
+  template AI3 tspt_array_i3_mod4q := {9,10,11}
+  template AI3 tspt_array_i3_mod4o := *
+  template AI3 tspt_array_i3_mod4v0 := {1,2,3}
+  template AI3 tspt_array_i3_mod4v1:= {-,2,3}
+  template AI3 tspt_array_i3_mod4v2:= {-,-,3}
+  template AI3 tspt_array_i3_mod4v3v := {-,-,-}
+  //template AI3 tspt_array_i3_mod4v4 := {-,-,-}
+  template AI3 tspt_array_i3_mod4v3a := {9,10,11}
+  template AI3 tspt_array_i3_mod4v3q := {9,10,11}
+  //template AI3 tspt_array_i3_mod4v3o := *
+  template AI3 tspt_array_i3_mod4v3vl := {-,-,-}
+  template AI3 tspt_array_i3_mod4vl := *
+  template AI3 tspt_array_i3_mod4v3r := {-,-,-}
+  template AI3 tspt_array_i3_mod4v3mix := {-,-,-}
+  template AI3 tspt_array_i3_mod4v3c := {-,-,-}
+  template AI3 tspt_array_i3_mod4field1 := { (0, 1), 1, (1 .. 3) }
+  
+  template AI3 tspt_array_i3_mod4aifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4qifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4v0ifp := *
+  template AI3 tspt_array_i3_mod4v1ifp := *
+  template AI3 tspt_array_i3_mod4v2ifp := *
+  template AI3 tspt_array_i3_mod4v3vifp := *
+  template AI3 tspt_array_i3_mod4v4 := ?
+  template AI3 tspt_array_i3_mod4v3aifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4v3qifp := {9,10,11}
+  //template AI3 tspt_array_i3_mod4v3o ifp := *
+  template AI3 tspt_array_i3_mod4v3vlifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4vlifp := *
+  template AI3 tspt_array_i3_mod4v3rifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4v3mixifp := ?
+  template AI3 tspt_array_i3_mod4v3cifp := ?;
+  // template AI3 tspt_array_i3_mod4v3crifp := *;
+  // template AI3 tspt_array_i3_mod4v3pifp := *;
+  template AI3 tspt_array_i3_mod4field1ifp := { (0, 1), 1, (1 .. 3) } ifpresent;
+}
+
+//=========================================================================
+// Templates
+//=========================================================================
+//array
+template AI3 t_array_i3_a := *
+template AI3 t_array_i3_q := ?
+template AI3 t_array_i3_v0 := {-,-,-} //error
+template AI3 t_array_i3_v1:= {1,-,-} //error
+template AI3 t_array_i3_v2:= {1,2,-} //error
+template AI3 t_array_i3_v3v := {0, 1, 2}
+//template AI3 t_array_i3_v4 := {0, 1, 2, 3}
+template AI3 t_array_i3_v3a := {0, *, 2}
+template AI3 t_array_i3_v3q := {?, 1, 2}
+//template AI3 t_array_i3_v3o := {omit, 1, 2} //error
+template AI3 t_array_i3_v3vl := {0, 1, (1,2)} //value list
+template AI3 t_array_i3_vl := ( {0,1,2},{0,1,3})
+template AI3 t_array_i3_v3r := {0, 1, (1..3)} //range
+template AI3 t_array_i3_v3mix := {(0,1), 1, (1..3)}
+template AI3 t_array_i3_v3c := {(0,1), 1, complement(2,3)}
+template AI3 t_array_i3_v3cr := {(0..1), 1, complement(2,4)}
+template AI3 t_array_i3_v3p := { permutation(1,2,3) } //TR: HS10539, fixed
+template AI3 t_array_i3_v3pa := { permutation(1,2,*) }
+
+template AI3 tt := { 1,2,* };
+template AI3 tt1x3 := { 1,*,3 };
+template AI3 ttx45 := { *,4,5 };
+
+
+template REC_BAI3 t_array_bai3( template boolean t_b, template AI3 t_ai3) := {
+  b:= t_b,
+  ai3:=t_ai3
+}
+
+type component MyComp_CT {
+  var template integer v_AI3literal[3] := { permutation(1,*,3) };
+  var template integer v_AI3allfrom[3] := { permutation(all from tt) };
+}
+
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+//template string -> template conversion
+//expected result: success
+function f_string2ttcn_REC_BAI3_t(in charstring pl_cs, in template REC_BAI3 pl_expected_result) {
+  var template REC_BAI3 vl_result;
+  @try {
+    string2ttcn(pl_cs, vl_result);
+    setverdict(pass);
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> template conversion
+//expected result: success, expected result struct in charstring
+function f_string2ttcn_REC_BAI3_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template REC_BAI3 vl_result;
+  @try {
+    string2ttcn(pl_cs, vl_result);
+    setverdict(pass);
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_REC_BAI3_v(in charstring pl_cs, in template REC_BAI3 pl_expected_result, in boolean pl_ok_expected) {
+  var REC_BAI3 vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_REC_BAI3_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var REC_BAI3 vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail, match(pl_expected_result, log2str(vl_result))) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+
+
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_array_i_NoModulePar() runs on MC {
+  
+  if( log2str(t_array_i3_a) != "*" ) {setverdict(fail) } else { setverdict(pass) };
+  if( log2str(t_array_i3_q) != "?" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3v);
+  if( log2str(t_array_i3_v3v) != "{ 0, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3a);
+  if( log2str(t_array_i3_v3a) != "{ 0, *, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3q);
+  if( log2str(t_array_i3_v3q) != "{ ?, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3vl);
+  if( log2str(t_array_i3_v3vl) != "{ 0, 1, (1, 2) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_vl);
+  if( log2str(t_array_i3_vl) != "({ 0, 1, 2 }, { 0, 1, 3 })" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3r);
+  if( log2str(t_array_i3_v3r) != "{ 0, 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3mix);
+  if( log2str(t_array_i3_v3mix) != "{ (0, 1), 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3c);
+  if( log2str(t_array_i3_v3c) != "{ (0, 1), 1, complement(2, 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3p);
+  if( log2str(t_array_i3_v3p) != "{ permutation(1, 2, 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+}
+
+testcase tc_array_i_ModulePar() runs on MC {
+
+  if( log2str(tspt_array_i3_a) != "*" ) {setverdict(fail) } else { setverdict(pass) };
+  if( log2str(tspt_array_i3_q) != "?" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3v);
+  if( log2str(tspt_array_i3_v3v) != "{ 0, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3a);
+  if( log2str(tspt_array_i3_v3a) != "{ 0, *, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3q);
+  if( log2str(tspt_array_i3_v3q) != "{ ?, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3vl);
+  if( log2str(tspt_array_i3_v3vl) != "{ 0, 1, (1, 2) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_vl);
+  if( log2str(tspt_array_i3_vl) != "({ 0, 1, 2 }, { 9, 10, 11 })" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3r);
+  if( log2str(tspt_array_i3_v3r) != "{ 0, 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3mix);
+  if( log2str(tspt_array_i3_v3mix) != "{ (0, 1), 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3c);
+  if( log2str(tspt_array_i3_v3c) != "{ (0, 1), 1, complement(2, 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3p);
+  if( log2str(tspt_array_i3_v3p) != "{ permutation(1, 2, 3) }" ) {setverdict(fail) } else { setverdict(pass) }; //TR: HS10539, fixed
+  log(tspt_array_i3_v3pa);
+  if( log2str(tspt_array_i3_v3pa) != "{ permutation(1, 2, *) }" ) {setverdict(fail) } else { setverdict(pass) }; //TR: HS10539, fixed
+}
+
+testcase tc_array_i_v3p() runs on MC {
+  var RoAI3 vl_good_values := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1} }
+  var RoAI3 vl_wrong_values := { {1,2,4}, {1,5,6},{20,10,30} }
+  f_checkMatchingValues_ai3(tspt_array_i3_v3p,vl_good_values,vl_wrong_values);
+  f_checkMatchingValues_ai3(t_array_i3_v3p,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3pa() runs on MC {
+  var RoAI3 vl_good_values := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}, {1,2,4}, {5,2,1}}
+  var RoAI3 vl_wrong_values := { {1,5,6},{20,10,30} }
+  f_checkMatchingValues_ai3(tspt_array_i3_v3pa,vl_good_values,vl_wrong_values);
+  f_checkMatchingValues_ai3(t_array_i3_v3pa,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_a() runs on MC {
+  log(tspt_array_i3_a);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_q() runs on MC {
+  log(tspt_array_i3_q);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_q,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3v() runs on MC {
+  log(tspt_array_i3_v3v);
+  var RoAI3 vl_good_values := { {0,1,2} };
+  var RoAI3 vl_wrong_values := {{0,1,3},{0,2,2},{0,3,2},{0,-1,2},{0,-,2},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3v,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3a() runs on MC {
+  log(tspt_array_i3_v3a);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3q() runs on MC {
+  log(tspt_array_i3_v3q);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3}, {0,4,9}, {1,9999,2} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3vl() runs on MC {
+  log(tspt_array_i3_v3vl);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_vl() runs on MC {
+  log(tspt_array_i3_vl);
+  var RoAI3 vl_good_values := { {0,1,2},{9,10,11}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,2}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3r() runs on MC {
+  log(tspt_array_i3_v3r);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3r,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3mix() runs on MC {
+  log(tspt_array_i3_v3mix);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3},{1,1,1},{1,1,2},{1,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2},{1,1,4},{1,1,4},{1,1,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3mix,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3c() runs on MC {
+  log(tspt_array_i3_v3c);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,4},{0,1,5},{1,1,1},{1,1,4},{1,1,5}, {1,1,-1} , {1,1,-100}};
+  var RoAI3 vl_wrong_values := {{0,1,2},{0,1,3}, {1,1,2},{1,1,3},{1,2,4},{1,2,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3c,vl_good_values,vl_wrong_values);
+}
+//
+testcase tc_array_i_mod4a() runs on MC {
+  log(tspt_array_i3_mod4a);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4q() runs on MC {
+  log(tspt_array_i3_mod4q);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4q,vl_good_values,vl_wrong_values);
+}
+
+
+testcase tc_array_i_mod4v0() runs on MC {
+  log(tspt_array_i3_mod4v0);
+  var RoAI3 vl_good_values := {{1,2,3} };  
+  var RoAI3 vl_wrong_values := { {0,1,2} } // compilation error for {1},{1,2} TODO: put into negative test
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v0,vl_good_values,vl_wrong_values,true);
+}
+
+testcase tc_array_i_mod4v1() runs on MC {
+  log(tspt_array_i3_mod4v1);
+  var RoAI3 vl_good_values := {{1,2,3}};//TODO: put {{1}} into the negative test
+  var RoAI3 vl_wrong_values := { {0,1,2} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v1,vl_good_values,vl_wrong_values,true);
+}
+
+testcase tc_array_i_mod4v2() runs on MC {
+  log(tspt_array_i3_mod4v2);
+  var RoAI3 vl_good_values := {{1,2,3}};//TODO: put {{1,2}} into the negative test
+  var RoAI3 vl_wrong_values := { {0,1,2} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v2,vl_good_values,vl_wrong_values,true);
+}
+
+
+testcase tc_array_i_mod4v3v() runs on MC {
+  log(tspt_array_i3_mod4v3v);
+  var RoAI3 vl_good_values := { {0,1,2} };
+  var RoAI3 vl_wrong_values := {{0,1,3},{0,2,2},{0,3,2},{0,-1,2},{0,-,2},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3v,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3a() runs on MC {
+  log(tspt_array_i3_mod4v3a);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3q() runs on MC {
+  log(tspt_array_i3_mod4v3q);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3}, {0,4,9}, {1,9999,2} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3vl() runs on MC {
+  log(tspt_array_i3_mod4v3vl);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4vl() runs on MC {
+  log(tspt_array_i3_mod4vl);
+  var RoAI3 vl_good_values := { {0,1,2},{9,10,11}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,2}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3r() runs on MC {
+  log(tspt_array_i3_mod4v3r);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3r,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3mix() runs on MC {
+  log(tspt_array_i3_mod4v3mix);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3},{1,1,1},{1,1,2},{1,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2},{1,1,4},{1,1,4},{1,1,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3mix,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3c() runs on MC {
+  log(tspt_array_i3_mod4v3c);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,4},{0,1,5},{1,1,1},{1,1,4},{1,1,5}, {1,1,-1} , {1,1,-100}};
+  var RoAI3 vl_wrong_values := {{0,1,2},{0,1,3}, {1,1,2},{1,1,3},{1,2,4},{1,2,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3c,vl_good_values,vl_wrong_values);
+}
+
+//{ (0, 1), 1, (1 .. 3) } -{0, -, -}--> { 1, 1, (1 .. 3) }
+testcase tc_array_i_mod4field1() runs on MC {
+  log(tspt_array_i3_mod4field1);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3}};
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,5}, {1,1,1},{1,1,2},{1,1,3},{1,1,4}, {9,10,12} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4field1,vl_good_values,vl_wrong_values);
+}
+//====
+
+testcase tc_array_i_mod4aifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4aifp));
+  var RoRAI3 vl_good_values := { {omit},{{1,1,3}}, {{1,2,3}}, {{1,3,3}}, {{1,4,3}}, {{1,9999,3}} };
+  var RoRAI3 vl_wrong_values := {{}};
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4aifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4qifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4qifp));
+  var RoRAI3 vl_good_values := { {omit},{{1,1,3}}, {{1,2,3}}, {{1,3,3}}, {{1,4,3}}, {{1,9999,3}} };
+  var RoRAI3 vl_wrong_values := {{} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4qifp),vl_good_values,vl_wrong_values);
+}
+testcase tc_array_i_mod4v0ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v0ifp));
+  var RoRAI3 vl_good_values := {{omit},{}}; //TODO: put {{}} into the negative test
+  var RoRAI3 vl_wrong_values := { {{0,1,2}} } // compilation error for {1},{1,2} TODO: put into negative test
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v0ifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v1ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v1ifp));
+  var RoRAI3 vl_good_values := {{omit},{}};//TODO: put {{1}} into the negative test
+  var RoRAI3 vl_wrong_values := { {{0,1,2}} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v1ifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v2ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v2ifp));
+  var RoRAI3 vl_good_values := {{omit},{}};//TODO: put {{1,2}} into the negative test
+  var RoRAI3 vl_wrong_values := { {{0,1,2}} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v2ifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3vifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3vifp));
+  var RoRAI3 vl_good_values := {{omit}, {{0,1,2}} };
+  var RoRAI3 vl_wrong_values := { {{0,1,3}},{{0,2,2}},{{0,3,2}},{{0,-1,2}},{{0,-,2}},{{1,1,3}},{{1,2,3}},{{1,3,3}},{{1,4,3}},{{1,9999,3}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3vifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3aifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3aifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,2}},{{0,2,2}},{{0,3,2}},{{0,-1,2}},{{0,-,2}}};
+  var RoRAI3 vl_wrong_values := { {{0,1,3}},{{1,1,3}},{{1,2,3}}, {{1,3,3}},{{1,4,3}},{{1,9999,3}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3aifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3qifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3qifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,2}},{{0,2,2}},{{0,3,2}},{{0,-1,2}},{{0,-,2}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,3}},{{1,1,3}},{{0,2,3}},{{1,3,3}},{{0,4,9}},{{1,9999,2}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3aifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3vlifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3vlifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}},{{0,1,2}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,3}},{{1,1,3}},{{0,2,3}},{{1,3,3}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3vlifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4vlifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4vlifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,2}}, {{9,10,11}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,3}}, {{1,1,2}}, {{0,2,2}}, {{9,10,12}}, {{9,11,11}}, {{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4vlifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3rifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3rifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}}, {{0,1,2}}, {{0,1,3}} };
+  var RoRAI3 vl_wrong_values := { {{0,1,4}}, {{0,1,0}}, {{0,2,2}}, {{9,10,12}}, {{9,11,11}}, {{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3rifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3mixifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3mixifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}},{{0,1,2}},{{0,1,3}},{{1,1,1}},{{1,1,2}},{{1,1,3}} } ;
+  var RoRAI3 vl_wrong_values :={ {{0,1,4}}, {{0,1,0}}, {{0,2,2}}, {{1,1,4}}, {{1,1,4}}, {{1,1,0}}, {{9,10,12}}, {{9,11,11}}, {{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3mixifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3cifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3cifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}},{{0,1,4}},{{0,1,5}},{{1,1,1}},{{1,1,4}},{{1,1,5}},{{1,1,-1}},{{1,1,-100}} };
+  var RoRAI3 vl_wrong_values := { {{0,1,2}},{{0,1,3}},{{1,1,2}},{{1,1,3}},{{1,2,4}},{{1,2,0}},{{9,10,12}},{{9,11,11}},{{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3cifp),vl_good_values,vl_wrong_values);
+}
+
+//{ (0, 1), 1, (1 .. 3) } -{0, -, -}--> { 1, 1, (1 .. 3) }
+testcase tc_array_i_mod4field1ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4field1ifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}}, {{0,1,2}}, {{0,1,3}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,4}}, {{0,1,5}}, {{1,1,1}}, {{1,1,2}}, {{1,1,3}}, {{1,1,4}}, {{9,10,12}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4field1ifp),vl_good_values,vl_wrong_values);
+}
+
+//=====
+testcase tc_array_i_emb() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_a)) != "{ b := true, ai3 := * }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_q)) != "{ b := true, ai3 := ? }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3v));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3v)) != "{ b := true, ai3 := { 0, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3a)) != "{ b := true, ai3 := { 0, *, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3q)) != "{ b := true, ai3 := { ?, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3vl)) != "{ b := true, ai3 := { 0, 1, (1, 2) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_vl)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3r));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3r)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3mix));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3mix)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3c));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3c)) != "{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }") {setverdict(fail)} else {setverdict(pass)}
+}
+
+//array embedded in record, modified from cfg file
+testcase tc_array_i_ModulePar_emb() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4a)) != "{ b := true, ai3 := * }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4q)) != "{ b := true, ai3 := ? }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4o));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4o)) != "{ b := true, ai3 := omit }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v0));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v0)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v1)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v2)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3v));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3v)) != "{ b := true, ai3 := { 0, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3a)) != "{ b := true, ai3 := { 0, *, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3q)) != "{ b := true, ai3 := { ?, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3vl)) != "{ b := true, ai3 := { 0, 1, (1, 2) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4vl)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3r));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3r)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mix));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3mix)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3c));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3c)) != "{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4field1ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4field1ifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)} 
+}  
+
+testcase tc_array_iifp_ModulePar_emb() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4aifp)) != "{ b := true, ai3 := * ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4qifp)) != "{ b := true, ai3 := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v0ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v0ifp)) != "{ b := true, ai3 := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v1ifp)) != "{ b := true, ai3 := { 1 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v2ifp)) != "{ b := true, ai3 := { 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3aifp)) != "{ b := true, ai3 := { 0, *, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3qifp)) != "{ b := true, ai3 := { ?, 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3vlifp)) != "{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4vlifp)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3rifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3rifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mixifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3mixifp)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true, tspt_array_i3_mod4field1ifp));
+  if( log2str(t_array_bai3(true, tspt_array_i3_mod4field1ifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+}
+
+//=========================
+// ttcn2string testcases: 
+//=========================
+testcase tc_array_i_ModulePar_emb_ttcn2string() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4a));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4a)) != "{ b := true, ai3 := * }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4q));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4q)) != "{ b := true, ai3 := ? }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4o));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4o)) != "{ b := true, ai3 := omit }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v1)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v2)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3v));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3v)) != "{ b := true, ai3 := { 0, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3a));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3a)) != "{ b := true, ai3 := { 0, *, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3q));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3q)) != "{ b := true, ai3 := { ?, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vl));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3vl)) != "{ b := true, ai3 := { 0, 1, (1, 2) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vl));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4vl)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3r));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3r)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mix));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3mix)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3c));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3c)) != "{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4field1));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4field1)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)} 
+}
+
+testcase tc_array_iifp_ModulePar_emb_ttcn2string() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4aifp)) != "{ b := true, ai3 := * ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4qifp)) != "{ b := true, ai3 := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v0ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v0ifp)) != "{ b := true, ai3 := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v1ifp)) != "{ b := true, ai3 := { 1 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v2ifp)) != "{ b := true, ai3 := { 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3aifp)) != "{ b := true, ai3 := { 0, *, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3qifp)) != "{ b := true, ai3 := { ?, 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3vlifp)) != "{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4vlifp)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3rifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3rifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mixifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3mixifp)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true, tspt_array_i3_mod4field1ifp));
+  if( log2str(t_array_bai3(true, tspt_array_i3_mod4field1ifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+}
+
+
+
+
+//=========================
+// string2ttcn testcases: 
+//=========================
+
+//expected result: DTE
+testcase tc_array_string2ttcn_DTE_test() runs on MC {
+	var REC_BAI3 vl_result;
+	@try {
+		string2ttcn("{ b := true, ai3 := * }", vl_result);
+		setverdict(fail)
+	} @catch(e) {
+		setverdict(pass, "Expected D T E")
+	}
+}
+
+//template string-> template, template string-> value
+testcase tc_array_string2ttcn_i3_mod4a() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := * }", t_array_bai3(true,tspt_array_i3_mod4a))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := * }", t_array_bai3(true,tspt_array_i3_mod4a),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4q() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ? }", t_array_bai3(true,tspt_array_i3_mod4q))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ? }", t_array_bai3(true,tspt_array_i3_mod4q),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v0() runs on MC {
+  template REC_BAI3 tl_rec := { b:= true, ai3:= {-,-,-} };
+  var REC_BAI3 vl_rec := { b:= true, ai3:= {-,-,-} };
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { -, -, - } }", "{ b := true, ai3 := { <uninitialized template>, <uninitialized template>, <uninitialized template> } }" )
+  //f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { -, -, - } }", "{ b := true, ai3 := { <unbound>, <unbound>, <unbound> } }" , true)
+  // partial array values are currently deleted if the array is an optional field or a union alternative (see artf708493)
+  f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { -, -, - } }", "{ b := true, ai3 := <unbound> }" , true);
+  //TODO: Check if It is ok or not: log2str(tl_rec) gives back: "{ b := true, ai3 := <unbound> }"
+  log(tl_rec);
+  log(vl_rec);
+}
+
+testcase tc_array_string2ttcn_i3_mod4v1() runs on MC {
+  template REC_BAI3 tl_rec := { b:= true, ai3:= {1,-,-} };
+  var REC_BAI3 vl_rec := { b:= true, ai3:= {1,-,-} };
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { 1, -, - } }", "{ b := true, ai3 := { 1, <uninitialized template>, <uninitialized template> } }")
+  //f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, -, - } }", log2str(vl_rec),true)
+  // partial array values are currently deleted if the array is an optional field or a union alternative (see artf708493)
+  f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, -, - } }", "{ b := true, ai3 := { 1, <unbound>, <unbound> } }" , true);
+  log(tl_rec);
+  log(vl_rec);
+}
+
+testcase tc_array_string2ttcn_i3_mod4v2() runs on MC {
+  template REC_BAI3 tl_rec := { b:= true, ai3:= {1,2,-} };
+  var REC_BAI3 vl_rec := { b:= true, ai3:= {1,2,-} };
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { 1, 2, - } }", "{ b := true, ai3 := { 1, 2, <uninitialized template> } }")
+  //f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, 2, - } }", log2str(vl_rec), true);
+  // partial array values are currently deleted if the array is an optional field or a union alternative (see artf708493)
+  f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, 2, - } }", "{ b := true, ai3 := { 1, 2, <unbound> } }" , true);
+  log(tl_rec);
+  log(vl_rec);
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3v() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3v))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3v),true)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3a() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, *, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3a))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, *, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3a),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3q() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { ?, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3q))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { ?, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3q),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3vl() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1, 2) } }", t_array_bai3(true,tspt_array_i3_mod4v3vl))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1, 2) } }", t_array_bai3(true,tspt_array_i3_mod4v3vl),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4vl() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }", t_array_bai3(true,tspt_array_i3_mod4vl))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }", t_array_bai3(true,tspt_array_i3_mod4vl),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3r() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3r))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3r),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3mix() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3mix))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3mix),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3c() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3c))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3c),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4field1() runs on MC {
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", log2str(t_array_bai3(true,tspt_array_i3_mod4field1)));
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4field1),false)
+}
+
+//=== string2ttcn testcases with ifpresent: =====
+
+//template string-> template, template string-> value
+testcase tc_array_string2ttcn_i3_mod4aifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := * ifpresent }", t_array_bai3(true,tspt_array_i3_mod4aifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := * ifpresent }", t_array_bai3(true,tspt_array_i3_mod4aifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4qifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ? ifpresent }", t_array_bai3(true,tspt_array_i3_mod4qifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ? ifpresent }", t_array_bai3(true,tspt_array_i3_mod4qifp),false)
+}
+
+// ???? is it acceptable ?????
+testcase tc_array_string2ttcn_i3_mod4v0ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := omit ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v0ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := omit ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v0ifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v1ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 1 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v1ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 1 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v1ifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v2ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v2ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v2ifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3vifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3aifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, *, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3aifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, *, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3aifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3qifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { ?, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3qifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { ?, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3qifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3vlifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vlifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vlifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4vlifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }", t_array_bai3(true,tspt_array_i3_mod4vlifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }", t_array_bai3(true,tspt_array_i3_mod4vlifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3rifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3rifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3rifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3mixifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3mixifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3mixifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3cifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3cifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3cifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4field1ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4field1ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4field1ifp),false)
+}
+
+testcase tc_array_allfrom_perm1() runs on MyComp_CT {
+  var template AI3 vl_tcAI3literal, vl_tcAI3allFrom;
+  log ("component var v_AI3literal: ", v_AI3literal);
+  log ("component var v_AI3allfrom: ", v_AI3allfrom);
+  vl_tcAI3literal := { permutation(1,*,3) };
+  log ("TC() local var vl_tcAI3literal: ", vl_tcAI3literal);
+
+  var RoAI3 vl_goodValues := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}, {1,5,3}, {5,3,1},
+    {1,5,3}, {0,1,3},{3,1,-99}}
+  var RoAI3 vl_badValues := { {1,2,4}, {1,5,6},{20,10,30},{3,5,6}, {5,3,6}}
+  f_checkMatchingValues_ai3(vl_tcAI3literal, vl_goodValues, vl_badValues);
+
+  vl_tcAI3allFrom := { permutation(all from tt) }
+  log ("TC() local var vl_tcAI3allFrom: ", vl_tcAI3allFrom);
+  vl_goodValues := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}, {1,5,2}, {5,2,1},
+    {1,5,2}, {0,1,2},{2,1,-99}}
+  vl_badValues := { {1,3,4}, {1,5,6},{20,10,30},{2,5,6}, {5,2,6}}
+  f_checkMatchingValues_ai3(vl_tcAI3allFrom,vl_goodValues, vl_badValues);
+}
+
+testcase tc_array_allfrom_perm2() runs on MyComp_CT {
+  var template AI2x3  vl_t24 := { {permutation(all from tt1x3)}, {permutation(all from ttx45) } };
+  var RoAI2x3 vl_goodValues := { { {1,2,3},{4,4,5}}, {{1,3,2},{5,4,1}}}
+  var RoAI2x3 vl_badValues := {{ {1,2,2},{4,4,5}}, {{1,3,2},{5,5,1}} }
+  f_check_AI2x3( vl_t24, vl_goodValues,vl_badValues);
+}
+testcase tc_array_perm() runs on MyComp_CT {
+  var template AI2x3  vl_t24 := { {permutation(1,*,3)}, {permutation(*,4,5) } };
+  var RoAI2x3 vl_goodValues := { { {1,2,3},{4,4,5}}, {{1,3,2},{5,4,1}}}
+  var RoAI2x3 vl_badValues := {{ {1,2,2},{4,4,5}}, {{1,3,2},{5,5,1}} }
+  f_check_AI2x3( vl_t24, vl_goodValues,vl_badValues);
+}
+
+testcase tc_array_compl() runs on MyComp_CT {
+  var RoAI3 vl_goodValues := { {0,1,1}, {0,1,3},{0,1,5}, {0,1,-500}, {1,1,1}, {1,1,3},{1,1,5}, {1,1,-500} }
+  var RoAI3 vl_badValues :=  { {2,1,1}, {0,2,3},{0,1,2}, {0,1,4}, {2,1,1}, {1,2,3},{1,1,2}, {1,1,4} }
+  f_checkMatchingValues_ai3( t_array_i3_v3cr, vl_goodValues,vl_badValues);
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  //array
+  log("***array tests *******");
+  execute(tc_array_string2ttcn_DTE_test());
+  execute(tc_array_i_NoModulePar());
+  execute(tc_array_i_ModulePar());
+  execute(tc_array_i_v3p());
+  execute(tc_array_i_v3pa());
+  execute(tc_array_i_a());
+  execute(tc_array_i_q());
+  execute(tc_array_i_v3v());
+  execute(tc_array_i_v3a());
+  execute(tc_array_i_v3q());
+  execute(tc_array_i_v3vl());
+  execute(tc_array_i_vl());
+  execute(tc_array_i_v3r());
+  execute(tc_array_i_v3mix());
+  execute(tc_array_i_v3c());
+
+  execute(tc_array_i_mod4a());
+  execute(tc_array_i_mod4q());
+  execute(tc_array_i_mod4v0());
+  execute(tc_array_i_mod4v1());
+  execute(tc_array_i_mod4v2());
+  execute(tc_array_i_mod4v3v());
+  execute(tc_array_i_mod4v3a());
+  execute(tc_array_i_mod4v3q());
+  execute(tc_array_i_mod4v3vl());   
+  execute(tc_array_i_mod4vl());
+  execute(tc_array_i_mod4v3r());
+  execute(tc_array_i_mod4v3mix());
+  execute(tc_array_i_mod4v3c());
+  execute(tc_array_i_mod4field1());
+
+  execute(tc_array_i_mod4aifp_emb());
+  execute(tc_array_i_mod4qifp_emb());
+  execute(tc_array_i_mod4v0ifp_emb());
+  execute(tc_array_i_mod4v1ifp_emb());
+  execute(tc_array_i_mod4v2ifp_emb());
+  execute(tc_array_i_mod4v3vifp_emb());
+  execute(tc_array_i_mod4v3aifp_emb());
+  execute(tc_array_i_mod4v3qifp_emb());
+  execute(tc_array_i_mod4v3vlifp_emb());   
+  execute(tc_array_i_mod4vlifp_emb());
+  execute(tc_array_i_mod4v3rifp_emb());
+  execute(tc_array_i_mod4v3mixifp_emb());
+  execute(tc_array_i_mod4v3cifp_emb());
+  execute(tc_array_i_mod4field1ifp_emb());
+
+  execute(tc_array_i_emb());
+  execute(tc_array_i_ModulePar_emb());
+  execute(tc_array_iifp_ModulePar_emb());
+  execute(tc_array_i_ModulePar_emb_ttcn2string());
+  execute(tc_array_iifp_ModulePar_emb_ttcn2string());
+
+  execute(tc_array_string2ttcn_i3_mod4a());
+  execute(tc_array_string2ttcn_i3_mod4q());
+  execute(tc_array_string2ttcn_i3_mod4v0());
+  execute(tc_array_string2ttcn_i3_mod4v1());
+  execute(tc_array_string2ttcn_i3_mod4v2());
+  execute(tc_array_string2ttcn_i3_mod4v3v());
+  execute(tc_array_string2ttcn_i3_mod4v3a());
+  execute(tc_array_string2ttcn_i3_mod4v3q());
+  execute(tc_array_string2ttcn_i3_mod4v3vl());
+  execute(tc_array_string2ttcn_i3_mod4vl());
+  execute(tc_array_string2ttcn_i3_mod4v3r());
+  execute(tc_array_string2ttcn_i3_mod4v3mix());
+  execute(tc_array_string2ttcn_i3_mod4v3c());
+  execute(tc_array_string2ttcn_i3_mod4field1());
+
+  execute(tc_array_string2ttcn_i3_mod4aifp());
+  execute(tc_array_string2ttcn_i3_mod4qifp());
+  execute(tc_array_string2ttcn_i3_mod4v0ifp());
+  execute(tc_array_string2ttcn_i3_mod4v1ifp());
+  execute(tc_array_string2ttcn_i3_mod4v2ifp());
+  execute(tc_array_string2ttcn_i3_mod4v3vifp());
+  execute(tc_array_string2ttcn_i3_mod4v3aifp());
+  execute(tc_array_string2ttcn_i3_mod4v3qifp());
+  execute(tc_array_string2ttcn_i3_mod4v3vlifp());
+  execute(tc_array_string2ttcn_i3_mod4vlifp());
+  execute(tc_array_string2ttcn_i3_mod4v3rifp());
+  execute(tc_array_string2ttcn_i3_mod4v3mixifp());
+  execute(tc_array_string2ttcn_i3_mod4v3cifp());
+  execute(tc_array_string2ttcn_i3_mod4field1ifp());
+
+  execute(tc_array_allfrom_perm1());
+  execute(tc_array_allfrom_perm2());
+  execute(tc_array_perm());
+  execute(tc_array_compl());
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/bitstring_test.ttcn b/Regression_Test_java/src/text2ttcn/bitstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..01bb53f3a4a60b85ba208ccffa630b69cb3ef6d6
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/bitstring_test.ttcn
@@ -0,0 +1,487 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module bitstring_test {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar template boolean tspt_b_t := true;
+
+modulepar {
+  //modulepar bitstrings not modified from cfg file
+  template bitstring tspt_bs_v := '01101'B;
+  template bitstring tspt_bs_o := omit;
+  template bitstring tspt_bs_a := *;
+  template bitstring tspt_bs_q := ?;
+  template bitstring tspt_bs_al1 := * length(2); //length restriction
+  template bitstring tspt_bs_al2 := * length(2..4);
+  template bitstring tspt_bs_ql1 := ? length(2);
+  template bitstring tspt_bs_ql2 := ? length(2..4);
+  template bitstring tspt_bs_vl1 := ('01101'B);
+  template bitstring tspt_bs_vl2 := ('01101'B,'1010'B);
+  template bitstring tspt_bs_vl3 := ('01101'B,'1010'B,'101'B);
+  template bitstring tspt_bs_c1 := complement('01101'B)
+  template bitstring tspt_bs_c2 := complement('01101'B,'1010'B);
+  template bitstring tspt_bs_c3 := complement('01101'B,'1010'B,'101'B);
+  //template bitstring tspt_bs_r1 := ('A'B..'B'B); //range not allowed
+  //template bitstring tspt_bs_r2 := ('a'B..'c'B);
+  template bitstring tspt_bs_pa := '000*111'B
+  template bitstring tspt_bs_pq := '000?111'B
+  
+  template bitstring tspt_bs_vifp := '01101'B ifpresent;
+  template bitstring tspt_bs_oifp := omit ifpresent;
+  template bitstring tspt_bs_aifp := * ifpresent;
+  template bitstring tspt_bs_qifp := ? ifpresent;
+  template bitstring tspt_bs_al1ifp := * length(2) ifpresent; //length restriction
+  template bitstring tspt_bs_al2ifp := * length(2..4) ifpresent;
+  template bitstring tspt_bs_ql1ifp := ? length(2) ifpresent;
+  template bitstring tspt_bs_ql2ifp := ? length(2..4) ifpresent;
+  template bitstring tspt_bs_vl1ifp := ('01101'B) ifpresent;
+  template bitstring tspt_bs_vl2ifp := ('01101'B,'1010'B) ifpresent;
+  template bitstring tspt_bs_vl3ifp := ('01101'B,'1010'B,'101'B) ifpresent;
+  template bitstring tspt_bs_c1ifp := complement('01101'B) ifpresent
+  template bitstring tspt_bs_c2ifp := complement('01101'B,'1010'B) ifpresent;
+  template bitstring tspt_bs_c3ifp := complement('01101'B,'1010'B,'101'B) ifpresent;
+  //template bitstring tspt_bs_r1ifp := ('A'B..'B'B) ifpresent; //range not allowed
+  //template bitstring tspt_bs_r2ifp := ('a'B..'c'B) ifpresent; //range not allowed
+  template bitstring tspt_bs_paifp := '000*111'B  ifpresent
+  template bitstring tspt_bs_pqifp := '000?111'B  ifpresent  
+  
+  //modulepar bitstrings modified from cfg file
+  template bitstring tspt_bs_mod4v := * //after mod:'01101';
+  template bitstring tspt_bs_mod4o := * //omit;
+  template bitstring tspt_bs_mod4a := '0'B //*;
+  template bitstring tspt_bs_mod4q := ''B //?;
+  template bitstring tspt_bs_mod4al1 := '1'B //* length(2); //length restriction
+  template bitstring tspt_bs_mod4al2 := '1010010001'B //mofified for: * length(2..4);
+  template bitstring tspt_bs_mod4ql1 := '1010010001'B //mofified for:? length(2);
+  template bitstring tspt_bs_mod4ql2 := '1010010001'B //mofified for:? length(2..4);
+  template bitstring tspt_bs_mod4vl1 := ('01101'B) //TODO: Adam //It should be mofified for: ('01101'B);
+  template bitstring tspt_bs_mod4vl2 := '1010010001'B //mofified for:('01101'B,'1010'B);
+  template bitstring tspt_bs_mod4vl3 := '1010010001'B //mofified for:('01101'B,'1010'B,'B12'B);
+  template bitstring tspt_bs_mod4c1 := '1010010001'B //mofified for:complement('01101')
+  template bitstring tspt_bs_mod4c2 := '1010010001'B //mofified for:complement('01101','1010');
+  template bitstring tspt_bs_mod4c3 := '1010010001'B //mofified for:complement('01101','1010','101');
+  template bitstring tspt_bs_mod4r1 := '1010010001'B //mofified for:('A'..'B'); //range
+  template bitstring tspt_bs_mod4r2 := '1010010001'B //mofified for:('a'..'c');
+  template bitstring tspt_bs_mod4pa := '1010010001'B //mofified for:pattern 'abc*123'
+  template bitstring tspt_bs_mod4pq := '1010010001'B //mofified for:pattern 'abc?123'
+  
+  template bitstring tspt_bs_mod4vifp := '1010010001'B //mofified for:'01101' ifpresent;
+  template bitstring tspt_bs_mod4oifp := '1010010001'B //mofified for:omit ifpresent;
+  template bitstring tspt_bs_mod4aifp := '1010010001'B //mofified for:* ifpresent;
+  template bitstring tspt_bs_mod4qifp := '1010010001'B //mofified for:? ifpresent;
+  template bitstring tspt_bs_mod4al1ifp := '1010010001'B //mofified for:* length(2) ifpresent; //length restriction
+  template bitstring tspt_bs_mod4al2ifp := '1010010001'B //mofified for:* length(2..4) ifpresent;
+  template bitstring tspt_bs_mod4ql1ifp := '1010010001'B //mofified for:? length(2) ifpresent;
+  template bitstring tspt_bs_mod4ql2ifp := '1010010001'B //mofified for:? length(2..4) ifpresent;
+  template bitstring tspt_bs_mod4vl1ifp :=  ('01101'B) ifpresent //TODO: Adam //It should be mofified for: ('01101'B);
+  template bitstring tspt_bs_mod4vl2ifp := '1010010001'B //mofified for:('01101','1010') ifpresent;
+  template bitstring tspt_bs_mod4vl3ifp := '1010010001'B //mofified for:('01101','1010','B12') ifpresent;
+  template bitstring tspt_bs_mod4c1ifp := '1010010001'B //mofified for:complement('01101') ifpresent
+  template bitstring tspt_bs_mod4c2ifp := '1010010001'B //mofified for:complement('01101','1010') ifpresent;
+  template bitstring tspt_bs_mod4c3ifp := '1010010001'B //mofified for:complement('01101','1010','101') ifpresent;
+  //template bitstring tspt_bs_mod4r1ifp := '1010010001'B //mofified for:('0'B..'1'B) ifpresent; //range
+  //template bitstring tspt_bs_mod4r2ifp := '1010010001'B //mofified for:('0'B..'1'B) ifpresent;
+  template bitstring tspt_bs_mod4paifp := '1010010001'B //mofified for:pattern 'abc*xyz'B  ifpresent
+  template bitstring tspt_bs_mod4pqifp := '1010010001'B //mofified for:pattern 'abc?xyz'B  ifpresent  
+  
+}
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+function f_string2ttcn_RBS_t(in charstring pl_rbs, in template RBS pl_expected_result) {
+	var template RBS vl_result;
+	@try {
+	 string2ttcn(pl_rbs,vl_result);
+	 setverdict(pass) 
+	}
+	@catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_RBS_t_str(in charstring pl_rec, in charstring pl_expected_result) {
+	var template RBS vl_result;
+	@try {
+	 string2ttcn(pl_rec,vl_result);
+	 setverdict(pass) 
+	}
+	@catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_RBS_v(in charstring pl_cs, in template RBS pl_expected_result, in boolean pl_ok_expected) {
+  var RBS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_RBS_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RBS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+
+testcase tc_bs_1() runs on MC {
+  var template BitStrings_1_2 vlt_bs := ?;
+  log(vlt_bs);
+}
+
+testcase tc_bs_ModulePar_emb() runs on MC {
+  log(t_rbs(tspt_bs_mod4v));
+  if(log2str(t_rbs(tspt_bs_mod4v)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4o));
+  if(log2str(t_rbs(tspt_bs_mod4o)) != "{ bs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4a));
+  if(log2str(t_rbs(tspt_bs_mod4a)) != "{ bs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4q));
+  if(log2str(t_rbs(tspt_bs_mod4q)) != "{ bs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1));
+  if(log2str(t_rbs(tspt_bs_mod4al1)) != "{ bs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2));
+  if(log2str(t_rbs(tspt_bs_mod4al2)) != "{ bs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1));
+  if(log2str(t_rbs(tspt_bs_mod4ql1)) != "{ bs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2));
+  if(log2str(t_rbs(tspt_bs_mod4ql2)) != "{ bs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rbs(tspt_bs_mod4vl1),"<");
+  if(log2str(t_rbs(tspt_bs_mod4vl1)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2));
+  if(log2str(t_rbs(tspt_bs_mod4vl2)) != "{ bs := (\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  
+  log(t_rbs(tspt_bs_mod4vl3));
+  if(log2str(t_rbs(tspt_bs_mod4vl3)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1));
+  if(log2str(t_rbs(tspt_bs_mod4c1)) != "{ bs := complement(\'01101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2));
+  if(log2str(t_rbs(tspt_bs_mod4c2)) != "{ bs := complement(\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3));
+  if(log2str(t_rbs(tspt_bs_mod4c3)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pa));
+  if(log2str(t_rbs(tspt_bs_mod4pa)) != "{ bs := \'000*111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pq));
+  if(log2str(t_rbs(tspt_bs_mod4pq)) != "{ bs := \'000?111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rbs(tspt_bs_mod4vifp));
+  if(log2str(t_rbs(tspt_bs_mod4vifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4oifp));
+  if(log2str(t_rbs(tspt_bs_mod4oifp)) != "{ bs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4aifp));
+  if(log2str(t_rbs(tspt_bs_mod4aifp)) != "{ bs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4qifp));
+  if(log2str(t_rbs(tspt_bs_mod4qifp)) != "{ bs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4al1ifp)) != "{ bs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4al2ifp)) != "{ bs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4ql1ifp)) != "{ bs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4ql2ifp)) != "{ bs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4vl1ifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4vl2ifp)) != "{ bs := (\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl3ifp));
+  if(log2str(t_rbs(tspt_bs_mod4vl3ifp)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4c1ifp)) != "{ bs := complement(\'01101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4c2ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3ifp));
+  if(log2str(t_rbs(tspt_bs_mod4c3ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4paifp));
+  if(log2str(t_rbs(tspt_bs_mod4paifp)) != "{ bs := \'000*111'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pqifp));
+  if(log2str(t_rbs(tspt_bs_mod4pqifp)) != "{ bs := \'000?111\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+testcase tc_bs_ttcn2string_emb() runs on MC {
+  log(t_rbs(tspt_bs_mod4v));
+  if(ttcn2string(t_rbs(tspt_bs_mod4v)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4o));
+  if(ttcn2string(t_rbs(tspt_bs_mod4o)) != "{ bs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4a));
+  if(ttcn2string(t_rbs(tspt_bs_mod4a)) != "{ bs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4q));
+  if(ttcn2string(t_rbs(tspt_bs_mod4q)) != "{ bs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al1)) != "{ bs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al2)) != "{ bs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql1)) != "{ bs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql2)) != "{ bs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rbs(tspt_bs_mod4vl1),"<");
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl1)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl2)) != "{ bs := (\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  
+  log(t_rbs(tspt_bs_mod4vl3));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl3)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c1)) != "{ bs := complement(\'01101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c2)) != "{ bs := complement(\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c3)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pa));
+  if(ttcn2string(t_rbs(tspt_bs_mod4pa)) != "{ bs := \'000*111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pq));
+  if(ttcn2string(t_rbs(tspt_bs_mod4pq)) != "{ bs := \'000?111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rbs(tspt_bs_mod4vifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4oifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4oifp)) != "{ bs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4aifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4aifp)) != "{ bs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4qifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4qifp)) != "{ bs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al1ifp)) != "{ bs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al2ifp)) != "{ bs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql1ifp)) != "{ bs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql2ifp)) != "{ bs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl1ifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl2ifp)) != "{ bs := (\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl3ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl3ifp)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c1ifp)) != "{ bs := complement(\'01101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c2ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c3ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4paifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4paifp)) != "{ bs := \'000*111'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pqifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4pqifp)) != "{ bs := \'000?111\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+//=============== string2ttcn ==============================
+
+testcase tc_bs_string2ttcn_mod4v() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4v)),t_rbs(tspt_bs_mod4v))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4v)),t_rbs(tspt_bs_mod4v),true)  
+}
+
+testcase tc_bs_string2ttcn_mod4o() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4o)),t_rbs(tspt_bs_mod4o))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4o)),t_rbs(tspt_bs_mod4o),true) 
+}
+
+testcase tc_bs_string2ttcn_mod4a() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4a)),t_rbs(tspt_bs_mod4a))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4a)),t_rbs(tspt_bs_mod4a),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4q() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4q)),t_rbs(tspt_bs_mod4q))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4q)),t_rbs(tspt_bs_mod4q),false) 
+}
+
+testcase tc_bs_string2ttcn_mod4al1() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al1)),t_rbs(tspt_bs_mod4al1))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al1)),t_rbs(tspt_bs_mod4al1),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4al2() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al2)),t_rbs(tspt_bs_mod4al2))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al2)),t_rbs(tspt_bs_mod4al2),false)  
+}
+
+
+testcase tc_bs_string2ttcn_mod4ql1() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql1)),t_rbs(tspt_bs_mod4ql1))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql1)),t_rbs(tspt_bs_mod4ql1),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4ql2() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql2)),t_rbs(tspt_bs_mod4ql2))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql2)),t_rbs(tspt_bs_mod4ql2),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl1() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl1)),t_rbs(tspt_bs_mod4vl1))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl1)),t_rbs(tspt_bs_mod4vl1),true)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl2() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl2)),t_rbs(tspt_bs_mod4vl2))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl2)),t_rbs(tspt_bs_mod4vl2),false)  
+}
+
+
+testcase tc_bs_string2ttcn_mod4vifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vifp)),t_rbs(tspt_bs_mod4vifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vifp)),t_rbs(tspt_bs_mod4vifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4oifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4oifp)),t_rbs(tspt_bs_mod4oifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4oifp)),t_rbs(tspt_bs_mod4oifp),false) 
+}
+
+testcase tc_bs_string2ttcn_mod4aifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4aifp)),t_rbs(tspt_bs_mod4aifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4aifp)),t_rbs(tspt_bs_mod4aifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4qifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4qifp)),t_rbs(tspt_bs_mod4qifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4qifp)),t_rbs(tspt_bs_mod4qifp),false) 
+}
+
+testcase tc_bs_string2ttcn_mod4al1ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al1ifp)),t_rbs(tspt_bs_mod4al1ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al1ifp)),t_rbs(tspt_bs_mod4al1ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4al2ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al2ifp)),t_rbs(tspt_bs_mod4al2ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al2ifp)),t_rbs(tspt_bs_mod4al2ifp),false)  
+}
+
+
+testcase tc_bs_string2ttcn_mod4ql1ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql1ifp)),t_rbs(tspt_bs_mod4ql1ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql1ifp)),t_rbs(tspt_bs_mod4ql1ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4ql2ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql2ifp)),t_rbs(tspt_bs_mod4ql2ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql2ifp)),t_rbs(tspt_bs_mod4ql2ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl1ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl1ifp)),t_rbs(tspt_bs_mod4vl1ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl1ifp)),t_rbs(tspt_bs_mod4vl1ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl2ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl2ifp)),t_rbs(tspt_bs_mod4vl2ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl2ifp)),t_rbs(tspt_bs_mod4vl2ifp),false)  
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+
+control {
+  log("***bitstring tests****");
+  execute(tc_bs_ModulePar_emb());
+  execute(tc_bs_ttcn2string_emb());
+  execute(tc_bs_string2ttcn_mod4v());
+  execute(tc_bs_string2ttcn_mod4o());
+  execute(tc_bs_string2ttcn_mod4a());
+  execute(tc_bs_string2ttcn_mod4q());
+  execute(tc_bs_string2ttcn_mod4al1());
+  execute(tc_bs_string2ttcn_mod4al2());
+  execute(tc_bs_string2ttcn_mod4ql1());
+  execute(tc_bs_string2ttcn_mod4ql2());
+  execute(tc_bs_string2ttcn_mod4vl1());
+  execute(tc_bs_string2ttcn_mod4vl2());
+  //execute(tc_bs_string2ttcn_mod4vl3());  
+  
+  execute(tc_bs_string2ttcn_mod4vifp());
+  execute(tc_bs_string2ttcn_mod4oifp());
+  execute(tc_bs_string2ttcn_mod4aifp());
+  execute(tc_bs_string2ttcn_mod4qifp());
+  execute(tc_bs_string2ttcn_mod4al1ifp());
+  execute(tc_bs_string2ttcn_mod4al2ifp());
+  execute(tc_bs_string2ttcn_mod4ql1ifp());
+  execute(tc_bs_string2ttcn_mod4ql2ifp());
+  execute(tc_bs_string2ttcn_mod4vl1ifp());
+  execute(tc_bs_string2ttcn_mod4vl2ifp());
+}
+
+}
+
diff --git a/Regression_Test_java/src/text2ttcn/boolean_test.ttcn b/Regression_Test_java/src/text2ttcn/boolean_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..eb9087e2d3e7916c80d8d0de9fd7feaa01658be4
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/boolean_test.ttcn
@@ -0,0 +1,371 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module boolean_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  template boolean tspt_b_t := true;
+  template boolean tspt_b_f := false;
+  template boolean tspt_b_o := omit;
+  template boolean tspt_b_a := *;
+  template boolean tspt_b_q := ? ;
+  template boolean tspt_b_tifp := true ifpresent;
+  template boolean tspt_b_fifp := false ifpresent;
+  template boolean tspt_b_oifp := omit ifpresent;  // omit ifpresent is meaningless!!!! => Should be comp error!!! TODO: put into neg test!!!
+  template boolean tspt_b_aifp := * ifpresent;  // ?????? only "? ispresent" acceptable 
+  template boolean tspt_b_qifp := ? ifpresent;
+  template boolean tspt_b_c := complement(true); //complemented list
+  template boolean tspt_b_tl :=  (true,false); //template list
+  //template boolean tspt_b_n := not(true);
+ 
+  //boolean template modification tests:
+  template boolean tspt_b_a1 := *; //modified for true
+  template boolean tspt_b_a2 := *; //modified for false
+  template boolean tspt_b_a3 := *; //modified for omit
+  template boolean tspt_b_a4 := *; //modified for *
+  template boolean tspt_b_a5 := ?; //modified for ?
+  template boolean tspt_b_a6 := ?; //modified for true ifpresent
+  template boolean tspt_b_a7 := true; //modified for false ifpresent
+  template boolean tspt_b_a8 := false; //modified for * ifpresent
+  template boolean tspt_b_a9 := false; //modified for * ifpresent
+  template boolean tspt_b_a10:= false; //modified for * ifpresent
+  template boolean tspt_b_a11:= false; //modified for complement(true)
+  template boolean tspt_b_err:= *; //wrong mod in cfg file  
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+  template boolean t_b_t := true;
+  template boolean t_b_f := false;
+  template boolean t_b_o := omit;
+  template boolean t_b_a := *;
+  template boolean t_b_q := ? ;
+  template boolean t_b_tifp := true ifpresent;
+  template boolean t_b_fifp := false ifpresent;
+  template boolean t_b_oifp := omit ifpresent;  // omit ifpresent is meaningless!!!! => Should be comp error!!! TODO: put into neg test!!!
+  template boolean t_b_aifp := * ifpresent;  // ?????? only "? ispresent" acceptable 
+  template boolean t_b_qifp := ? ifpresent;
+  template boolean t_b_c := complement(true);
+
+  template REC_BOH t_rec_b(template boolean pl_b) := {
+    b:= pl_b,
+    o:= omit,
+    h:= omit
+  }
+  
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  //not modulepar template - template string check
+  testcase tc_boolean_NoModulePar() runs on MC {
+    log( t_rec_b(t_b_t) );
+    if( log2str( t_rec_b(t_b_t) )  != "{ b := true, o := omit, h := omit }" ) { setverdict(fail) } else {setverdict(pass) }
+    if( log2str( t_rec_b(t_b_f) )  != "{ b := false, o := omit, h := omit }") { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_o) )  != "{ b := omit, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_a) )  != "{ b := *, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_q) )  != "{ b := ?, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_tifp) )  != "{ b := true ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_fifp) )  != "{ b := false ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_oifp) )  != "{ b := omit ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_aifp) )  != "{ b := * ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_qifp) )  != "{ b := ? ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    //log(t_rec_b(t_b_c));
+    if( log2str( t_rec_b(t_b_c) )  != "{ b := complement(true), o := omit, h := omit }" ) { setverdict(fail) };
+  }
+
+  //modulepar template - template string check
+  testcase tc_boolean_Embedded() runs on MC {
+    log(tspt_b_t);
+    //embedded in record:
+    log( "template value:", t_rec_b(tspt_b_t) );
+    if( log2str( t_rec_b(tspt_b_t) ) != "{ b := true, o := omit, h := omit }" ) { setverdict(fail) } else {setverdict(pass) }    
+    log( "template value:", t_rec_b(tspt_b_f) );
+    if( log2str( t_rec_b(tspt_b_f) )  != "{ b := false, o := omit, h := omit }") { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_o) );
+    if( log2str( t_rec_b(tspt_b_o) )  != "{ b := omit, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_a) );
+    if( log2str( t_rec_b(tspt_b_a) )  != "{ b := *, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_q) );
+    if( log2str( t_rec_b(tspt_b_q) )  != "{ b := ?, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_tifp) );
+    if( log2str( t_rec_b(tspt_b_tifp) )  != "{ b := true ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_fifp) );
+    if( log2str( t_rec_b(tspt_b_fifp) )  != "{ b := false ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_aifp) );
+    if( log2str( t_rec_b(tspt_b_aifp) )  != "{ b := * ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_qifp) );
+    if( log2str( t_rec_b(tspt_b_qifp) )  != "{ b := ? ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_c) );
+    if( log2str( t_rec_b(tspt_b_c) )  != "{ b := complement(true), o := omit, h := omit }" ) { setverdict(fail) };
+  }
+
+  //true
+  testcase tc_boolean_t() runs on MC {
+    log(tspt_b_t);
+    if( log2str( tspt_b_t)  != "true" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true}
+    var RoB vl_wrong_values := {false}
+    f_checkMatchingValues_bool(tspt_b_t,vl_good_values,vl_wrong_values);
+  }
+
+  //false
+  testcase tc_boolean_f() runs on MC {
+    log(tspt_b_f);
+    if( log2str( tspt_b_f)  != "false" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_f,vl_good_values,vl_wrong_values);    
+    }
+
+  //omit
+  testcase tc_boolean_o() runs on MC {
+    log(tspt_b_o);
+    if( log2str( tspt_b_o)  != "omit" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {};
+    var RoB vl_wrong_values := {true,false};
+    f_checkMatchingValues_bool(tspt_b_o,vl_good_values,vl_wrong_values);
+  }
+
+  //asterix
+  testcase tc_boolean_a() runs on MC {
+    log(tspt_b_a);
+    if( log2str( tspt_b_a)  != "*" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a,vl_good_values,vl_wrong_values);
+  }
+
+  //question mark
+  testcase tc_boolean_q() runs on MC {
+    log(tspt_b_q);
+    if( log2str( tspt_b_q)  != "?" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};//omit cannot be checked here
+    f_checkMatchingValues_bool(tspt_b_q,vl_good_values,vl_wrong_values);
+  }
+
+  //true ifpresent
+  testcase tc_boolean_tifp() runs on MC {
+    log(tspt_b_tifp);
+    if( log2str( tspt_b_tifp)  != "true ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true}
+    var RoB vl_wrong_values := {false}; //omit cannot be checked here
+    f_checkMatchingValues_bool(tspt_b_tifp,vl_good_values,vl_wrong_values);
+  }
+
+  //false ifpresent
+  testcase tc_boolean_fifp() runs on MC {
+    log(tspt_b_fifp);
+    if( log2str( tspt_b_fifp)  != "false ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_fifp,vl_good_values,vl_wrong_values);
+  }
+  //* ifpresent
+  testcase tc_boolean_aifp() runs on MC {
+    log(tspt_b_aifp);
+    if( log2str( tspt_b_aifp)  != "* ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false}
+    var RoB vl_wrong_values := {}; //omit cannot be checked here
+    f_checkMatchingValues_bool(tspt_b_aifp,vl_good_values,vl_wrong_values);
+  }
+
+  //? ifpresent
+  testcase tc_boolean_qifp() runs on MC {
+    log(tspt_b_qifp);
+    if( log2str( tspt_b_qifp)  != "? ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_qifp,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_c() runs on MC {
+    log(tspt_b_c);
+    if( log2str( tspt_b_c)  != "complement(true)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_c,vl_good_values,vl_wrong_values);
+  } 
+
+  testcase tc_boolean_tl() runs on MC {
+    log(tspt_b_tl);
+    if( log2str( tspt_b_tl)  != "(true, false)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_tl,vl_good_values,vl_wrong_values);
+  } 
+
+  //modulepar modified in cfg file
+  testcase tc_boolean_modified4t() runs on MC {
+    log(tspt_b_a1);
+    if( log2str( tspt_b_a1)  != "true" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true}
+    var RoB vl_wrong_values := {false}
+    f_checkMatchingValues_bool(tspt_b_a1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4f() runs on MC {
+    log(tspt_b_a2);
+    if( log2str( tspt_b_a2)  != "false" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_a2,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_boolean_modified4o() runs on MC {
+    log(tspt_b_a3);
+    if( log2str( tspt_b_a3)  != "omit" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {};
+    var RoB vl_wrong_values := {true,false};
+    f_checkMatchingValues_bool(tspt_b_a3,vl_good_values, vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4a() runs on MC {
+    log(tspt_b_a4);
+    if( log2str( tspt_b_a4)  != "*" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a4,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4q() runs on MC {
+    log(tspt_b_a5);
+    if( log2str( tspt_b_a5)  != "?" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a5,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4tifp() runs on MC {
+    log(tspt_b_a6);
+    if( log2str( tspt_b_a6)  != "true ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true};
+    var RoB vl_wrong_values := {false};
+    f_checkMatchingValues_bool(tspt_b_a6,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4fifp() runs on MC {
+    log(tspt_b_a7);
+    if( log2str( tspt_b_a7)  != "false ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_a7,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4aifp() runs on MC {
+    log(tspt_b_a8);
+    if( log2str( tspt_b_a8)  != "* ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a8,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4qifp() runs on MC {
+    log(tspt_b_a9);
+    if( log2str( tspt_b_a9)  != "? ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a9,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4tf() runs on MC {
+    log(tspt_b_a10);
+    if( log2str( tspt_b_a10)  != "(true, false)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a10,vl_good_values,vl_wrong_values);
+  }
+
+  //modified for complement(true)
+  testcase tc_boolean_modified4ct() runs on MC {
+    log(tspt_b_a11);
+    if( log2str( tspt_b_a11)  != "complement(true)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_a11,vl_good_values,vl_wrong_values);
+  }
+
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("****Boolean tests****")
+  execute(tc_boolean_NoModulePar());
+  execute(tc_boolean_Embedded());
+  execute(tc_boolean_t());
+  execute(tc_boolean_f());
+  execute(tc_boolean_o());
+  execute(tc_boolean_a());
+  execute(tc_boolean_tifp());
+  execute(tc_boolean_fifp());
+  execute(tc_boolean_aifp());
+  execute(tc_boolean_qifp());
+  execute(tc_boolean_c());
+  execute(tc_boolean_tl());
+  //boolean template, modified from cfg file:
+  execute(tc_boolean_modified4t());
+  execute(tc_boolean_modified4f());
+  execute(tc_boolean_modified4o());
+  execute(tc_boolean_modified4a());
+  execute(tc_boolean_modified4q());
+  execute(tc_boolean_modified4tifp());
+  execute(tc_boolean_modified4fifp());
+  execute(tc_boolean_modified4aifp());
+  execute(tc_boolean_modified4qifp());
+  execute(tc_boolean_modified4tf());
+  execute(tc_boolean_modified4ct());	  
+}
+
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/charstring_test.ttcn b/Regression_Test_java/src/text2ttcn/charstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..cd12ccd6855e14ae969739eac9de56130312bf90
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/charstring_test.ttcn
@@ -0,0 +1,1416 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module charstring_test {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //modulepar charstrings not modified from cfg file
+  template charstring tspt_cs_v := "ABBA";
+  template charstring tspt_cs_o := omit;
+  template charstring tspt_cs_a := *;
+  template charstring tspt_cs_q := ?;
+  template charstring tspt_cs_al1 := * length(2); //length restriction
+  template charstring tspt_cs_al2 := * length(2..4);
+  template charstring tspt_cs_ql1 := ? length(2);
+  template charstring tspt_cs_ql2 := ? length(2..4);
+  template charstring tspt_cs_vl1 := ("ABBA");
+  template charstring tspt_cs_vl2 := ("ABBA","baba");
+  template charstring tspt_cs_vl3 := ("ABBA","baba","Bye");
+  template charstring tspt_cs_c1 := complement("ABBA")
+  template charstring tspt_cs_c2 := complement("ABBA","baba");
+  template charstring tspt_cs_c3 := complement("ABBA","baba","Bye");
+  template charstring tspt_cs_r1 := ("A".."B"); //range
+  template charstring tspt_cs_r2 := ("a".."c");
+  template charstring tspt_cs_pa := pattern "abc*xyz"
+  template charstring tspt_cs_pq := pattern "abc?xyz"
+  
+  template charstring tspt_cs_vifp := "ABBA" ifpresent;
+  template charstring tspt_cs_oifp := omit ifpresent;
+  template charstring tspt_cs_aifp := * ifpresent;
+  template charstring tspt_cs_qifp := ? ifpresent;
+  template charstring tspt_cs_al1ifp := * length(2) ifpresent; //length restriction
+  template charstring tspt_cs_al2ifp := * length(2..4) ifpresent;
+  template charstring tspt_cs_ql1ifp := ? length(2) ifpresent;
+  template charstring tspt_cs_ql2ifp := ? length(2..4) ifpresent;
+  template charstring tspt_cs_vl1ifp := ("ABBA") ifpresent;
+  template charstring tspt_cs_vl2ifp := ("ABBA","baba") ifpresent;
+  template charstring tspt_cs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_c1ifp := complement("ABBA") ifpresent
+  template charstring tspt_cs_c2ifp := complement("ABBA","baba") ifpresent;
+  template charstring tspt_cs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_r1ifp := ("A".."B") ifpresent; //range
+  template charstring tspt_cs_r2ifp := ("a".."c") ifpresent;
+  template charstring tspt_cs_paifp := pattern "abc*xyz"  ifpresent
+  template charstring tspt_cs_pqifp := pattern "abc?xyz"  ifpresent  
+  
+  //modulepar charstrings modified from cfg file
+  template charstring tspt_cs_mod4v := * //after mod:"ABBA";
+  template charstring tspt_cs_mod4o := * //omit;
+  template charstring tspt_cs_mod4ol := * //omit;
+  template charstring tspt_cs_mod4a := "A" //*;
+  template charstring tspt_cs_mod4q := "" //?;
+  template charstring tspt_cs_mod4al1 := "A" //* length(2); //length restriction
+  template charstring tspt_cs_mod4al2 := "Original" //mofified for: * length(2..4);
+  template charstring tspt_cs_mod4ql1 := "Original" //mofified for:? length(2);
+  template charstring tspt_cs_mod4ql2 := "Original" //mofified for:? length(2..4);
+  template charstring tspt_cs_mod4vl1 := ("ABBA") //TODO: Adam //It should be mofified for: ("ABBA");
+  template charstring tspt_cs_mod4vl2 := "Original" //mofified for:("ABBA","baba");
+  template charstring tspt_cs_mod4vl3 := "Original" //mofified for:("ABBA","baba","Bye");
+  template charstring tspt_cs_mod4c1 := "Original" //mofified for:complement("ABBA")
+  template charstring tspt_cs_mod4c2 := "Original" //mofified for:complement("ABBA","baba");
+  template charstring tspt_cs_mod4c3 := "Original" //mofified for:complement("ABBA","baba","Bye");
+  template charstring tspt_cs_mod4r1 := "Original" //mofified for:("A".."B"); //range
+  template charstring tspt_cs_mod4r2 := "Original" //mofified for:("a".."c");
+  template charstring tspt_cs_mod4pa := "Original" //mofified for:pattern "abc*xyz"
+  template charstring tspt_cs_mod4pq := "Original" //mofified for:pattern "abc?xyz"
+  
+  template charstring tspt_cs_mod4vifp := "Original" //mofified for:"ABBA" ifpresent;
+  template charstring tspt_cs_mod4oifp := "Original" //mofified for:omit ifpresent;
+  template charstring tspt_cs_mod4aifp := "Original" //mofified for:* ifpresent;
+  template charstring tspt_cs_mod4qifp := "Original" //mofified for:? ifpresent;
+  template charstring tspt_cs_mod4al1ifp := "Original" //mofified for:* length(2) ifpresent; //length restriction
+  template charstring tspt_cs_mod4al2ifp := "Original" //mofified for:* length(2..4) ifpresent;
+  template charstring tspt_cs_mod4ql1ifp := "Original" //mofified for:? length(2) ifpresent;
+  template charstring tspt_cs_mod4ql2ifp := "Original" //mofified for:? length(2..4) ifpresent;
+  template charstring tspt_cs_mod4vl1ifp :=  ("ABBA") ifpresent //TODO: Adam //It should be mofified for: ("ABBA");
+  template charstring tspt_cs_mod4vl2ifp := "Original" //mofified for:("ABBA","baba") ifpresent;
+  template charstring tspt_cs_mod4vl3ifp := "Original" //mofified for:("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_mod4c1ifp := "Original" //mofified for:complement("ABBA") ifpresent
+  template charstring tspt_cs_mod4c2ifp := "Original" //mofified for:complement("ABBA","baba") ifpresent;
+  template charstring tspt_cs_mod4c3ifp := "Original" //mofified for:complement("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_mod4r1ifp := "Original" //mofified for:("A".."B") ifpresent; //range
+  template charstring tspt_cs_mod4r2ifp := "Original" //mofified for:("a".."c") ifpresent;
+  template charstring tspt_cs_mod4paifp := "Original" //mofified for:pattern "abc*xyz"  ifpresent
+  template charstring tspt_cs_mod4pqifp := "Original" //mofified for:pattern "abc?xyz"  ifpresent  
+  
+}
+
+//=========================================================================
+// Templates
+//=========================================================================
+// not modulepars
+template charstring t_cs_v := "ABBA";
+template charstring t_cs_o := omit;
+template charstring t_cs_a := *;
+template charstring t_cs_q := ?;
+template charstring t_cs_al1 := * length(2); //length restriction
+template charstring t_cs_al2 := * length(2..4);
+template charstring t_cs_ql1 := ? length(2);
+template charstring t_cs_ql2 := ? length(2..4);
+template charstring t_cs_vl1 := ("ABBA");
+template charstring t_cs_vl2 := ("ABBA","baba");
+template charstring t_cs_vl3 := ("ABBA","baba","Bye");
+template charstring t_cs_c1 := complement("ABBA")
+template charstring t_cs_c2 := complement("ABBA","baba");
+template charstring t_cs_c3 := complement("ABBA","baba","Bye");
+template charstring t_cs_r1 := ("A".."B"); //range
+template charstring t_cs_r2 := ("a".."c");
+template charstring t_cs_pa := pattern "abc*xyz"
+template charstring t_cs_pq := pattern "abc?xyz"
+
+template charstring t_cs_vifp := "ABBA" ifpresent;
+template charstring t_cs_oifp := omit ifpresent;
+template charstring t_cs_aifp := * ifpresent;
+template charstring t_cs_qifp := ? ifpresent;
+template charstring t_cs_al1ifp := * length(2) ifpresent; //length restriction
+template charstring t_cs_al2ifp := * length(2..4) ifpresent;
+template charstring t_cs_ql1ifp := ? length(2) ifpresent;
+template charstring t_cs_ql2ifp := ? length(2..4) ifpresent;
+template charstring t_cs_vl1ifp := ("ABBA") ifpresent;
+template charstring t_cs_vl2ifp := ("ABBA","baba") ifpresent;
+template charstring t_cs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+template charstring t_cs_c1ifp := complement("ABBA") ifpresent
+template charstring t_cs_c2ifp := complement("ABBA","baba") ifpresent;
+template charstring t_cs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+template charstring t_cs_r1ifp := ("A".."B") ifpresent; //range
+template charstring t_cs_r2ifp := ("a".."c") ifpresent;
+template charstring t_cs_paifp := pattern "abc*xyz"  ifpresent
+template charstring t_cs_pqifp := pattern "abc?xyz"  ifpresent
+
+//=========================================================================
+// Functions
+//=========================================================================
+function f_string2ttcn_cs_t(in charstring pl_cs, in template charstring pl_expected_result) {
+  var template charstring vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_cs_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template charstring vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_cs_v(in charstring pl_cs, in template charstring pl_expected_result, in boolean pl_ok_expected) {
+  var charstring vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_cs_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var charstring vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//rrec
+
+function f_string2ttcn_rcs_t(in charstring pl_rcs, in template RCS pl_expected_result) {
+  var template RCS vl_result;
+  @try {
+    string2ttcn(pl_rcs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_rcs_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template RCS vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_rcs_v(in charstring pl_cs, in template RCS pl_expected_result, in boolean pl_ok_expected) {
+  var RCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_rcs_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_cs_v() runs on MC {
+  var RoCS vl_good_values := {"ABBA"}
+  var RoCS vl_wrong_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  f_checkMatchingValues_cs(t_cs_v, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_o() runs on MC {
+  var RoCS vl_good_values := {}
+  var RoCS vl_wrong_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  f_checkMatchingValues_cs(t_cs_o, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_a() runs on MC {
+  var RoCS vl_good_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  var RoCS vl_wrong_values := {}
+  f_checkMatchingValues_cs(t_cs_a, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_q() runs on MC {
+  var RoCS vl_good_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  var RoCS vl_wrong_values := {}
+  f_checkMatchingValues_cs(t_cs_q, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := * length(2); //length restriction
+testcase tc_cs_al1() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  "}
+  var RoCS vl_wrong_values := {"","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_al1, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := * length(2..4); //length restriction
+testcase tc_cs_al2() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ","123", "ABC","abc","ABBA"}
+  var RoCS vl_wrong_values := {"","A", "ABBAB","anything","XXXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_al2, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := ? length(2); //length restriction
+testcase tc_cs_ql1() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  "}
+  var RoCS vl_wrong_values := {"","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_ql1, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := ? length(2..4); //length restriction
+testcase tc_cs_ql2() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ","123", "ABC","abc","ABBA"}
+  var RoCS vl_wrong_values := {"","A", "ABBAB","anything","XXXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_ql2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_vl1() runs on MC {
+  var RoCS vl_good_values := {"ABBA"}
+  var RoCS vl_wrong_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_vl1, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_vl2() runs on MC {
+  var RoCS vl_good_values := {"ABBA","baba"}
+  var RoCS vl_wrong_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_vl2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_vl3() runs on MC {
+  var RoCS vl_good_values := {"ABBA","baba","Bye"}
+  var RoCS vl_wrong_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_vl3, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_c1() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  var RoCS vl_wrong_values := {"ABBA"}
+  f_checkMatchingValues_cs(t_cs_c1, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_c2() runs on MC {
+  var RoCS vl_good_values :={"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  var RoCS vl_wrong_values :=  {"ABBA","baba"}
+  f_checkMatchingValues_cs(t_cs_c2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_c3() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  var RoCS vl_wrong_values := {"ABBA","baba","Bye"}
+  f_checkMatchingValues_cs(t_cs_c3, vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_r1() runs on MC {
+  var RoCS vl_good_values := {"A","B","ABBA","AB","AAAAAA","BBBBB","ABBABABA"}
+  var RoCS vl_wrong_values := { "ab","ba","Bye","12","A1","  ","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_r1, vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_r2() runs on MC {
+  var RoCS vl_good_values := {"","a","b","c","ab","cba","abbac","abbababa","cabacccc"}
+  var RoCS vl_wrong_values := {"A","B","ABBA","AB","AAAAAAc","BBBBB","ABBABABAc", "Bye","12","abcA1","  ","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_r2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_pa() runs on MC {
+  var RoCS vl_good_values := { "abcxyz","abcAxyz","abc45xyz" }
+  var RoCS vl_wrong_values := { "ab","ba","Bye", "abcyz"}
+  f_checkMatchingValues_cs(t_cs_pa, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_pq() runs on MC {
+  var RoCS vl_good_values := {"abcAxyz","abc4xyz" }
+  var RoCS vl_wrong_values := { "ab","ba","Bye", "abcxyz","abc45xyz"}
+  f_checkMatchingValues_cs(t_cs_pq, vl_good_values,vl_wrong_values);
+}
+
+//=== charstring embedded in record ====
+
+testcase tc_cs_v_emb() runs on MC {
+  var RoRCS vl_good_values := {{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_v), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_o_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_o), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_a_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_a), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_q_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{omit}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_q), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2); //length restriction
+testcase tc_cs_al1_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2..4); //length restriction
+testcase tc_cs_al2_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al2), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := ? length(2); //length restriction
+testcase tc_cs_ql1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := ? length(2..4); //length restriction
+testcase tc_cs_ql2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql2), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+testcase tc_cs_vl1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl1), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba")
+testcase tc_cs_vl2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl2), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_vl3_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl3), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA")
+testcase tc_cs_c1_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c1), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba");
+testcase tc_cs_c2_emb() runs on MC {
+  var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c2), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba","Bye");
+testcase tc_cs_c3_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c3), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_r1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{omit},{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r1),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_r2_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r2), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_pa_emb() runs on MC {
+  var RoRCS vl_good_values := {{ "abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_pa), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_pq_emb() runs on MC {
+  var RoRCS vl_good_values := {{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{ "ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_pq), vl_good_values,vl_wrong_values);
+}
+
+//=========== Charstring Tests without Module Params and with "ifpresent" clause
+//=== charstring embedded in record ====
+
+testcase tc_cs_vifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_oifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_oifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_aifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_aifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_qifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_qifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2); //length restriction
+testcase tc_cs_al1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2..4); //length restriction
+testcase tc_cs_al2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al2ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := ? length(2); //length restriction
+testcase tc_cs_ql1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1ifp := ? length(2..4); //length restriction
+testcase tc_cs_ql2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+testcase tc_cs_vl1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl1ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba")
+testcase tc_cs_vl2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_vl3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl3ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA")
+testcase tc_cs_c1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c1ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba");
+testcase tc_cs_c2ifp_emb() runs on MC {
+  var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c2ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba","Bye");
+testcase tc_cs_c3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c3ifp), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_r1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r1ifp),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_r2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r2ifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_paifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_paifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_pqifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_pqifp), vl_good_values,vl_wrong_values);
+}
+
+
+//=========== Charstring Tests with Module Parameters ======
+testcase tc_cs_ModulePar_emb() runs on MC {
+  log(t_rcs(tspt_cs_mod4v));
+  if(log2str(t_rcs(tspt_cs_mod4v)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4o));
+  if(log2str(t_rcs(tspt_cs_mod4o)) != "{ cs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4a));
+  if(log2str(t_rcs(tspt_cs_mod4a)) != "{ cs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4q));
+  if(log2str(t_rcs(tspt_cs_mod4q)) != "{ cs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1));
+  if(log2str(t_rcs(tspt_cs_mod4al1)) != "{ cs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2));
+  if(log2str(t_rcs(tspt_cs_mod4al2)) != "{ cs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1));
+  if(log2str(t_rcs(tspt_cs_mod4ql1)) != "{ cs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2));
+  if(log2str(t_rcs(tspt_cs_mod4ql2)) != "{ cs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rcs(tspt_cs_mod4vl1),"<");
+  if(log2str(t_rcs(tspt_cs_mod4vl1)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2));
+  if(log2str(t_rcs(tspt_cs_mod4vl2)) != "{ cs := (\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3));
+  if(log2str(t_rcs(tspt_cs_mod4vl3)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1));
+  if(log2str(t_rcs(tspt_cs_mod4c1)) != "{ cs := complement(\"ABBA\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2));
+  if(log2str(t_rcs(tspt_cs_mod4c2)) != "{ cs := complement(\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3));
+  if(log2str(t_rcs(tspt_cs_mod4c3)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1));
+  if(log2str(t_rcs(tspt_cs_mod4r1)) != "{ cs := (\"A\" .. \"B\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2));
+  if(log2str(t_rcs(tspt_cs_mod4r2)) != "{ cs := (\"a\" .. \"c\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pa));
+  if(log2str(t_rcs(tspt_cs_mod4pa)) != "{ cs := pattern \"abc*xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pq));
+  if(log2str(t_rcs(tspt_cs_mod4pq)) != "{ cs := pattern \"abc?xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rcs(tspt_cs_mod4vifp));
+  if(log2str(t_rcs(tspt_cs_mod4vifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4oifp));
+  if(log2str(t_rcs(tspt_cs_mod4oifp)) != "{ cs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4aifp));
+  if(log2str(t_rcs(tspt_cs_mod4aifp)) != "{ cs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4qifp));
+  if(log2str(t_rcs(tspt_cs_mod4qifp)) != "{ cs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4al1ifp)) != "{ cs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4al2ifp)) != "{ cs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4ql1ifp)) != "{ cs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4ql2ifp)) != "{ cs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4vl1ifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4vl2ifp)) != "{ cs := (\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3ifp));
+  if(log2str(t_rcs(tspt_cs_mod4vl3ifp)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4c1ifp)) != "{ cs := complement(\"ABBA\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4c2ifp)) != "{ cs := complement(\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3ifp));
+  if(log2str(t_rcs(tspt_cs_mod4c3ifp)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4r1ifp)) != "{ cs := (\"A\" .. \"B\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4r2ifp)) != "{ cs := (\"a\" .. \"c\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4paifp));
+  if(log2str(t_rcs(tspt_cs_mod4paifp)) != "{ cs := pattern \"abc*xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pqifp));
+  if(log2str(t_rcs(tspt_cs_mod4pqifp)) != "{ cs := pattern \"abc?xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+
+testcase tc_cs_mod4v_emb() runs on MC {
+  var RoRCS vl_good_values := {{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4v), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4o_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4o), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4a_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4a), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4q_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{omit}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4q), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := * length(2); //length restriction
+testcase tc_cs_mod4al1_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al2 := * length(2..4); //length restriction
+testcase tc_cs_mod4al2_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al2), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4ql1 := ? length(2); //length restriction
+testcase tc_cs_mod4ql1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4ql2 := ? length(2..4); //length restriction
+testcase tc_cs_mod4ql2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql2), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+/* TODO:Adam*/
+testcase tc_cs_mod4vl1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl1), vl_good_values,vl_wrong_values);
+}
+
+//("ABBA", "baba")
+testcase tc_cs_mod4vl2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl2), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_mod4vl3_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl3), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA")
+testcase tc_cs_mod4c1_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c1), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba");
+testcase tc_cs_mod4c2_emb() runs on MC {
+  var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c2), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba","Bye");
+testcase tc_cs_mod4c3_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c3), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_mod4r1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{omit},{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r1),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_mod4r2_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r2), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_mod4pa_emb() runs on MC {
+  var RoRCS vl_good_values := {{ "abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4pa), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_mod4pq_emb() runs on MC {
+  var RoRCS vl_good_values := {{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{ "ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4pq), vl_good_values,vl_wrong_values);
+}
+
+//===
+testcase tc_cs_mod4vifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4oifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4oifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4aifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4aifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4qifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4qifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := * length(2); //length restriction
+testcase tc_cs_mod4al1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := * length(2..4); //length restriction
+testcase tc_cs_mod4al2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al2ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := ? length(2); //length restriction
+testcase tc_cs_mod4ql1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1ifp := ? length(2..4); //length restriction
+testcase tc_cs_mod4ql2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+/* TODO:Adam*/
+testcase tc_cs_mod4vl1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl1ifp), vl_good_values,vl_wrong_values);
+}
+
+//("ABBA","baba") //TR: HR98602, 'Matching fault in case of template ("A","B") ifpresent'
+testcase tc_cs_mod4vl2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_mod4vl3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl3ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA")
+testcase tc_cs_mod4c1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c1ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba");
+testcase tc_cs_mod4c2ifp_emb() runs on MC {
+  var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c2ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba","Bye");
+testcase tc_cs_mod4c3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c3ifp), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_mod4r1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r1ifp),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_mod4r2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r2ifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_mod4paifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4paifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_mod4pqifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4pqifp), vl_good_values,vl_wrong_values);
+}
+
+//=
+testcase tc_cs_ttcn2string_emb() runs on MC {
+  log(t_rcs(tspt_cs_mod4v));
+  if(ttcn2string(t_rcs(tspt_cs_mod4v)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4o));
+  if(ttcn2string(t_rcs(tspt_cs_mod4o)) != "{ cs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4a));
+  if(ttcn2string(t_rcs(tspt_cs_mod4a)) != "{ cs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4q));
+  if(ttcn2string(t_rcs(tspt_cs_mod4q)) != "{ cs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al1)) != "{ cs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al2)) != "{ cs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql1)) != "{ cs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql2)) != "{ cs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rcs(tspt_cs_mod4vl1),"<");
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl1)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl2)) != "{ cs := (\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl3)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c1)) != "{ cs := complement(\"ABBA\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c2)) != "{ cs := complement(\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c3)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r1)) != "{ cs := (\"A\" .. \"B\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r2)) != "{ cs := (\"a\" .. \"c\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pa));
+  if(ttcn2string(t_rcs(tspt_cs_mod4pa)) != "{ cs := pattern \"abc*xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pq));
+  if(ttcn2string(t_rcs(tspt_cs_mod4pq)) != "{ cs := pattern \"abc?xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rcs(tspt_cs_mod4vifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4oifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4oifp)) != "{ cs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4aifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4aifp)) != "{ cs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4qifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4qifp)) != "{ cs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al1ifp)) != "{ cs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al2ifp)) != "{ cs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql1ifp)) != "{ cs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql2ifp)) != "{ cs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl1ifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl2ifp)) != "{ cs := (\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl3ifp)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c1ifp)) != "{ cs := complement(\"ABBA\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c2ifp)) != "{ cs := complement(\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c3ifp)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r1ifp)) != "{ cs := (\"A\" .. \"B\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r2ifp)) != "{ cs := (\"a\" .. \"c\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4paifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4paifp)) != "{ cs := pattern \"abc*xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pqifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4pqifp)) != "{ cs := pattern \"abc?xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+//==== string2ttcn testcases ===============================================================
+//These testcases tests if
+// 1. string2ttcn can generate the expected template
+// 2. string2ttcn can generate the expected value, if possible/required (=true the third arg)
+//===========================================================================================
+testcase tc_cs_string2ttcn_mod4v() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4v)),t_rcs(tspt_cs_mod4v));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4v)),t_rcs(tspt_cs_mod4v),true);
+}
+
+testcase tc_cs_string2ttcn_mod4o() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4o)),t_rcs(tspt_cs_mod4o));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4o)),t_rcs(tspt_cs_mod4o),true);
+}
+
+//omit length
+testcase tc_cs_string2ttcn_mod4ol() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ol)),t_rcs(tspt_cs_mod4ol));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ol)),t_rcs(tspt_cs_mod4ol),false);
+}
+
+testcase tc_cs_string2ttcn_mod4a() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4a)),t_rcs(tspt_cs_mod4a));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4a)),t_rcs(tspt_cs_mod4a),false);
+}
+
+testcase tc_cs_string2ttcn_mod4q() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4q)),t_rcs(tspt_cs_mod4q));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4q)),t_rcs(tspt_cs_mod4q),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al1)),t_rcs(tspt_cs_mod4al1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al1)),t_rcs(tspt_cs_mod4al1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al2)),t_rcs(tspt_cs_mod4al2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al2)),t_rcs(tspt_cs_mod4al2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql1)),t_rcs(tspt_cs_mod4ql1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql1)),t_rcs(tspt_cs_mod4ql1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql2)),t_rcs(tspt_cs_mod4ql2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql2)),t_rcs(tspt_cs_mod4ql2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl1)),t_rcs(tspt_cs_mod4vl1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl1)),t_rcs(tspt_cs_mod4vl1),true);
+}
+
+testcase tc_cs_string2ttcn_mod4vl2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl2)),t_rcs(tspt_cs_mod4vl2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl2)),t_rcs(tspt_cs_mod4vl2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl3() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl3)),t_rcs(tspt_cs_mod4vl3));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl3)),t_rcs(tspt_cs_mod4vl3),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c1)),t_rcs(tspt_cs_mod4c1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c1)),t_rcs(tspt_cs_mod4c1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c2)),t_rcs(tspt_cs_mod4c2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c2)),t_rcs(tspt_cs_mod4c2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c3() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c3)),t_rcs(tspt_cs_mod4c3));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c3)),t_rcs(tspt_cs_mod4c3),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r1)),t_rcs(tspt_cs_mod4r1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r1)),t_rcs(tspt_cs_mod4r1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r2)),t_rcs(tspt_cs_mod4r2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r2)),t_rcs(tspt_cs_mod4r2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4pa() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4pa)),t_rcs(tspt_cs_mod4pa));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4pa)),t_rcs(tspt_cs_mod4pa),false);
+}
+
+testcase tc_cs_string2ttcn_mod4pq() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4pq)),t_rcs(tspt_cs_mod4pq));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4pq)),t_rcs(tspt_cs_mod4pq),false);
+}
+
+// ifp
+
+testcase tc_cs_string2ttcn_mod4vifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vifp)),t_rcs(tspt_cs_mod4vifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vifp)),t_rcs(tspt_cs_mod4vifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4oifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4oifp)),t_rcs(tspt_cs_mod4oifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4oifp)),t_rcs(tspt_cs_mod4oifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4aifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4aifp)),t_rcs(tspt_cs_mod4aifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4aifp)),t_rcs(tspt_cs_mod4aifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4qifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4qifp)),t_rcs(tspt_cs_mod4qifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4qifp)),t_rcs(tspt_cs_mod4qifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al1ifp)),t_rcs(tspt_cs_mod4al1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al1ifp)),t_rcs(tspt_cs_mod4al1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al2ifp)),t_rcs(tspt_cs_mod4al2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al2ifp)),t_rcs(tspt_cs_mod4al2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql1ifp)),t_rcs(tspt_cs_mod4ql1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql1ifp)),t_rcs(tspt_cs_mod4ql1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql2ifp)),t_rcs(tspt_cs_mod4ql2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql2ifp)),t_rcs(tspt_cs_mod4ql2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl1ifp)),t_rcs(tspt_cs_mod4vl1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl1ifp)),t_rcs(tspt_cs_mod4vl1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl2ifp)),t_rcs(tspt_cs_mod4vl2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl2ifp)),t_rcs(tspt_cs_mod4vl2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl3ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl3ifp)),t_rcs(tspt_cs_mod4vl3ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl3ifp)),t_rcs(tspt_cs_mod4vl3ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c1ifp)),t_rcs(tspt_cs_mod4c1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c1ifp)),t_rcs(tspt_cs_mod4c1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c2ifp)),t_rcs(tspt_cs_mod4c2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c2ifp)),t_rcs(tspt_cs_mod4c2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c3ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c3ifp)),t_rcs(tspt_cs_mod4c3ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c3ifp)),t_rcs(tspt_cs_mod4c3ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r1ifp)),t_rcs(tspt_cs_mod4r1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r1ifp)),t_rcs(tspt_cs_mod4r1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r2ifp)),t_rcs(tspt_cs_mod4r2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r2ifp)),t_rcs(tspt_cs_mod4r2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4paifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4paifp)),t_rcs(tspt_cs_mod4paifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4paifp)),t_rcs(tspt_cs_mod4paifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4pqifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4pqifp)),t_rcs(tspt_cs_mod4pqifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4pqifp)),t_rcs(tspt_cs_mod4pqifp),false);
+}
+
+control { 
+  
+  log("***charstring tests****");
+  execute(tc_cs_v());
+  execute(tc_cs_o());
+  execute(tc_cs_a());
+  execute(tc_cs_q());
+  execute(tc_cs_al1());
+  execute(tc_cs_al2());  
+  execute(tc_cs_ql1());
+  execute(tc_cs_ql2());
+  //execute(tc_cs_c());
+  execute(tc_cs_vl1());
+  execute(tc_cs_vl2());
+  execute(tc_cs_vl3());
+  execute(tc_cs_c1());
+  execute(tc_cs_c2());
+  execute(tc_cs_c3());
+  execute(tc_cs_r1());
+  execute(tc_cs_r2());
+  execute(tc_cs_pa());
+  execute(tc_cs_pq());
+  //=== charstring embedded in record ====
+  execute(tc_cs_v_emb());
+  execute(tc_cs_o_emb());
+  execute(tc_cs_a_emb());
+  execute(tc_cs_q_emb());
+  execute(tc_cs_al1_emb());
+  execute(tc_cs_al2_emb());  
+  execute(tc_cs_ql1_emb());
+  execute(tc_cs_ql2_emb());
+  //execute(tc_cs_c_emb());
+  execute(tc_cs_vl1_emb());
+  execute(tc_cs_vl2_emb());
+  execute(tc_cs_vl3_emb());
+  execute(tc_cs_c1_emb());
+  execute(tc_cs_c2_emb());
+  execute(tc_cs_c3_emb());
+  execute(tc_cs_r1_emb());
+  execute(tc_cs_r2_emb());
+  execute(tc_cs_pa_emb());
+  execute(tc_cs_pq_emb());
+  //embedded + ifpresent
+  execute(tc_cs_vifp_emb());
+  execute(tc_cs_oifp_emb());
+  execute(tc_cs_aifp_emb());
+  execute(tc_cs_qifp_emb());
+  execute(tc_cs_al1ifp_emb());
+  execute(tc_cs_al2ifp_emb());  
+  execute(tc_cs_ql1ifp_emb());
+  execute(tc_cs_ql2ifp_emb());
+  execute(tc_cs_vl1ifp_emb());
+  //execute(tc_cs_vl2ifp_emb());
+  execute(tc_cs_vl3ifp_emb());
+  execute(tc_cs_c1ifp_emb());
+  execute(tc_cs_c2ifp_emb());
+  execute(tc_cs_c3ifp_emb());
+  execute(tc_cs_r1ifp_emb());
+  execute(tc_cs_r2ifp_emb());
+  execute(tc_cs_paifp_emb());
+  execute(tc_cs_pqifp_emb());
+  
+  //======modified modulepar template wth type of charstring====
+  execute(tc_cs_ModulePar_emb());
+  execute(tc_cs_mod4v_emb());
+  execute(tc_cs_mod4o_emb());
+  execute(tc_cs_mod4a_emb());
+  execute(tc_cs_mod4q_emb());
+  execute(tc_cs_mod4al1_emb());
+  execute(tc_cs_mod4al2_emb());  
+  execute(tc_cs_mod4ql1_emb());
+  execute(tc_cs_mod4ql2_emb());
+  execute(tc_cs_mod4vl1_emb());
+  execute(tc_cs_mod4vl2_emb());
+  execute(tc_cs_mod4vl3_emb());
+  execute(tc_cs_mod4c1_emb());
+  execute(tc_cs_mod4c2_emb());
+  execute(tc_cs_mod4c3_emb());
+  execute(tc_cs_mod4r1_emb());
+  execute(tc_cs_mod4r2_emb());
+  execute(tc_cs_mod4pa_emb());
+  execute(tc_cs_mod4pq_emb());
+  //embedded + ifpresent
+  execute(tc_cs_mod4vifp_emb());
+  execute(tc_cs_mod4oifp_emb());
+  execute(tc_cs_mod4aifp_emb());
+  execute(tc_cs_mod4qifp_emb());
+  execute(tc_cs_mod4al1ifp_emb());
+  execute(tc_cs_mod4al2ifp_emb());  
+  execute(tc_cs_mod4ql1ifp_emb());
+  execute(tc_cs_mod4ql2ifp_emb());
+  execute(tc_cs_mod4vl1ifp_emb()); //Adam solved
+  execute(tc_cs_mod4vl2ifp_emb()); //Fixed: TR: HR98602, 'Matching fault in case of template ("A","B") ifpresent'
+  execute(tc_cs_mod4vl3ifp_emb());
+  execute(tc_cs_mod4c1ifp_emb());
+  execute(tc_cs_mod4c2ifp_emb());
+  execute(tc_cs_mod4c3ifp_emb());
+  execute(tc_cs_mod4r1ifp_emb());
+  execute(tc_cs_mod4r2ifp_emb());
+  execute(tc_cs_mod4paifp_emb());
+  execute(tc_cs_mod4pqifp_emb());
+  
+  //ttcn2string:
+  execute(tc_cs_ttcn2string_emb());
+  execute(tc_cs_string2ttcn_mod4v());
+  execute(tc_cs_string2ttcn_mod4o());
+  execute(tc_cs_string2ttcn_mod4ol());
+  execute(tc_cs_string2ttcn_mod4a());
+  execute(tc_cs_string2ttcn_mod4q());
+  execute(tc_cs_string2ttcn_mod4al1());
+  execute(tc_cs_string2ttcn_mod4al2());
+  execute(tc_cs_string2ttcn_mod4ql1());
+  execute(tc_cs_string2ttcn_mod4ql2());
+  execute(tc_cs_string2ttcn_mod4vl1());
+  execute(tc_cs_string2ttcn_mod4vl2());
+  execute(tc_cs_string2ttcn_mod4vl3());
+  execute(tc_cs_string2ttcn_mod4c1());
+  execute(tc_cs_string2ttcn_mod4c2());
+  execute(tc_cs_string2ttcn_mod4c3());
+  execute(tc_cs_string2ttcn_mod4r1());
+  execute(tc_cs_string2ttcn_mod4r2());
+  execute(tc_cs_string2ttcn_mod4pa());
+  execute(tc_cs_string2ttcn_mod4pq());
+  //ttcn2string with ifpresent
+  execute(tc_cs_string2ttcn_mod4vifp());
+  execute(tc_cs_string2ttcn_mod4oifp());
+  execute(tc_cs_string2ttcn_mod4aifp());
+  execute(tc_cs_string2ttcn_mod4qifp());
+  execute(tc_cs_string2ttcn_mod4al1ifp());
+  execute(tc_cs_string2ttcn_mod4al2ifp());
+  execute(tc_cs_string2ttcn_mod4ql1ifp());
+  execute(tc_cs_string2ttcn_mod4ql2ifp());
+  execute(tc_cs_string2ttcn_mod4vl1ifp());
+  execute(tc_cs_string2ttcn_mod4vl2ifp());
+  execute(tc_cs_string2ttcn_mod4vl3ifp());
+  execute(tc_cs_string2ttcn_mod4c1ifp());
+  execute(tc_cs_string2ttcn_mod4c2ifp());
+  execute(tc_cs_string2ttcn_mod4c3ifp());
+  execute(tc_cs_string2ttcn_mod4r1ifp());
+  execute(tc_cs_string2ttcn_mod4r2ifp());
+  execute(tc_cs_string2ttcn_mod4paifp());
+  execute(tc_cs_string2ttcn_mod4pqifp()); 
+  
+}
+
+}
diff --git a/Regression_Test_java/src/text2ttcn/component_test.ttcn b/Regression_Test_java/src/text2ttcn/component_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..3c6b1a5d02025478cee9555e932af4f7efbbd3d7
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/component_test.ttcn
@@ -0,0 +1,46 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module component_test 
+{
+
+type component CT {}
+
+function f_test() runs on CT {
+  timer tt1:=2.0
+  tt1.start
+  tt1.timeout
+}
+
+testcase tc_component() runs on CT {
+  var CT a := CT.create("a b.c\t!@#$%^&*(1)[]{};'""\\/,|`~");
+  var CT b;
+  @try {
+    string2ttcn(ttcn2string(a), b);
+    if (a != b) {
+      setverdict(fail, "string2ttcn() result: ", b, ", expected: ", a);
+    }
+    b.start(f_test());
+    b.done;
+    setverdict(pass);
+  }
+  @catch (err_msg) {
+    setverdict(fail, "string2ttcn() failed: ", err_msg);
+  }
+}
+
+control {
+  log("*** component tests ***");
+  execute(tc_component())
+}
+
+}
diff --git a/Regression_Test_java/src/text2ttcn/enum_test.ttcn b/Regression_Test_java/src/text2ttcn/enum_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..b8de1c2135b1e566e0c276f49709d68ff6f4a927
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/enum_test.ttcn
@@ -0,0 +1,238 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module enum_test
+// [.objid{ itu_t(0) identified_organization(4) etsi(0)
+// identified_organization(127) ericsson(5) testing(0)
+// <put further nodes here if needed>}]
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  template MyEnum tspt_enum_mod4v := omit
+  template MyEnum tspt_enum_mod4a := first
+  template MyEnum tspt_enum_mod4q := first
+  template MyEnum tspt_enum_mod4o := first
+  template MyEnum tspt_enum_mod4c0 := first
+  template MyEnum tspt_enum_mod4c1 := first
+  template MyEnum tspt_enum_mod4c2 := first
+  template MyEnum tspt_enum_mod4vl1 := omit
+  template MyEnum tspt_enum_mod4vl2 := omit  
+  //ifpresent version ( in cfg file):
+  template MyEnum tspt_enum_mod4vifp := omit
+  template MyEnum tspt_enum_mod4aifp := first
+  template MyEnum tspt_enum_mod4qifp := first
+  template MyEnum tspt_enum_mod4oifp := first
+  template MyEnum tspt_enum_mod4c0ifp := first
+  template MyEnum tspt_enum_mod4c1ifp := first
+  template MyEnum tspt_enum_mod4c2ifp := first
+  template MyEnum tspt_enum_mod4vl1ifp := omit
+  template MyEnum tspt_enum_mod4vl2ifp := omit   
+}
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+testcase tc_enum_ModulePar() runs on MC {
+   log(log2str(tspt_enum_mod4v));
+   if(log2str(tspt_enum_mod4v) == "first (0)" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4a));
+   if(log2str(tspt_enum_mod4a) == "*" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4q));
+   if(log2str(tspt_enum_mod4q) == "?" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4o));
+   if(log2str(tspt_enum_mod4o) == "omit" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c0));
+   if(log2str(tspt_enum_mod4c0) == "complement(omit)" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c1));
+   if(log2str(tspt_enum_mod4c1) == "complement(first (0))" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c2));
+   if(log2str(tspt_enum_mod4c2) == "complement(first (0), second (1))" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl1));
+   if(log2str(tspt_enum_mod4vl1) == "first (0)" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl2));
+   if(log2str(tspt_enum_mod4vl2) == "(first (0), second (1))" ) {setverdict(pass)} else {setverdict(fail)}
+   
+   log(log2str(tspt_enum_mod4vifp));
+   if(log2str(tspt_enum_mod4vifp) == "first (0) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4aifp));
+   if(log2str(tspt_enum_mod4aifp) == "* ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4qifp));
+   if(log2str(tspt_enum_mod4qifp) == "? ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4oifp));
+   if(log2str(tspt_enum_mod4oifp) == "omit ifpresent") {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c0ifp));
+   if(log2str(tspt_enum_mod4c0ifp) == "complement(omit) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c1ifp));
+   if(log2str(tspt_enum_mod4c1ifp) == "complement(first (0)) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c2ifp));
+   if(log2str(tspt_enum_mod4c2ifp) == "complement(first (0), second (1)) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl1ifp));
+   if(log2str(tspt_enum_mod4vl1ifp) == "first (0) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl2ifp));
+   if(log2str(tspt_enum_mod4vl2ifp) == "(first (0), second (1)) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+}
+
+testcase tc_enum_ModulePar_emb() runs on MC {
+   log(log2str(t_renum(tspt_enum_mod4v)));
+   if(log2str(t_renum(tspt_enum_mod4v)) == "{ e := first (0) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4a)));
+   if(log2str(t_renum(tspt_enum_mod4a)) == "{ e := * }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4q)));
+   if(log2str(t_renum(tspt_enum_mod4q)) == "{ e := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4o)));
+   if(log2str(t_renum(tspt_enum_mod4o)) == "{ e := omit }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c0)));
+   if(log2str(t_renum(tspt_enum_mod4c0)) == "{ e := complement(omit) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c1)));
+   if(log2str(t_renum(tspt_enum_mod4c1)) == "{ e := complement(first (0)) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c2)));
+   if(log2str(t_renum(tspt_enum_mod4c2)) == "{ e := complement(first (0), second (1)) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl1)));
+   if(log2str(t_renum(tspt_enum_mod4vl1)) == "{ e := first (0) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl2)));
+   if(log2str(t_renum(tspt_enum_mod4vl2)) == "{ e := (first (0), second (1)) }" ) {setverdict(pass)} else {setverdict(fail)}
+   
+   log(log2str(t_renum(tspt_enum_mod4vifp)));
+   if(log2str(t_renum(tspt_enum_mod4vifp)) == "{ e := first (0) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)} //see in EnumModuleParBug.ttcn/cfg
+   log(log2str(t_renum(tspt_enum_mod4aifp)));
+   if(log2str(t_renum(tspt_enum_mod4aifp)) == "{ e := * ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4qifp)));
+   if(log2str(t_renum(tspt_enum_mod4qifp)) == "{ e := ? ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4oifp)));
+   if(log2str(t_renum(tspt_enum_mod4oifp)) == "{ e := omit ifpresent }") {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c0ifp)));
+   if(log2str(t_renum(tspt_enum_mod4c0ifp)) == "{ e := complement(omit) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c1ifp)));
+   if(log2str(t_renum(tspt_enum_mod4c1ifp)) == "{ e := complement(first (0)) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c2ifp)));
+   if(log2str(t_renum(tspt_enum_mod4c2ifp)) == "{ e := complement(first (0), second (1)) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl1ifp)));
+   if(log2str(t_renum(tspt_enum_mod4vl1ifp)) == "{ e := first (0) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl2ifp)));
+   if(log2str(t_renum(tspt_enum_mod4vl2ifp)) == "{ e := (first (0), second (1)) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+}
+
+
+testcase tc_enum_ttcn2str_emb() runs on MC {
+   log(ttcn2string(t_renum(tspt_enum_mod4v)));
+   if(ttcn2string(t_renum(tspt_enum_mod4v)) == "{ e := first }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4a)));
+   if(ttcn2string(t_renum(tspt_enum_mod4a)) == "{ e := * }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4q)));
+   if(ttcn2string(t_renum(tspt_enum_mod4q)) == "{ e := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4o)));
+   if(ttcn2string(t_renum(tspt_enum_mod4o)) == "{ e := omit }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c0)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c0)) == "{ e := complement(omit) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c1)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c1)) == "{ e := complement(first) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c2)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c2)) == "{ e := complement(first, second) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl1)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl1)) == "{ e := first }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl2)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl2)) == "{ e := (first, second) }" ) {setverdict(pass)} else {setverdict(fail)}
+   
+   log(ttcn2string(t_renum(tspt_enum_mod4vifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vifp)) == "{ e := first ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4aifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4aifp)) == "{ e := * ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4qifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4qifp)) == "{ e := ? ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4oifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4oifp)) == "{ e := omit ifpresent }") {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c0ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c0ifp)) == "{ e := complement(omit) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c1ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c1ifp)) == "{ e := complement(first) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c2ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c2ifp)) == "{ e := complement(first, second) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl1ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl1ifp)) == "{ e := first ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl2ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl2ifp)) == "{ e := (first, second) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+}
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("***enum tests ********");
+  execute(tc_enum_ModulePar());
+  execute(tc_enum_ModulePar_emb());
+  execute(tc_enum_ttcn2str_emb());
+}
+
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/float_test.ttcn b/Regression_Test_java/src/text2ttcn/float_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..eff0b4b67f690e28df24655842b7118ea7d4b6d6
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/float_test.ttcn
@@ -0,0 +1,369 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: ethbaat
+//DATE: 2013-12-11
+//VERSION: 1.0
+*/
+module float_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  template float tspt_f_v := 9.0;
+  template float tspt_f_o := omit;
+  template float tspt_f_a := *;
+  template float tspt_f_q :=  ?;
+  template float tspt_f_vl1 := (0.0)
+  template float tspt_f_vl2 := (0.0,1.2)
+  template float tspt_f_vl3 := (0.0,1.2,-1.9)
+  template float tspt_f_c1 := complement(0.0);
+  template float tspt_f_c3 := complement(0.0,1.2,-1.9);
+  template float tspt_f_r := (-1.9..3.1);
+
+  template float tspt_f1 := *; //overwritten by cfg for value 9.0
+  template float tspt_f2 := 4.0; //overwritten by cfg for omit
+  template float tspt_f3 := 5.0; //overwritten by cfg for *
+  template float tspt_f4 := *; //overwritten by cfg for ?
+  template float tspt_f_mod4vl1 := ?; //overwritten by cfg for value list (0.0)
+  template float tspt_f_mod4vl3 := ?; //overwritten by cfg for value list (0.0,1.2,-1.9)
+  template float tspt_f6 := *; //overwritten by cfg for 9.0 ifpresent
+  template float tspt_f7 := *; //overwritten by cfg for omit ifpresent
+  template float tspt_f8 := *; //overwritten by cfg for * ifpresent
+  template float tspt_f9 := 9.0; //overwritten by cfg for ? ifpresent
+  template float tspt_f10 := *; //overwritten by cfg for value list (0.0,1.2,-1.9) ifpresent
+  template float tspt_f11 := *; //overwritten by cfg for complement 
+  template float tspt_f12 := *; //overwritten by cfg for complement(9.0) ifpresent
+  template float tspt_f13 := *;
+  template float tspt_f14 := *;
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+//=========================================================================
+// Templates
+//=========================================================================
+  template float t_f_v := 9.0;
+  template float t_f_o := omit;
+  template float t_f_a := *;
+  template float t_f_q :=  ?;
+  template float t_f_vl := (0.0,1.2,-1.9)
+  template float t_f_c := complement(0.0,1.2,-1.9);
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_float_NoModulePar() runs on MC {
+    log(t_f_v);
+    if( log2str(t_f_v) != "9.000000") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(t_f_o) != "omit") { setverdict(fail)};
+    if( log2str(t_f_a) != "*") { setverdict(fail)};
+    if( log2str(t_f_q) != "?") { setverdict(fail)};
+    if( log2str(t_f_vl) != "(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+    if( log2str(t_f_c) != "complement(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+  }
+
+  testcase tc_float_ModulePar() runs on MC {
+    if( log2str(tspt_f_v) != "9.000000") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(tspt_f_o) != "omit") { setverdict(fail)};
+    if( log2str(tspt_f_a) != "*") { setverdict(fail)};
+    if( log2str(tspt_f_q) != "?") { setverdict(fail)};
+    log(tspt_f_vl3);
+    if( log2str(tspt_f_vl1) != "0.000000") { setverdict(fail) };
+    if( log2str(tspt_f_vl2) != "(0.000000, 1.200000)") { setverdict(fail) };
+    if( log2str(tspt_f_vl3) != "(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+    if( log2str(tspt_f_c1) != "complement(0.000000)") { setverdict(fail) };
+    if( log2str(tspt_f_c3) != "complement(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+    //log(tspt_f_r);
+    if( log2str(tspt_f_r) != "(-1.900000 .. 3.100000)") { setverdict(fail) };
+  }
+
+  testcase tc_float_Embedded() runs on MC {
+    log(t_rec(1,tspt_f_v,omit,omit));
+    if( log2str(t_rec(1,tspt_f_v,omit,omit)) != "{ i := 1, f := 9.000000, cs := omit, bs := omit }") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(t_rec(1,tspt_f_o,omit,omit)) != "{ i := 1, f := omit, cs := omit, bs := omit }") { setverdict(fail)};
+    if( log2str(t_rec(1,tspt_f_a,omit,omit)) != "{ i := 1, f := *, cs := omit, bs := omit }") { setverdict(fail)};
+    if( log2str(t_rec(1,tspt_f_q,omit,omit)) !=  "{ i := 1, f := ?, cs := omit, bs := omit }"){ setverdict(fail)};
+    //log(tspt_f_vl3);
+    if( log2str(t_rec(1,tspt_f_vl1,omit,omit)) != "{ i := 1, f := 0.000000, cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_vl2,omit,omit)) != "{ i := 1, f := (0.000000, 1.200000), cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_vl3,omit,omit)) != "{ i := 1, f := (0.000000, 1.200000, -1.900000), cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_c1,omit,omit)) != "{ i := 1, f := complement(0.000000), cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_c3,omit,omit)) != "{ i := 1, f := complement(0.000000, 1.200000, -1.900000), cs := omit, bs := omit }") { setverdict(fail) };
+    //log(tspt_f_r);
+    if( log2str(t_rec(1,tspt_f_r,omit,omit)) != "{ i := 1, f := (-1.900000 .. 3.100000), cs := omit, bs := omit }" ) { setverdict(fail) };
+  }
+
+  //value
+  testcase tc_float_value() runs on MC {
+    log( tspt_f_v );
+    if( log2str(tspt_f_v) != "9.000000" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoF vl_good_values := {9.0}
+    var RoF vl_wrong_values := {-1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_v, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_omit() runs on MC {
+    log( tspt_f_o );
+    if( log2str(tspt_f_o) != "omit" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {}
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_o, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_a() runs on MC {
+    log( tspt_f_a );
+    if( log2str(tspt_f_a) != "*" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f_a, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_q() runs on MC {
+    log( tspt_f_q );
+    if( log2str(tspt_f_q) != "?")  { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f_a, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_vl() runs on MC {
+    log( tspt_f_vl3 );
+    if( log2str(tspt_f_vl3) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_vl3, vl_good_values, vl_wrong_values );
+  }
+
+  //range
+  testcase tc_float_r() runs on MC {
+    log( tspt_f_r );
+    if( log2str(tspt_f_r) != "(-1.900000 .. 3.100000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { -1.900000, -1.8999999, -1.0, 0.0, 1.2, -1.9, 3.1 }
+    var RoF vl_wrong_values := {3.10001, 9.0, -1000000.0, -1.91, 8.99999, 9.0,  9.0001, -2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_r, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_right_value() runs on MC {
+    var template float vlt := tspt_f_vl3;
+    log( vlt );
+    if( log2str(vlt) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  //
+  //value
+  testcase tc_float_modified4v() runs on MC {
+    log( tspt_f1 );
+    if( log2str(tspt_f1) != "9.000000" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0}
+    var RoF vl_wrong_values := {-1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f1, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4o() runs on MC {
+    log( tspt_f2 );
+    if( log2str(tspt_f2) != "omit" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {}
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f2, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4a() runs on MC {
+    log( tspt_f3 );
+    if( log2str(tspt_f3) != "*" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f3, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4q() runs on MC {
+    log( tspt_f4 );
+    if( log2str(tspt_f4) != "?")  { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f4, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vl1() runs on MC {
+    log( tspt_f_mod4vl1 );
+    if( log2str(tspt_f_mod4vl1) != "0.000000" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0 }
+    var RoF vl_wrong_values := {1.2, -1.9, 9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_mod4vl1, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vl3() runs on MC {
+    log( tspt_f_mod4vl3 );
+    if( log2str(tspt_f_mod4vl3) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_mod4vl3, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4c() runs on MC {
+    var template float vlt := tspt_f11;
+    log( vlt );
+    if( log2str(vlt) != "complement(9.000000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values :=  { -1000000.0, 0.01, -1.91, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := { 9.0 }
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  // modified 4 range from cfg file
+  testcase tc_float_modified4r() runs on MC {
+    log( tspt_f13 );
+    if( log2str(tspt_f13) != "(-1.900000 .. 3.100000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { -1.900000, -1.8999999, -1.0, 0.0, 1.2, -1.9, 3.1 }
+    var RoF vl_wrong_values := {3.10001, 9.0, -1000000.0, -1.91, 8.99999, 9.0,  9.0001, -2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f13, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vl_right_value() runs on MC {
+    var template float vlt := tspt_f_mod4vl3;
+    log( vlt );
+    if( log2str(vlt) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }  
+
+  //value
+  testcase tc_float_modified4vifp() runs on MC {
+    log( tspt_f6 );
+    if( log2str(tspt_f6) != "9.000000 ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0}
+    var RoF vl_wrong_values := {-1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f6, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4oifp() runs on MC {
+    log( tspt_f7 );
+    if( log2str(tspt_f7) != "omit ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {}
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f7, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4aifp() runs on MC {
+    log( tspt_f8 );
+    if( log2str(tspt_f8) != "* ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f8, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4qifp() runs on MC {
+    log( tspt_f4 );
+    if( log2str(tspt_f9) != "? ifpresent")  { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f9, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vlifp() runs on MC {
+    log( tspt_f10 );
+    if( log2str(tspt_f10) != "(0.000000, 1.200000, -1.900000) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f10, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4cifp() runs on MC {
+    var template float vlt := tspt_f12;
+    log( vlt );
+    if( log2str(vlt) != "complement(9.000000) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values :=  { -1000000.0, 0.01, -1.91, 8.99999,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := { 9.0 }
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }  
+
+  // modified 4 range from cfg file
+  testcase tc_float_modified4rifp() runs on MC {
+    log( tspt_f14 );
+    if( log2str(tspt_f14) != "(-1.900000 .. 3.100000) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { -1.900000, -1.8999999, -1.0, 0.0, 1.2, -1.9, 3.1 }
+    var RoF vl_wrong_values := {3.10001, 9.0, -1000000.0, -1.91, 8.99999, 9.0,  9.0001, -2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f14, vl_good_values, vl_wrong_values );
+  }
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {  
+  log("****float tests****");
+  execute(tc_float_NoModulePar());
+  execute(tc_float_ModulePar());
+  execute(tc_float_Embedded());
+  execute(tc_float_value());
+  execute(tc_float_omit());
+  execute(tc_float_a());
+  execute(tc_float_q());
+  execute(tc_float_vl());
+  execute(tc_float_r());
+  execute(tc_float_right_value());
+  execute(tc_float_modified4v());
+  execute(tc_float_modified4o());
+  execute(tc_float_modified4a());
+  execute(tc_float_modified4q());
+  execute(tc_float_modified4vl1());
+  execute(tc_float_modified4vl3());
+  execute(tc_float_modified4c());
+  execute(tc_float_modified4r());
+  execute(tc_float_modified4vl_right_value());
+  execute(tc_float_modified4vifp());
+  execute(tc_float_modified4oifp());
+  execute(tc_float_modified4aifp());
+  execute(tc_float_modified4qifp());
+  execute(tc_float_modified4vlifp());
+  execute(tc_float_modified4cifp());
+  execute(tc_float_modified4rifp()); 
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/functions2.ttcn b/Regression_Test_java/src/text2ttcn/functions2.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..339c88adf7bb42278a1d3016bebae019f6fb533d
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/functions2.ttcn
@@ -0,0 +1,575 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module functions2 {
+
+import from types2 all;
+
+
+group g_boolean {
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_bool(template boolean pl_b, in RoB pl_rob) {
+    var integer s:=lengthof(pl_rob)
+    log("Template: ", pl_b, " values to be matched:", pl_rob)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rob[i],pl_b )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rob[i],pl_b ));
+      } else {
+        setverdict(fail, int2str(i)&". nok"); log( match(pl_rob[i],pl_b ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_bool(template boolean pl_b, in RoB pl_rob) {
+    var integer s:=lengthof(pl_rob)
+    log("Template: ", pl_b, " values not to be matched:", pl_rob)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rob[i],pl_b )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rob[i],pl_b ));
+      } else {
+        setverdict(pass, int2str(i)&". ok"); log( match(pl_rob[i],pl_b ));
+      }
+    }
+  } with { extension "transparent" }
+
+
+  function f_checkMatchingValues_bool(template boolean pl_b, in RoB pl_good_values, in RoB pl_wrong_values) {
+    f_checkMatchingGoodValues_bool(pl_b,pl_good_values);
+    f_checkMatchingWrongValues_bool(pl_b,pl_wrong_values);
+  }
+
+}
+
+group g_integer {
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_int(template integer pl_i, in RoI pl_roi) {
+    var integer s:=lengthof(pl_roi)
+    log("Template: ", pl_i, " values to be matched:", pl_roi)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roi[i],pl_i )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_roi[i],pl_i ));
+      } else {
+        setverdict(fail, int2str(i)&". nok"); log( match(pl_roi[i],pl_i ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_int(template integer pl_i, in RoI pl_roi) {
+    var integer s:=lengthof(pl_roi)
+    log("Template: ", pl_i, " values not to be matched:", pl_roi)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roi[i],pl_i )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_roi[i],pl_i ));
+      } else {
+        setverdict(pass, int2str(i)&". ok"); log( match(pl_roi[i],pl_i ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_int(template integer pl_i, in RoI pl_good_values, in RoI pl_wrong_values) {
+    f_checkMatchingGoodValues_int( pl_i, pl_good_values);
+    f_checkMatchingWrongValues_int( pl_i, pl_wrong_values);
+  }
+
+}//g_integer
+
+group g_float{
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_float(template float pl_f, in RoF pl_rof) {
+    var integer s:=lengthof(pl_rof)
+    log("Template: ", pl_f, " values to be matched:", pl_rof)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rof[i],pl_f )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rof[i],pl_f ));
+      } else {
+        setverdict(fail, int2str(i)&". nok"); log( match(pl_rof[i],pl_f ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_float(template float pl_f, in RoF pl_rof) {
+    var integer s:=lengthof(pl_rof)
+    log("Template: ", pl_f, " values not to be matched:", pl_rof)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rof[i],pl_f )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rof[i],pl_f ));
+      } else {
+        setverdict(pass, int2str(i)&". ok"); log( match(pl_rof[i],pl_f ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_float(template float pl_f, in RoF pl_good_values, in RoF pl_wrong_values) {
+    f_checkMatchingGoodValues_float( pl_f, pl_good_values);
+    f_checkMatchingWrongValues_float( pl_f, pl_wrong_values);
+  }
+} //g_float
+
+group g_bitstring {
+
+}//g_bitstring
+
+group g_octetstring {
+
+
+}//g_octetstring
+
+group g_hexstring {
+
+
+}//g_hexstring
+
+group g_charstring {
+
+  function f_checkMatchingGoodValues_cs(template charstring pl_cs,in RoCS pl_rocs) {
+    var integer s:=lengthof(pl_rocs);
+    log("Template: ", pl_cs, " values to be matched:", pl_rocs);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rocs[i],pl_cs )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rocs[i],pl_cs ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rocs[i],pl_cs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_cs(template charstring pl_cs, in RoCS pl_rocs) {
+    var integer s:=lengthof(pl_rocs)
+    log("Template: ", pl_cs, " values not to be matched:", pl_rocs)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rocs[i], pl_cs )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rocs[i],pl_cs ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rocs[i],pl_cs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_cs(template charstring pl_cs,in RoCS pl_good_values, in RoCS pl_wrong_values) {
+    f_checkMatchingGoodValues_cs( pl_cs,  pl_good_values);
+    f_checkMatchingWrongValues_cs( pl_cs, pl_wrong_values);
+  }
+
+  function f_checkMatchingGoodValues_rcs(template RCS pl_rcs,in RoRCS pl_rorcs) {
+    var integer s:=lengthof(pl_rorcs);
+    log("Template: ", pl_rcs, " values to be matched:", pl_rorcs);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorcs[i],pl_rcs )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorcs[i],pl_rcs ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorcs[i],pl_rcs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rcs(template RCS pl_rcs, in RoRCS pl_rorcs) {
+    var integer s:=lengthof(pl_rorcs)
+    log("Template: ", pl_rcs, " values not to be matched:", pl_rorcs)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorcs[i], pl_rcs )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorcs[i],pl_rcs ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorcs[i],pl_rcs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rcs(template RCS pl_rcs,in RoRCS pl_good_values, in RoRCS pl_wrong_values) {
+    f_checkMatchingGoodValues_rcs( pl_rcs,  pl_good_values);
+    f_checkMatchingWrongValues_rcs( pl_rcs, pl_wrong_values);
+  }
+}//g_charstring
+
+group g_record {
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rec(template REC pl_rec,in RoREC pl_rorec) {
+    var integer s:=lengthof(pl_rorec);
+    log("Template: ", pl_rec, " values to be matched:", pl_rorec);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i],pl_rec )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rec(template REC pl_rec, in RoREC pl_rorec) {
+    var integer s:=lengthof(pl_rorec)
+    log("Template: ", pl_rec, " values not to be matched:", pl_rorec)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i], pl_rec )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingValues_rec(template REC pl_rec,in RoREC pl_good_values, in RoREC pl_wrong_values) {
+    f_checkMatchingGoodValues_rec( pl_rec,  pl_good_values);
+    f_checkMatchingWrongValues_rec( pl_rec, pl_wrong_values);
+  }
+
+  function f_checkMatchingGoodValues_rec2(template REC2 pl_rec,in RoREC2 pl_rorec) {
+    var integer s:=lengthof(pl_rorec);
+    log("Template: ", pl_rec, " values to be matched:", pl_rorec);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i],pl_rec )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rec2(template REC2 pl_rec, in RoREC2 pl_rorec) {
+    var integer s:=lengthof(pl_rorec)
+    log("Template: ", pl_rec, " values not to be matched:", pl_rorec)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i], pl_rec )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } with { extension "transparent" }
+
+}//g_record
+
+group g_recordof {
+
+  // ====record of integer:======
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_roi(template RoI pl_roi,in RoRoI pl_roroi) {
+    var integer s:=lengthof(pl_roroi);
+    log("Template: ", pl_roi, " values to be matched:", pl_roroi);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roroi[i],pl_roi )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_roroi[i],pl_roi ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_roroi[i],pl_roi ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_roi(template RoI pl_roi, in RoRoI pl_roroi) {
+    var integer s:=lengthof(pl_roroi)
+    log("Template: ", pl_roi, " values not to be matched:", pl_roroi)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roroi[i], pl_roi )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_roroi[i],pl_roi ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_roroi[i],pl_roi ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_roi(template RoI pl_roi,in RoRoI pl_good_values, in RoRoI pl_wrong_values) {
+    f_checkMatchingGoodValues_roi( pl_roi,  pl_good_values);
+    f_checkMatchingWrongValues_roi( pl_roi, pl_wrong_values);
+  }
+
+  // ====record of float:======
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rof(template RoF pl_rof,in RoRoF pl_rorof) {
+    var integer s:=lengthof(pl_rorof);
+    log("Template: ", pl_rof, " values to be matched:", pl_rorof);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorof[i],pl_rof )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorof[i],pl_rof ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorof[i],pl_rof ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rof(template RoF pl_rof, in RoRoF pl_rorof) {
+    var integer s:=lengthof(pl_rorof)
+    log("Template: ", pl_rof, " values not to be matched:", pl_rorof)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorof[i], pl_rof )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorof[i],pl_rof ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorof[i],pl_rof ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rof(template RoF pl_rof,in RoRoF pl_good_values, in RoRoF pl_wrong_values) {
+    f_checkMatchingGoodValues_rof( pl_rof,  pl_good_values);
+    f_checkMatchingWrongValues_rof( pl_rof, pl_wrong_values);
+  }
+}//g_recordof
+
+group g_array {
+
+  //============ AI3 =============================
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_ai3(template AI3 pl_ai3,in RoAI3 pl_rofai3, in boolean pl_successExpected:=true) {
+    var integer s:=lengthof(pl_rofai3);
+    log("Template: ", pl_ai3, " values to be matched:", pl_rofai3);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if(pl_successExpected) {
+        if( match(pl_rofai3[i],pl_ai3 )) {
+          setverdict(pass); log(int2str(i)&". ok");log( match(pl_rofai3[i],pl_ai3 ));
+        } else {
+          setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rofai3[i],pl_ai3 ));
+        }
+      }else //not pl_successExpected
+      {
+        @try {
+          log(match(pl_rofai3[i], pl_ai3 ))
+          setverdict(fail);
+        }
+        @catch(err_str) {
+          log( "Expected error: ", err_str);
+          setverdict(pass) 
+        }       
+      }
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_ai3(template AI3 pl_ai3, in RoAI3 pl_rofai3, in boolean pl_successExpected:=true) {
+    var integer s:=lengthof(pl_rofai3)
+    log("Template: ", pl_ai3, " values not to be matched:", pl_rofai3)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if(pl_successExpected) {
+        if( match(pl_rofai3[i], pl_ai3 )) {
+          setverdict(fail); log(int2str(i)&". nok");log( match(pl_rofai3[i],pl_ai3 ));
+        } else {
+          setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rofai3[i],pl_ai3 ));
+        } 
+      } else //not pl_successExpected
+      {
+        @try {
+          log(match(pl_rofai3[i], pl_ai3 ));
+          setverdict(fail);
+        }
+        @catch(err_str) {
+          log( "Expected error: ", err_str);
+          setverdict(pass) 
+        }
+      } 
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingValues_ai3( template AI3 pl_ai3,in RoAI3 pl_good_values, in RoAI3 pl_wrong_values, in boolean pl_successExpected := true) {
+    f_checkMatchingGoodValues_ai3( pl_ai3,  pl_good_values, pl_successExpected);
+    f_checkMatchingWrongValues_ai3( pl_ai3, pl_wrong_values, pl_successExpected);
+  }
+
+  //=== AI2x3 ====
+
+function f_check_AI2x3( template AI2x3 pl_t, RoAI2x3 pl_goodV, RoAI2x3 pl_badV) {
+  var integer NG := lengthof(pl_goodV);
+  var integer NB := lengthof(pl_badV);
+  for(var integer i:=0;i< NG;i:=i+1) {
+    if( match(pl_goodV[i],pl_t)) { 
+      setverdict(pass) 
+    } else { 
+      setverdict(fail, pl_goodV[i], " should match with ", pl_t );
+    }
+  }
+
+  for(var integer i:=0;i< NB;i:=i+1) {
+    if( not match(pl_badV[i],pl_t)) { 
+      setverdict(pass);
+    } else { 
+      setverdict(fail, pl_badV[i], " must not match with ", pl_t );
+    }
+  }
+} with { extension "transparent" }
+
+  //======= RAI3 ========
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rai3(template RAI3 pl_rai3,in RoRAI3 pl_rorai3) {
+    var integer s:=lengthof(pl_rorai3);
+    log("Template: ", pl_rai3, " values to be matched:", pl_rorai3);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorai3[i],pl_rai3 )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorai3[i],pl_rai3 ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorai3[i],pl_rai3 ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rai3(template RAI3 pl_rai3, in RoRAI3 pl_rorai3) {
+    var integer s:=lengthof(pl_rorai3)
+    log("Template: ", pl_rai3, " values not to be matched:", pl_rorai3)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorai3[i], pl_rai3 )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorai3[i],pl_rai3 ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorai3[i],pl_rai3 ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rai3(template RAI3 pl_rai3,in RoRAI3 pl_good_values, in RoRAI3 pl_wrong_values) {
+    f_checkMatchingGoodValues_rai3( pl_rai3,  pl_good_values);
+    f_checkMatchingWrongValues_rai3( pl_rai3, pl_wrong_values);
+  }
+
+  //   //============= REC_BAI3 ====================
+  //     // setverdict is pass if every value is matching
+  //   function f_checkMatchingGoodValues_bai3(template AI3 pl_ai3,in RoAI3 pl_rofai3) {
+  //     var integer s:=lengthof(pl_rofai3);
+  //     log("Template: ", pl_ai3, " values to be matched:", pl_rofai3);
+  //     for( var integer i :=0; i<s;i:=i+1) {
+  //       if( match(pl_rofai3[i],pl_ai3 )) {
+  //         setverdict(pass); log(int2str(i)&". ok");log( match(pl_rofai3[i],pl_ai3 ));
+  //       } else {
+  //         setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rofai3[i],pl_ai3 ));
+  //       }
+  //     }
+  //   } with { extension "transparent" }
+  // 
+  //   function f_checkMatchingWrongValues_bai3(template AI3 pl_ai3, in RoAI3 pl_rofai3) {
+  //     var integer s:=lengthof(pl_rofai3)
+  //     log("Template: ", pl_ai3, " values not to be matched:", pl_rofai3)
+  //     for( var integer i :=0; i<s;i:=i+1) {
+  //       if( match(pl_rofai3[i], pl_ai3 )) {
+  //         setverdict(fail); log(int2str(i)&". nok");log( match(pl_rofai3[i],pl_ai3 ));
+  //       } else {
+  //         setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rofai3[i],pl_ai3 ));
+  //       }
+  //     }
+  //   } with { extension "transparent" }
+  // 
+  //   function f_checkMatchingValues_bai3(template AI3 pl_ai3,in RoAI3 pl_good_values, in RoAI3 pl_wrong_values) {
+  //     f_checkMatchingGoodValues_ai3( pl_ai3,  pl_good_values);
+  //     f_checkMatchingWrongValues_ai3( pl_ai3, pl_wrong_values);
+  //   }
+
+}//g_array
+
+
+group g_set {
+
+  //SET
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_set(template SET pl_set,in RoSET pl_roset) {
+    var integer s:=lengthof(pl_roset);
+    log("Template: ", pl_set, " values to be matched:", pl_roset);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roset[i],pl_set )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_roset[i],pl_set ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_roset[i],pl_set ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_set(template SET pl_set, in RoSET pl_roset) {
+    var integer s:=lengthof(pl_roset)
+    log("Template: ", pl_set, " values not to be matched:", pl_roset)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roset[i], pl_set )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_roset[i],pl_set ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_roset[i],pl_set ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_set(template SET pl_set,in RoSET pl_good_values, in RoSET pl_wrong_values) {
+    f_checkMatchingGoodValues_set( pl_set,  pl_good_values);
+    f_checkMatchingWrongValues_set( pl_set, pl_wrong_values);
+  }
+
+  //RSET
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rset(template RSET pl_rset,in RoRSET pl_rorset) {
+    var integer s:=lengthof(pl_rorset);
+    log("Template: ", pl_rset, " values to be matched:", pl_rorset);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorset[i],pl_rset )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorset[i],pl_rset ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorset[i],pl_rset ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rset(template RSET pl_rset, in RoRSET pl_rorset) {
+    var integer s:=lengthof(pl_rorset)
+    log("Template: ", pl_rset, " values not to be matched:", pl_rorset)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorset[i], pl_rset )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorset[i],pl_rset ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorset[i],pl_rset ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rset(template RSET pl_rset,in RoRSET pl_good_values, in RoRSET pl_wrong_values) {
+    f_checkMatchingGoodValues_rset( pl_rset,  pl_good_values);
+    f_checkMatchingWrongValues_rset( pl_rset, pl_wrong_values);
+  }
+
+}//g_set
+
+group g_setof {
+  //RSoCS = record of charstring
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rsocs(template RSoCS pl_rsocs,in RoRSoCS pl_rorsocs) {
+    var integer s:=lengthof(pl_rorsocs);
+    log("Template: ", pl_rsocs, " values to be matched:", pl_rorsocs);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorsocs[i],pl_rsocs )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorsocs[i],pl_rsocs ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorsocs[i],pl_rsocs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rsocs(template RSoCS pl_rsocs, in RoRSoCS pl_rorsocs) {
+    var integer s:=lengthof(pl_rorsocs)
+    log("Template: ", pl_rsocs, " values not to be matched:", pl_rorsocs)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorsocs[i], pl_rsocs )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorsocs[i],pl_rsocs ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorsocs[i],pl_rsocs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rsocs(template RSoCS pl_rsocs,in RoRSoCS pl_good_values, in RoRSoCS pl_wrong_values) {
+    f_checkMatchingGoodValues_rsocs( pl_rsocs,  pl_good_values);
+    f_checkMatchingWrongValues_rsocs( pl_rsocs, pl_wrong_values);
+  }
+
+}//g_setof
+
+group g_enumerated {
+
+}//g_enumerated
+
+group g_union {
+
+}//g_union
+
+group g_anytype {
+
+}//g_anytype
+
+}
diff --git a/Regression_Test_java/src/text2ttcn/hexstring_test.ttcn b/Regression_Test_java/src/text2ttcn/hexstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..ce8e6a7450461b0a500e52086f3099d0096d791d
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/hexstring_test.ttcn
@@ -0,0 +1,257 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module hexstring_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+	
+
+  //hexstring 
+  //============================================================
+  //================ Type: hexstring ==========================
+  //============================================================
+
+  //modulepar hexstrings not modified from cfg file
+  template hexstring tspt_hs_v := 'ABBA'H;
+  template hexstring tspt_hs_o := omit;
+  template hexstring tspt_hs_a := *;
+  template hexstring tspt_hs_q := ?;
+  template hexstring tspt_hs_al1 := * length(2); //length restriction
+  template hexstring tspt_hs_al2 := * length(2..4);
+  template hexstring tspt_hs_ql1 := ? length(2);
+  template hexstring tspt_hs_ql2 := ? length(2..4);
+  template hexstring tspt_hs_vl1 := ('ABBA'H);
+  template hexstring tspt_hs_vl2 := ('ABBA'H,'baba'H);
+  template hexstring tspt_hs_vl3 := ('ABBA'H,'baba'H,'B12'H);
+  template hexstring tspt_hs_c1 := complement('ABBA'H)
+  template hexstring tspt_hs_c2 := complement('ABBA'H,'baba'H);
+  template hexstring tspt_hs_c3 := complement('ABBA'H,'baba'H,'B12'H);
+  //template hexstring tspt_hs_r1 := ('A'H..'B'H); //range not allowed
+  //template hexstring tspt_hs_r2 := ('a'H..'c'H);
+  template hexstring tspt_hs_pa := 'abc*123'H
+  template hexstring tspt_hs_pq := 'abc?123'H
+
+  template hexstring tspt_hs_vifp := 'ABBA'H ifpresent;
+  template hexstring tspt_hs_oifp := omit ifpresent;
+  template hexstring tspt_hs_aifp := * ifpresent;
+  template hexstring tspt_hs_qifp := ? ifpresent;
+  template hexstring tspt_hs_al1ifp := * length(2) ifpresent; //length restriction
+  template hexstring tspt_hs_al2ifp := * length(2..4) ifpresent;
+  template hexstring tspt_hs_ql1ifp := ? length(2) ifpresent;
+  template hexstring tspt_hs_ql2ifp := ? length(2..4) ifpresent;
+  template hexstring tspt_hs_vl1ifp := ('ABBA'H) ifpresent;
+  template hexstring tspt_hs_vl2ifp := ('ABBA'H,'baba'H) ifpresent;
+  template hexstring tspt_hs_vl3ifp := ('ABBA'H,'baba'H,'B12'H) ifpresent;
+  template hexstring tspt_hs_c1ifp := complement('ABBA'H) ifpresent
+  template hexstring tspt_hs_c2ifp := complement('ABBA'H,'baba'H) ifpresent;
+  template hexstring tspt_hs_c3ifp := complement('ABBA'H,'baba'H,'B12'H) ifpresent;
+  //template hexstring tspt_hs_r1ifp := ('A'H..'B'H) ifpresent; //range not allowed
+  //template hexstring tspt_hs_r2ifp := ('a'H..'c'H) ifpresent; //range not allowed
+  template hexstring tspt_hs_paifp := 'abc*123'H  ifpresent
+  template hexstring tspt_hs_pqifp := 'abc?123'H  ifpresent  
+
+  //modulepar hexstrings modified from cfg file
+  template hexstring tspt_hs_mod4v := * //after mod:'ABBA';
+  template hexstring tspt_hs_mod4o := * //omit;
+  template hexstring tspt_hs_mod4a := 'A'H //*;
+  template hexstring tspt_hs_mod4q := ''H //?;
+  template hexstring tspt_hs_mod4al1 := 'A'H //* length(2); //length restriction
+  template hexstring tspt_hs_mod4al2 := '12345'H //mofified for: * length(2..4);
+  template hexstring tspt_hs_mod4ql1 := '12345'H //mofified for:? length(2);
+  template hexstring tspt_hs_mod4ql2 := '12345'H //mofified for:? length(2..4);
+  template hexstring tspt_hs_mod4vl1 := ('ABBA'H) //TODO: Adam //It should be mofified for: ('ABBA'H);
+  template hexstring tspt_hs_mod4vl2 := '12345'H //mofified for:('ABBA'H,'baba'H);
+  template hexstring tspt_hs_mod4vl3 := '12345'H //mofified for:('ABBA'H,'baba'H,'B12'H);
+  template hexstring tspt_hs_mod4c1 := '12345'H //mofified for:complement('ABBA')
+  template hexstring tspt_hs_mod4c2 := '12345'H //mofified for:complement('ABBA','baba');
+  template hexstring tspt_hs_mod4c3 := '12345'H //mofified for:complement('ABBA','baba','Bye');
+  template hexstring tspt_hs_mod4r1 := '12345'H //mofified for:('A'..'B'); //range
+  template hexstring tspt_hs_mod4r2 := '12345'H //mofified for:('a'..'c');
+  template hexstring tspt_hs_mod4pa := '12345'H //mofified for:pattern 'abc*123'
+  template hexstring tspt_hs_mod4pq := '12345'H //mofified for:pattern 'abc?123'
+
+  template hexstring tspt_hs_mod4vifp := '12345'H //mofified for:'ABBA' ifpresent;
+  template hexstring tspt_hs_mod4oifp := '12345'H //mofified for:omit ifpresent;
+  template hexstring tspt_hs_mod4aifp := '12345'H //mofified for:* ifpresent;
+  template hexstring tspt_hs_mod4qifp := '12345'H //mofified for:? ifpresent;
+  template hexstring tspt_hs_mod4al1ifp := '12345'H //mofified for:* length(2) ifpresent; //length restriction
+  template hexstring tspt_hs_mod4al2ifp := '12345'H //mofified for:* length(2..4) ifpresent;
+  template hexstring tspt_hs_mod4ql1ifp := '12345'H //mofified for:? length(2) ifpresent;
+  template hexstring tspt_hs_mod4ql2ifp := '12345'H //mofified for:? length(2..4) ifpresent;
+  template hexstring tspt_hs_mod4vl1ifp :=  ('ABBA'H) ifpresent //TODO: Adam //It should be mofified for: ('ABBA'H);
+  template hexstring tspt_hs_mod4vl2ifp := '12345'H //mofified for:('ABBA','baba') ifpresent;
+  template hexstring tspt_hs_mod4vl3ifp := '12345'H //mofified for:('ABBA','baba','B12') ifpresent;
+  template hexstring tspt_hs_mod4c1ifp := '12345'H //mofified for:complement('ABBA') ifpresent
+  template hexstring tspt_hs_mod4c2ifp := '12345'H //mofified for:complement('ABBA','baba') ifpresent;
+  template hexstring tspt_hs_mod4c3ifp := '12345'H //mofified for:complement('ABBA','baba','Bye') ifpresent;
+  //template hexstring tspt_hs_mod4r1ifp := '12345'H //mofified for:('A'H..'B'H) ifpresent; //range
+  //template hexstring tspt_hs_mod4r2ifp := '12345'H //mofified for:('a'H..'c'H) ifpresent;
+  template hexstring tspt_hs_mod4paifp := '12345'H //mofified for:pattern 'abc*xyz'H  ifpresent
+  template hexstring tspt_hs_mod4pqifp := '12345'H //mofified for:pattern 'abc?xyz'H  ifpresent  
+   
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_hs_ModulePar_emb() runs on MC {
+    log(t_rhs(tspt_hs_mod4v));
+    if(log2str(t_rhs(tspt_hs_mod4v)) != "{ hs := \'ABBA\'H }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4o));
+    if(log2str(t_rhs(tspt_hs_mod4o)) != "{ hs := omit }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4a));
+    if(log2str(t_rhs(tspt_hs_mod4a)) != "{ hs := * }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4q));
+    if(log2str(t_rhs(tspt_hs_mod4q)) != "{ hs := ? }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al1));
+    if(log2str(t_rhs(tspt_hs_mod4al1)) != "{ hs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al2));
+    if(log2str(t_rhs(tspt_hs_mod4al2)) != "{ hs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql1));
+    if(log2str(t_rhs(tspt_hs_mod4ql1)) != "{ hs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql2));
+    if(log2str(t_rhs(tspt_hs_mod4ql2)) != "{ hs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">",t_rhs(tspt_hs_mod4vl1),"<");
+    if(log2str(t_rhs(tspt_hs_mod4vl1)) != "{ hs := \'ABBA\'H }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl2));
+    if(log2str(t_rhs(tspt_hs_mod4vl2)) != "{ hs := (\'ABBA\'H, \'BABA\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">{ hs := (\'ABBA\'H, \'BABA\'H) }<");
+    log(t_rhs(tspt_hs_mod4vl3));
+    if(log2str(t_rhs(tspt_hs_mod4vl3)) != "{ hs := (\'ABBA\'H, \'BABA\'H, \'B12\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c1));
+    if(log2str(t_rhs(tspt_hs_mod4c1)) != "{ hs := complement(\'ABBA\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c2));
+    if(log2str(t_rhs(tspt_hs_mod4c2)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c3));
+    if(log2str(t_rhs(tspt_hs_mod4c3)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H, \'B12\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4pa));
+    if(log2str(t_rhs(tspt_hs_mod4pa)) != "{ hs := \'ABC*123\'H }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4pq));
+    if(log2str(t_rhs(tspt_hs_mod4pq)) != "{ hs := \'ABC?123\'H }") {setverdict(fail)} else {setverdict(pass)};
+    //==
+    log(t_rhs(tspt_hs_mod4vifp));
+    if(log2str(t_rhs(tspt_hs_mod4vifp)) != "{ hs := \'ABBA\'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4oifp));
+    if(log2str(t_rhs(tspt_hs_mod4oifp)) != "{ hs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4aifp));
+    if(log2str(t_rhs(tspt_hs_mod4aifp)) != "{ hs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4qifp));
+    if(log2str(t_rhs(tspt_hs_mod4qifp)) != "{ hs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4al1ifp)) != "{ hs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4al2ifp)) != "{ hs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4ql1ifp)) != "{ hs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4ql2ifp)) != "{ hs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4vl1ifp)) != "{ hs := \'ABBA\'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4vl2ifp)) != "{ hs := (\'ABBA\'H, \'BABA\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl3ifp));
+    if(log2str(t_rhs(tspt_hs_mod4vl3ifp)) != "{ hs := (\'ABBA\'H, \'BABA\'H, \'B12\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4c1ifp)) != "{ hs := complement(\'ABBA\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4c2ifp)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c3ifp));
+    if(log2str(t_rhs(tspt_hs_mod4c3ifp)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H, \'B12\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4paifp));
+    if(log2str(t_rhs(tspt_hs_mod4paifp)) != "{ hs := \'ABC*123'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4pqifp));
+    if(log2str(t_rhs(tspt_hs_mod4pqifp)) != "{ hs := \'ABC?123\'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  }
+
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("***hexstring tests****");
+  execute(tc_hs_ModulePar_emb());
+}
+
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/integer_test.ttcn b/Regression_Test_java/src/text2ttcn/integer_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..7f501259ec5f4f1c03fc92e63b574cadbd2eddb1
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/integer_test.ttcn
@@ -0,0 +1,371 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: ethbaat
+//DATE: 2013-12-11
+//VERSION: 1.0
+*/
+module integer_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  //integer
+  integer tsp_j := 0;
+  template integer tspt_i_v := 9;
+  template integer tspt_i_o := omit;
+  template integer tspt_i_a := *;
+  template integer tspt_i_q :=  ?;
+  template integer tspt_i_vl1 := (1);
+  template integer tspt_i_vl2 := (0,1);
+  template integer tspt_i_vl3 := (0,1,-1);
+  template integer tspt_i_c := complement(0,1,-1);
+  template integer tspt_i_r := (1..4); //range
+
+  //templates overwritten:
+  template integer tspt_i1 := *; //overwritten by cfg for value 9
+  template integer tspt_i2 := 4; //overwritten by cfg for omit
+  template integer tspt_i3 := 5; //overwritten by cfg for *
+  template integer tspt_i4 := *; //overwritten by cfg for ?
+  template integer tspt_i5 := ?; //overwritten by cfg for value list (0,1,-1)
+  template integer tspt_i6 := *; //overwritten by cfg for 9 ifpresent
+  template integer tspt_i7 := *; //overwritten by cfg for omit
+  template integer tspt_i8 := *; //overwritten by cfg for *
+  template integer tspt_i9 := *; //overwritten by cfg for ?
+  template integer tspt_i10 := *; //overwritten by cfg for value list (0,1,-1)
+  template integer tspt_i11 := *; //overwritten by cfg for complement
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+  template REC t_rec(template integer pl_i, template float pl_f, template charstring pl_cs, template bitstring pl_bs) := {
+    i:= pl_i,
+    f:= pl_f,
+    cs:=pl_cs,
+    bs:=pl_bs
+  }
+
+  template integer t_i_v := 9;
+  template integer t_i_o := omit;
+  template integer t_i_a := *;
+  template integer t_i_q :=  ?;
+  template integer t_i_vl := (0,1,-1)
+  template integer t_i_c := complement(0,1,-1);
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  //Goal: simple integer template is  accepted as modulepar and it can be used
+  testcase tc_integer_NoModulePar() runs on MC {
+    if( log2str(t_i_v) != "9") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(t_i_o) != "omit") { setverdict(fail)};
+    if( log2str(t_i_a) != "*") { setverdict(fail)};
+    if( log2str(t_i_q) != "?") { setverdict(fail)};
+    //log(t_i_vl);
+    if( log2str(t_i_vl) != "(0, 1, -1)") { setverdict(fail) };
+    if( log2str(t_i_c) != "complement(0, 1, -1)") { setverdict(fail) };
+  }
+
+  testcase tc_integer_NoModulePar_Embedded() runs on MC {
+    log(t_rec(t_i_v,omit,omit,omit));
+    if( log2str(t_rec(t_i_v,omit,omit,omit)) != "{ i := 9, f := omit, cs := omit, bs := omit }") { setverdict(fail)} else { setverdict(pass) }
+    log(t_rec(t_i_o,omit,omit,omit));
+    if( log2str(t_rec(t_i_o,omit,omit,omit)) != "{ i := omit, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(t_i_a,omit,omit,omit));
+    if( log2str(t_rec(t_i_a,omit,omit,omit)) != "{ i := *, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(t_i_q,omit,omit,omit));
+    if( log2str(t_rec(t_i_q,omit,omit,omit)) != "{ i := ?, f := omit, cs := omit, bs := omit }") { setverdict(fail)};
+    log( t_rec(t_i_vl,omit,omit,omit));
+    if( log2str(t_rec(t_i_vl,omit,omit,omit)) !=  "{ i := (0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(t_i_c,omit,omit,omit));
+    if( log2str(t_rec(t_i_c,omit,omit,omit)) != "{ i := complement(0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+  }
+
+  testcase tc_integer_Embedded() runs on MC {
+    log(t_rec(tspt_i_v,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_v,omit,omit,omit)) != "{ i := 9, f := omit, cs := omit, bs := omit }") { setverdict(fail)} else { setverdict(pass) }
+    log(t_rec(tspt_i_o,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_o,omit,omit,omit)) != "{ i := omit, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(tspt_i_a,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_a,omit,omit,omit)) != "{ i := *, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(tspt_i_q,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_q,omit,omit,omit)) != "{ i := ?, f := omit, cs := omit, bs := omit }") { setverdict(fail)};
+    log( t_rec(tspt_i_vl1,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_vl1,omit,omit,omit)) !=  "{ i := 1, f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(tspt_i_vl2,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_vl2,omit,omit,omit)) !=  "{ i := (0, 1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(tspt_i_vl3,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_vl3,omit,omit,omit)) !=  "{ i := (0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(tspt_i_c,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_c,omit,omit,omit)) != "{ i := complement(0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+  }
+
+  testcase tc_integer_Embedded_value() runs on MC {
+    template REC vlt:=t_rec(tspt_i_v,omit,omit,omit);
+    var RoREC vl_good_values :=  {{ 9,omit,omit,omit}};
+    var RoREC vl_wrong_values := { { 10,omit,omit,omit}, { 9,1.0,omit,omit},{ 9,1.0,"lambada",'01'B}, { 10000,1.0,"lambada",'01'B} };
+    f_checkMatchingValues_rec( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_integer_Embedded_complement() runs on MC {
+    template REC vlt:=t_rec(tspt_i_c,omit,omit,omit);
+    var RoREC vl_good_values :=  { {2,omit,omit,omit},{3,omit,omit,omit},{4,omit,omit,omit},{-2,omit,omit,omit}};
+    var RoREC vl_wrong_values := { {1,omit,omit,omit},{-1,omit,omit,omit},{0,omit,omit,omit},{ 9,1.0,omit,omit},{ 9,1.0,"lambada",'01'B}, { 10000,1.0,"lambada",'01'B} };
+    f_checkMatchingValues_rec( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_integer_Embedded_range() runs on MC {
+    template REC vlt:=t_rec(tspt_i_r,omit,omit,omit);
+    var RoREC vl_good_values :=  {{1,omit,omit,omit},{2,omit,omit,omit},{3,omit,omit,omit},{4,omit,omit,omit}};
+    var RoREC vl_wrong_values := { {-1,omit,omit,omit},{5,omit,omit,omit},{9,omit,omit,omit},{ 10,omit,omit,omit}, { 9,1.0,omit,omit},{ 9,1.0,"lambada",'01'B}, { 10000,1.0,"lambada",'01'B} };
+    f_checkMatchingValues_rec( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  //value
+  testcase tc_integer_value() runs on MC {
+    log( tspt_i_v );
+    if( log2str(tspt_i_v) != "9" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoI vl_good_values := {9}
+    var RoI vl_wrong_values := {-1000000, 0, -1,2,20001, 4294967296, 4294967296+1}
+    f_checkMatchingValues_int( tspt_i_v, vl_good_values, vl_wrong_values );
+  }
+
+  //omit
+  testcase tc_integer_omit() runs on MC {
+    log( tspt_i_o );
+    if( log2str(tspt_i_o) != "omit" ) { setverdict(fail) } else { setverdict(pass) }  
+    var RoI vl_good_values := {}
+    var RoI vl_wrong_values := { -100000, -1, 0,1,9, 4294967296, 4294967296+1} 
+    f_checkMatchingValues_int( tspt_i_o, vl_good_values, vl_wrong_values );
+  }
+
+  //asterix
+  testcase tc_integer_a() runs on MC {
+    log( tspt_i_a );
+    if( log2str(tspt_i_a) != "*" ) { setverdict(fail) } else { setverdict(pass) } 
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i_a, vl_good_values, vl_wrong_values );
+  }  
+
+  testcase tc_integer_q() runs on MC {
+    log( tspt_i_q );
+    if( log2str(tspt_i_q) != "?" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i_q, vl_good_values, vl_wrong_values );
+  }
+  //Goal: to test if integer template is modified from cfg file:
+  //value list
+  testcase tc_integer_vl() runs on MC {
+    log( tspt_i_vl3 );
+    if( log2str(tspt_i_vl3) != "(0, 1, -1)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,9,20001}
+    f_checkMatchingValues_int(tspt_i_vl3, vl_good_values,vl_wrong_values);
+  }
+
+  //goal: to test if template modulepar can be a right value
+  testcase tc_integer_vl_right_value() runs on MC {
+    var template integer vlt := tspt_i_vl3;
+    log( tspt_i_vl3 );    
+    if( log2str(vlt) != "(0, 1, -1)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,20001}
+    f_checkMatchingValues_int(vlt, vl_good_values,vl_wrong_values);
+  }  
+
+  //integer modulepar templates modified from cfg file:
+
+  // for value
+  testcase tc_integer_modified4v() runs on MC {
+    log( tspt_i1 );
+    if( log2str(tspt_i1) != "9" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoI vl_good_values := {9}
+    var RoI vl_wrong_values := {-1000000, 0, -1,2,20001, 4294967296, 4294967296+1}
+    f_checkMatchingValues_int( tspt_i1, vl_good_values, vl_wrong_values );
+  }
+
+  //for omit
+  testcase tc_integer_modified4o() runs on MC {
+    log( tspt_i2 );
+    if( log2str(tspt_i2) != "omit" ) { setverdict(fail) } else { setverdict(pass) }  
+    var RoI vl_good_values := {}
+    var RoI vl_wrong_values := { -100000, -1, 0,1,9, 4294967296, 4294967296+1} 
+    f_checkMatchingValues_int( tspt_i2, vl_good_values, vl_wrong_values );
+  }
+
+  //asterix
+  testcase tc_integer_modified4a() runs on MC {
+    log( tspt_i3 );
+    if( log2str(tspt_i3) != "*" ) { setverdict(fail) } else { setverdict(pass) } 
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i3, vl_good_values, vl_wrong_values );
+  }  
+
+  testcase tc_integer_modified4q() runs on MC {
+    log( tspt_i4 );
+    if( log2str(tspt_i4) != "?" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i4, vl_good_values, vl_wrong_values );
+  }
+
+  //value list
+  testcase tc_integer_modified4vl() runs on MC {
+    log( tspt_i5 );
+    if( log2str(tspt_i5) != "(0, 1, -1)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,20001}
+    f_checkMatchingValues_int(tspt_i5, vl_good_values,vl_wrong_values);
+  }
+
+  // for value
+  testcase tc_integer_modified4vifp() runs on MC {
+    log( tspt_i6 );
+    if( log2str(tspt_i6) != "9 ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoI vl_good_values := {9}
+    var RoI vl_wrong_values := {-1000000, 0, -1,2,20001, 4294967296, 4294967296+1}
+    f_checkMatchingValues_int( tspt_i6, vl_good_values, vl_wrong_values );
+  }
+  //for omit
+  testcase tc_integer_modified4oifp() runs on MC {
+    log( tspt_i7 );
+    if( log2str(tspt_i7) != "omit ifpresent" ) { setverdict(fail) } else { setverdict(pass) }  
+    var RoI vl_good_values := {}
+    var RoI vl_wrong_values := { -100000, -1, 0,1,9, 4294967296, 4294967296+1} 
+    f_checkMatchingValues_int( tspt_i7, vl_good_values, vl_wrong_values );
+  }
+
+  //asterix
+  testcase tc_integer_modified4aifp() runs on MC {
+    log( tspt_i8 );
+    if( log2str(tspt_i8) != "* ifpresent" ) { setverdict(fail) } else { setverdict(pass) } 
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i8, vl_good_values, vl_wrong_values );
+  }  
+
+  testcase tc_integer_modified4qifp() runs on MC {
+    log( tspt_i9 );
+    if( log2str(tspt_i9) != "? ifpresent" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i9, vl_good_values, vl_wrong_values );
+  }
+
+  //value list
+  testcase tc_integer_modified4vlifp() runs on MC {
+    log( tspt_i10 );
+    if( log2str(tspt_i10) != "(0, 1, -1) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,20001}
+    f_checkMatchingValues_int(tspt_i10, vl_good_values,vl_wrong_values);
+  }
+
+  //complement
+  testcase tc_integer_modified4c() runs on MC {
+    log( tspt_i11);
+    if( log2str(tspt_i11) != "complement(9)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {9} 
+    f_checkMatchingValues_int( tspt_i11, vl_good_values, vl_wrong_values );
+  }
+
+
+
+//=========================================================================
+// Control
+//=========================================================================
+control {
+   log("****Integer tests****")
+  execute(tc_integer_NoModulePar());
+  execute(tc_integer_NoModulePar_Embedded()); //with template record containing template argument
+  execute(tc_integer_Embedded());
+  execute(tc_integer_Embedded_value());
+  execute(tc_integer_Embedded_complement());
+  execute(tc_integer_Embedded_range());
+  execute(tc_integer_value());
+  execute(tc_integer_omit());
+  execute(tc_integer_a());
+  execute(tc_integer_q());
+  execute(tc_integer_vl());
+  execute(tc_integer_vl_right_value());
+  //integer templates modified from cfg file"
+  execute(tc_integer_modified4v());
+  execute(tc_integer_modified4o());
+  execute(tc_integer_modified4a());
+  execute(tc_integer_modified4q());
+  execute(tc_integer_modified4vl());
+  execute(tc_integer_modified4vifp());
+  execute(tc_integer_modified4oifp());
+  execute(tc_integer_modified4aifp());
+  execute(tc_integer_modified4qifp());
+  execute(tc_integer_modified4vlifp());
+  execute(tc_integer_modified4c()); 
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/objid_test.ttcn b/Regression_Test_java/src/text2ttcn/objid_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..39c0856e5863f20ca9cbe9b3df9770d01f1996ae
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/objid_test.ttcn
@@ -0,0 +1,38 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module objid_test 
+{
+
+type component CT {}
+
+testcase tc_objid() runs on CT {
+  const objid a := objid { itu_t(0) identified_organization(4) etsi(0) };
+  var objid b;
+  @try {
+    string2ttcn(ttcn2string(a), b);
+    if (a != b) {
+      setverdict(fail, "string2ttcn() result: ", b, ", expected: ", a);
+    }
+    setverdict(pass);
+  }
+  @catch (err_msg) {
+    setverdict(fail, "string2ttcn() failed: ", err_msg);
+  }
+}
+
+control {
+  log("*** objid tests ***");
+  execute(tc_objid())
+}
+
+}
diff --git a/Regression_Test_java/src/text2ttcn/octetstring_test.ttcn b/Regression_Test_java/src/text2ttcn/octetstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..4eb14793ccb46de4a0bdd78b9a6fc4ca07f629c0
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/octetstring_test.ttcn
@@ -0,0 +1,247 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module octetstring_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  //modulepar octetstrings not modified from cfg file
+  template octetstring tspt_os_v := 'ABBA'O;
+  template octetstring tspt_os_o := omit;
+  template octetstring tspt_os_a := *;
+  template octetstring tspt_os_q := ?;
+  template octetstring tspt_os_al1 := * length(2); //length restriction
+  template octetstring tspt_os_al2 := * length(2..4);
+  template octetstring tspt_os_ql1 := ? length(2);
+  template octetstring tspt_os_ql2 := ? length(2..4);
+  template octetstring tspt_os_vl1 := ('ABBA'O);
+  template octetstring tspt_os_vl2 := ('ABBA'O,'baba'O);
+  template octetstring tspt_os_vl3 := ('ABBA'O,'baba'O,'B120'O);
+  template octetstring tspt_os_c1 := complement('ABBA'O)
+  template octetstring tspt_os_c2 := complement('ABBA'O,'baba'O);
+  template octetstring tspt_os_c3 := complement('ABBA'O,'baba'O,'B120'O);
+  //template octetstring tspt_os_r1 := ('A'O..'B'O); //range not allowed
+  //template octetstring tspt_os_r2 := ('a'O..'c'O);
+  template octetstring tspt_os_pa := 'abcd*1234'O
+  template octetstring tspt_os_pq := 'abcd?1234'O
+  
+  template octetstring tspt_os_vifp := 'ABBA'O ifpresent;
+  template octetstring tspt_os_oifp := omit ifpresent;
+  template octetstring tspt_os_aifp := * ifpresent;
+  template octetstring tspt_os_qifp := ? ifpresent;
+  template octetstring tspt_os_al1ifp := * length(2) ifpresent; //length restriction
+  template octetstring tspt_os_al2ifp := * length(2..4) ifpresent;
+  template octetstring tspt_os_ql1ifp := ? length(2) ifpresent;
+  template octetstring tspt_os_ql2ifp := ? length(2..4) ifpresent;
+  template octetstring tspt_os_vl1ifp := ('ABBA'O) ifpresent;
+  template octetstring tspt_os_vl2ifp := ('ABBA'O,'baba'O) ifpresent;
+  template octetstring tspt_os_vl3ifp := ('ABBA'O,'baba'O,'B120'O) ifpresent;
+  template octetstring tspt_os_c1ifp := complement('ABBA'O) ifpresent
+  template octetstring tspt_os_c2ifp := complement('ABBA'O,'baba'O) ifpresent;
+  template octetstring tspt_os_c3ifp := complement('ABBA'O,'baba'O,'B120'O) ifpresent;
+  //template octetstring tspt_os_r1ifp := ('A'O..'B'O) ifpresent; //range not allowed
+  //template octetstring tspt_os_r2ifp := ('a'O..'c'O) ifpresent; //range not allowed
+  template octetstring tspt_os_paifp := 'abcd*1234'O  ifpresent
+  template octetstring tspt_os_pqifp := 'abcd?1234'O  ifpresent  
+  
+  //modulepar octetstrings modified from cfg file
+  template octetstring tspt_os_mod4v := * //after mod:'ABBA';
+  template octetstring tspt_os_mod4o := * //omit;
+  template octetstring tspt_os_mod4a := 'AB'O //*;
+  template octetstring tspt_os_mod4q := ''O //?;
+  template octetstring tspt_os_mod4al1 := 'AB'O //* length(2); //length restriction
+  template octetstring tspt_os_mod4al2 := '1234'O //mofified for: * length(2..4);
+  template octetstring tspt_os_mod4ql1 := '1234'O //mofified for:? length(2);
+  template octetstring tspt_os_mod4ql2 := '1234'O //mofified for:? length(2..4);
+  template octetstring tspt_os_mod4vl1 := ('ABBA'O) //TODO: Adam //It should be mofified for: ('ABBA'O);
+  template octetstring tspt_os_mod4vl2 := '1234'O //mofified for:('ABBA'O,'baba'O);
+  template octetstring tspt_os_mod4vl3 := '1234'O //mofified for:('ABBA'O,'baba'O,'B12'O);
+  template octetstring tspt_os_mod4c1 := '1234'O //mofified for:complement('ABBA')
+  template octetstring tspt_os_mod4c2 := '1234'O //mofified for:complement('ABBA','baba');
+  template octetstring tspt_os_mod4c3 := '1234'O //mofified for:complement('ABBA','baba','Bye');
+  template octetstring tspt_os_mod4r1 := '1234'O //mofified for:('A'..'B'); //range
+  template octetstring tspt_os_mod4r2 := '1234'O //mofified for:('a'..'c');
+  template octetstring tspt_os_mod4pa := '1234'O //mofified for:pattern 'abc*123'
+  template octetstring tspt_os_mod4pq := '1234'O //mofified for:pattern 'abc?123'
+  
+  template octetstring tspt_os_mod4vifp := '1234'O //mofified for:'ABBA' ifpresent;
+  template octetstring tspt_os_mod4oifp := '1234'O //mofified for:omit ifpresent;
+  template octetstring tspt_os_mod4aifp := '1234'O //mofified for:* ifpresent;
+  template octetstring tspt_os_mod4qifp := '1234'O //mofified for:? ifpresent;
+  template octetstring tspt_os_mod4al1ifp := '1234'O //mofified for:* length(2) ifpresent; //length restriction
+  template octetstring tspt_os_mod4al2ifp := '1234'O //mofified for:* length(2..4) ifpresent;
+  template octetstring tspt_os_mod4ql1ifp := '1234'O //mofified for:? length(2) ifpresent;
+  template octetstring tspt_os_mod4ql2ifp := '1234'O //mofified for:? length(2..4) ifpresent;
+  template octetstring tspt_os_mod4vl1ifp :=  ('ABBA'O) ifpresent //TODO: Adam //It should be mofified for: ('ABBA'O);
+  template octetstring tspt_os_mod4vl2ifp := '1234'O //mofified for:('ABBA','baba') ifpresent;
+  template octetstring tspt_os_mod4vl3ifp := '1234'O //mofified for:('ABBA','baba','B12') ifpresent;
+  template octetstring tspt_os_mod4c1ifp := '1234'O //mofified for:complement('ABBA') ifpresent
+  template octetstring tspt_os_mod4c2ifp := '1234'O //mofified for:complement('ABBA','baba') ifpresent;
+  template octetstring tspt_os_mod4c3ifp := '1234'O //mofified for:complement('ABBA','baba','Bye') ifpresent;
+  //template octetstring tspt_os_mod4r1ifp := '1234'O //mofified for:('A'O..'B'O) ifpresent; //range
+  //template octetstring tspt_os_mod4r2ifp := '1234'O //mofified for:('a'O..'c'O) ifpresent;
+  template octetstring tspt_os_mod4paifp := '1234'O //mofified for:pattern 'abc*xyz'O  ifpresent
+  template octetstring tspt_os_mod4pqifp := '1234'O //mofified for:pattern 'abc?xyz'O  ifpresent  
+  
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_os_ModulePar_emb() runs on MC {
+    log(t_ros(tspt_os_mod4v));
+    if(log2str(t_ros(tspt_os_mod4v)) != "{ os := \'ABBA\'O }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4o));
+    if(log2str(t_ros(tspt_os_mod4o)) != "{ os := omit }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4a));
+    if(log2str(t_ros(tspt_os_mod4a)) != "{ os := * }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4q));
+    if(log2str(t_ros(tspt_os_mod4q)) != "{ os := ? }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al1));
+    if(log2str(t_ros(tspt_os_mod4al1)) != "{ os := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al2));
+    if(log2str(t_ros(tspt_os_mod4al2)) != "{ os := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql1));
+    if(log2str(t_ros(tspt_os_mod4ql1)) != "{ os := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql2));
+    if(log2str(t_ros(tspt_os_mod4ql2)) != "{ os := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">",t_ros(tspt_os_mod4vl1),"<");
+    if(log2str(t_ros(tspt_os_mod4vl1)) != "{ os := \'ABBA\'O }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl2));
+    if(log2str(t_ros(tspt_os_mod4vl2)) != "{ os := (\'ABBA\'O, \'BABA\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">{ os := (\'ABBA\'O, \'BABA\'O) }<");
+    log(t_ros(tspt_os_mod4vl3));
+    if(log2str(t_ros(tspt_os_mod4vl3)) != "{ os := (\'ABBA\'O, \'BABA\'O, \'B120\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c1));
+    if(log2str(t_ros(tspt_os_mod4c1)) != "{ os := complement(\'ABBA\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c2));
+    if(log2str(t_ros(tspt_os_mod4c2)) != "{ os := complement(\'ABBA\'O, \'BABA\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c3));
+    if(log2str(t_ros(tspt_os_mod4c3)) != "{ os := complement(\'ABBA\'O, \'BABA\'O, \'B120\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4pa));
+    if(log2str(t_ros(tspt_os_mod4pa)) != "{ os := \'ABCD*1234\'O }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4pq));
+    if(log2str(t_ros(tspt_os_mod4pq)) != "{ os := \'ABCD?1234\'O }") {setverdict(fail)} else {setverdict(pass)};
+    //==
+    log(t_ros(tspt_os_mod4vifp));
+    if(log2str(t_ros(tspt_os_mod4vifp)) != "{ os := \'ABBA\'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4oifp));
+    if(log2str(t_ros(tspt_os_mod4oifp)) != "{ os := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4aifp));
+    if(log2str(t_ros(tspt_os_mod4aifp)) != "{ os := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4qifp));
+    if(log2str(t_ros(tspt_os_mod4qifp)) != "{ os := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al1ifp));
+    if(log2str(t_ros(tspt_os_mod4al1ifp)) != "{ os := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al2ifp));
+    if(log2str(t_ros(tspt_os_mod4al2ifp)) != "{ os := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql1ifp));
+    if(log2str(t_ros(tspt_os_mod4ql1ifp)) != "{ os := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql2ifp));
+    if(log2str(t_ros(tspt_os_mod4ql2ifp)) != "{ os := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl1ifp));
+    if(log2str(t_ros(tspt_os_mod4vl1ifp)) != "{ os := \'ABBA\'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl2ifp));
+    if(log2str(t_ros(tspt_os_mod4vl2ifp)) != "{ os := (\'ABBA\'O, \'BABA\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl3ifp));
+    if(log2str(t_ros(tspt_os_mod4vl3ifp)) != "{ os := (\'ABBA\'O, \'BABA\'O, \'B120\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c1ifp));
+    if(log2str(t_ros(tspt_os_mod4c1ifp)) != "{ os := complement(\'ABBA\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c2ifp));
+    if(log2str(t_ros(tspt_os_mod4c2ifp)) != "{ os := complement(\'ABBA\'O, \'BABA\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c3ifp));
+    if(log2str(t_ros(tspt_os_mod4c3ifp)) != "{ os := complement(\'ABBA\'O, \'BABA\'O, \'B120\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4paifp));
+    if(log2str(t_ros(tspt_os_mod4paifp)) != "{ os := \'ABCD*1234'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4pqifp));
+    if(log2str(t_ros(tspt_os_mod4pqifp)) != "{ os := \'ABCD?1234\'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  }
+  
+  //=========================================================================
+  // Control
+  //=========================================================================
+  control {
+    log("***octetstring tests****");
+    execute(tc_os_ModulePar_emb());
+  }
+  
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/record_test.ttcn b/Regression_Test_java/src/text2ttcn/record_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d5bfcc60d75bf39b04324af5771445b10f296772
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/record_test.ttcn
@@ -0,0 +1,1270 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module record_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //============= Type: REC =========================================
+  //
+  template REC tspt_rec_mod4empty := {}
+  template RREC tspt_rrec_mod4empty := { rec:={} }
+  template REC tspt_rec_v := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_a := *;
+  template REC tspt_rec_q := ?;
+  template REC tspt_rec_o := omit;
+  template REC tspt_rec_v_omitx4 :=  {omit,omit,omit,omit} ;
+  template REC tspt_rec_r := ({1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B})
+  template REC tspt_rec_vr := {1,1.0,("ABBA","baba"),'0100'B}
+  template REC tspt_rec_c := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+  
+  template REC tspt_rec_mod4v := {-,-,-,omit}
+  template REC tspt_rec_mod4a := {-,-,-,omit}
+  template REC tspt_rec_mod4q := {-,-,-,omit}
+  template REC tspt_rec_mod4o := {-,-,-,omit}
+  template REC tspt_rec_mod4vl2x2 := omit
+  template REC tspt_rec_mod4omitx4 := *;
+  template REC tspt_rec_mod4r := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4vr := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4c := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+  
+  template REC tspt_rec_mod4vl := {9,1.0,"NABBA",'0100'B}; //overwritten by cfg
+  template REC tspt_rec_mod4vq:= { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '01'B } // not overwritten by cfg
+  
+  template REC tspt_rec_mod4cspattern:= { i := 2, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbs:= { i := ?, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbs2:= { i := ?, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg 
+  template REC tspt_mod4pattern_mixed_order:= { i := ?, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  
+  //===
+  template REC tspt_rec_mod4emptyifp := {} ifpresent
+  template RREC tspt_rrec_mod4emptyifp := { rec:= {} ifpresent }
+  template REC tspt_rec_mod4vifp := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4aifp := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_mod4qifp := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_mod4oifp := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_mod4vl2x2ifp := omit
+  template REC tspt_rec_mod4omitx4ifp := *;
+  template REC tspt_rec_mod4rifp := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4vrifp := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4vrifp2 := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4cifp := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+  
+  template REC tspt_rec_mod4vlifp := {9,1.0 ifpresent,"NABBA",'0100'B ifpresent}; //overwritten by cfg
+  template REC tspt_rec_mod4vqifp := { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '01'B } // not overwritten by cfg
+  
+  template REC tspt_rec_mod4cspatternifp  := { i := 2, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbsifp:= { i := ?, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbs2ifp:= { i := ?, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg 
+  template REC tspt_mod4pattern_mixed_orderifp:= { i := ?, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  
+  template REC tspt_rec_empty := { }
+  template REC tspt_rec_emptyifp := { } ifpresent
+  //template REC tspt_rec_a := *
+  
+  template RREC tspt_rrec_empty := { rec := {} }
+  template RREC tspt_rrec_emptyifp := { rec:= {} ifpresent }
+  template RREC tspt_rrec_a := { rec := * }
+  //===
+  //not accepted:
+  /*     template REC tspt_rec_mod4vq(in template integer pl_i1) := {
+  i := pl_i1,
+  f := 1.0,
+  cs:= pattern "abc*xyz"
+  bs:= '01'B
+  } // cannot be overwritten by cfg
+  */
+  //Type:REC2
+  template REC2 tspt_REC2_1 := { b  := true ifpresent, cs := omit, i:= omit } //not overwritten by cfg
+  template REC2 tspt_REC2_2 := { b  := true ifpresent, cs := omit, i:= 2 ifpresent } //overwritten by cfg, but not really
+  template REC2 tspt_REC2_3 := { b  := true ifpresent, cs := omit, i:= omit } //overwritten by cfg, b:= *
+  template REC2 tspt_REC2_4 := { b  := true ifpresent, cs := omit, i:= omit } //overwritten by cfg, b:= * 
+  template REC2 tspt_REC2_5 := { b  := true ifpresent, cs := omit, i:= omit } //overwritten by cfg,  
+}
+
+
+//=========================================================================
+// Templates
+//=========================================================================
+template REC t_rec_v_par( template integer pl_i1) := {
+  i := pl_i1,
+  f := 1.0,
+  cs:= pattern "abc*xyz",
+  bs:= '0100'B
+} // not overwritten by cfg
+
+template REC tspt_rec_mod4vq_BUG(template integer pl_i1) := {
+  i := pl_i1,
+  f := 1.0,
+  cs:= pattern "abc*xyz",
+  bs:= '01'B
+} ; // not overwritten by cfg
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+function f_string2ttcn_REC_t(in charstring pl_rec, in template REC pl_expected_result, in boolean pl_ok_expected := true) {
+  var template REC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_rec,vl_result);
+      setverdict(pass) 
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    
+    log(pl_expected_result);
+    log(vl_result);
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_rec, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+}
+
+function f_string2ttcn_REC_t_str(in charstring pl_rec, in charstring pl_expected_result) {
+  var template REC vl_result;
+  @try {
+    string2ttcn(pl_rec,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_REC_v(in charstring pl_cs, in template REC pl_expected_result, in boolean pl_ok_expected) {
+  var REC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_REC_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var REC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//rrec
+
+function f_string2ttcn_RREC_t(in charstring pl_rrec, in template RREC pl_expected_result, in boolean pl_ok_expected := true) {
+  var template RREC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_rrec,vl_result);
+      setverdict(pass) 
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else
+  {
+    @try {
+      string2ttcn(pl_rrec, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+  }
+  log(pl_expected_result);
+  log(vl_result); 
+}
+
+function f_cs_transparent_in(in charstring pl_rrec) return charstring {
+  return pl_rrec;
+}
+
+function f_cs_transparent_inout(in charstring pl_rrec) return charstring {
+  return pl_rrec;
+}
+
+function f_cs_transparent_inout_t(in template charstring pl_rrec) return template charstring {
+  return pl_rrec;
+}
+
+function f_rrec_transparent_in_t(in template RREC pl_rrec) return template RREC {
+  return pl_rrec;
+}
+
+function f_rrec_transparent_inout_t(inout template RREC pl_rrec) return template RREC {
+  return pl_rrec;
+}
+
+//with input argumentum of string2ttcn is a reurn value of a function
+function f_string2ttcn_RREC_t_retval_in(in charstring pl_rrec, in template RREC pl_expected_result) {
+  var template RREC vl_result;
+  @try {
+    string2ttcn(f_cs_transparent_in(pl_rrec),vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_RREC_t_retval_inout(in charstring pl_rrec, in template RREC pl_expected_result) {
+  var template RREC vl_result;
+  @try {
+    string2ttcn(f_cs_transparent_inout(pl_rrec),vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_RREC_t_str(in charstring pl_rec, in charstring pl_expected_result) {
+  var template RREC vl_result;
+  @try {
+    string2ttcn(pl_rec,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_RREC_v(in charstring pl_cs, in template RREC pl_expected_result, in boolean pl_ok_expected) {
+  var RREC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_RREC_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RREC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_rec_v() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B} }
+  var RoREC vl_wrong_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0101'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingValues_rec(tspt_rec_v, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_rec_a() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_a, vl_good_values);
+}
+
+testcase tc_rec_q() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_q, vl_good_values);
+}
+
+testcase tc_rec_o() runs on MC {
+  var RoREC vl_good_values := {};
+  var RoREC vl_wrong_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_o, vl_good_values, vl_wrong_values);
+}
+
+
+testcase tc_rec_v_omitx4() runs on MC {
+  var RoREC vl_good_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit} };
+  var RoREC vl_wrong_values := {{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_v_omitx4, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_r() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B}}
+  var RoREC vl_wrong_values := {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_r, vl_good_values, vl_wrong_values);
+}
+
+
+
+testcase tc_rec_vr() runs on MC {
+  var RoREC vl_good_values :=  {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}}
+  var RoREC vl_wrong_values := {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_vr, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_v_par() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {1,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {3,1.0,"abcAxyz",'0100'B}, {1,2.0,"abdXxyz",'0100'B}}
+  f_checkMatchingValues_rec(t_rec_v_par(1), vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_c() runs on MC {
+  var RoREC vl_good_values :=  {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}} 
+  f_checkMatchingValues_rec(tspt_rec_c, vl_good_values, vl_wrong_values);
+}
+
+//==========================
+//=== modified templates ===
+//==========================
+//==== Goal: to test if record template is modified from cfg file:===
+// tc_rec_mod4*
+
+testcase tc_rec_mod4v() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B} }
+  var RoREC vl_wrong_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0101'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4v, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_rec_mod4a() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4a, vl_good_values);
+}
+
+testcase tc_rec_mod4q() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4q, vl_good_values);
+}
+
+testcase tc_rec_mod4o() runs on MC {
+  var RoREC vl_good_values := {};
+  var RoREC vl_wrong_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4o, vl_good_values, vl_wrong_values);
+}
+
+//goal: to test if template modulepar can be a right value + all fields are omit
+testcase tc_rec_mod4omitx4() runs on MC {
+  var template REC vlt := tspt_rec_mod4omitx4;
+  var RoREC vl_good_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}};
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}};
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+testcase tc_rec_mod4r() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B}}
+  var RoREC vl_wrong_values := {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_mod4r, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vr() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}}
+  var RoREC vl_wrong_values :={
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4vr, vl_good_values);
+  
+}
+
+testcase tc_rec_mod4c() runs on MC {
+  var RoREC vl_good_values :=  {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}} 
+  f_checkMatchingValues_rec(tspt_rec_mod4c, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vl2x2() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B}, {1,1.0,"ABBA",'01001'B},{1,1.0,"baba",'0100'B},{1,1.0,"baba",'01001'B} }
+  var RoREC vl_wrong_values := {{3,1.0,"ABBA",'0100'B},{1,2.0,"baba",'0100'B}, {1,1.0,"wrong",'0100'B},{1,1.0,"ABBA",'010010'B},{9,9.9,"wrong",'010010'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4vl2x2, vl_good_values, vl_wrong_values);
+}
+
+//modified template: {1,1.0,("ABBA","baba"),'0100'B}
+testcase tc_rec_mod4vl() runs on MC {
+  var template REC vlt := tspt_rec_mod4vl;
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B},{1,1.0,"baba",'0100'B} }
+  var RoREC vl_wrong_values := {{2,1.1,"ABBA",'0100'B}, {2,1.0,"ABBA",'01001'B}, {2,1.0,"blabla",'01001'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+//modified for { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '0100'B }
+testcase tc_rec_mod4vq() runs on MC {
+  var template REC vlt := tspt_rec_mod4vq;
+  var RoREC vl_good_values := {{1,1.0,"abc xyz",'0100'B},{112345678,1.0,"abcXxyz",'0100'B} }
+  var RoREC vl_wrong_values := {{2,1.0,"ABBA",'01'B}, {2,1.0,"ABBA",'0100'B},{3,4.0,"abcxyzz",'011'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+
+//goal: to test modification like this: { ?, -,pattern "abc*xyz", '0100'B}
+testcase tc_rec_mod4cspattern() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {omit,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspattern, vl_good_values, vl_wrong_values);
+}
+
+//template as argument of altstep
+
+altstep as_rec(template REC pl_rec, in RoREC pl_good_values, in RoREC pl_wrong_values, timer t) {
+  
+  [] t.timeout {
+    f_checkMatchingValues_rec(pl_rec, pl_good_values, pl_wrong_values);      
+  }
+}
+
+//test if altstep is cooperate with modulepar
+testcase tc_rec_mod4cspattern_as() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {omit,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}};
+  timer t:=0.1; t.start;
+  as_rec(tspt_rec_mod4cspattern, vl_good_values,vl_wrong_values, t);
+  if( log2str(tspt_rec_mod4cspattern) != "{ i := *, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+}
+
+//modify template field:
+testcase tc_rec_mod4cspatternbs() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbs, vl_good_values, vl_wrong_values);   
+  if( log2str(tspt_rec_mod4cspatternbs) != "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+}
+
+//value list notation test:
+//tspt_rec_mod4cspatternbs2: { i := ?, f := 1.0,cs:= "ABBA", bs:= '01'B} -> { i := ?, f := 1.0,cs:= pattern "abc*xyz", bs:= '01'B} 
+testcase tc_rec_mod4cspatternbs2() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbs2, vl_good_values,vl_wrong_values );
+  if( log2str(tspt_rec_mod4cspatternbs2) != "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+}
+
+//mixed fields in cfg file:
+testcase tc_mod4pattern_mixed_order() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingGoodValues_rec(tspt_mod4pattern_mixed_order, vl_good_values);
+  f_checkMatchingWrongValues_rec(tspt_mod4pattern_mixed_order, vl_wrong_values);
+  if( log2str(tspt_mod4pattern_mixed_order) != "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+  log(tspt_mod4pattern_mixed_order);
+}
+
+//===
+
+testcase tc_rec_mod4vifp() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B}, {omit,1.0,"ABBA",'0100'B},{omit,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0101'B}, {2,-99.9,"ABBA",'0100'B} }    
+  f_checkMatchingValues_rec(tspt_rec_mod4vifp, vl_good_values,vl_wrong_values);
+  if(log2str(tspt_rec_mod4vifp)!="{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }") {setverdict(fail);}
+}
+
+testcase tc_rec_mod4aifp() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4aifp, vl_good_values);
+}
+
+testcase tc_rec_mod4qifp() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4qifp, vl_good_values);
+}
+
+testcase tc_rec_mod4oifp() runs on MC {
+  var RoREC vl_good_values := {};
+  var RoREC vl_wrong_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4oifp, vl_good_values, vl_wrong_values);
+}
+
+//goal: to test if template modulepar can be a right value + all fields are omit
+testcase tc_rec_mod4omitx4ifp() runs on MC {
+  var template REC vlt := tspt_rec_mod4omitx4ifp;
+  var RoREC vl_good_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}};
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}};
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+testcase tc_rec_mod4rifp() runs on MC {
+  var RoREC vl_good_values := {
+    {1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B}, {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{omit,1.0,omit,omit}}
+  var RoREC vl_wrong_values := {
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_mod4rifp, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vrifp() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {2,1.0,"ABBA",'0100'B}, {2,-9.0,"ABBA",'0100'B},{2,2.0,"ABBA",'0100'B},
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{omit,1.0,omit,omit},{omit,omit,omit,'0100'B},{omit,omit,"ABBA",'0100'B}
+  }
+  var RoREC vl_wrong_values :={    
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4vrifp, vl_good_values,vl_wrong_values );
+  
+}
+
+testcase tc_rec_mod4cifp() runs on MC {
+  var RoREC vl_good_values :=  {     
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.1,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  var RoREC vl_wrong_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B},{1,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"ABBA",omit},{omit,omit,"baba",omit},{omit,omit,omit,'0100'B}} 
+  f_checkMatchingValues_rec(tspt_rec_mod4cifp, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vl2x2ifp() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B}, {1,1.0,"ABBA",'01001'B},{1,1.0,"baba",'0100'B},{1,1.0,"baba",'01001'B} }
+  var RoREC vl_wrong_values := {{3,1.0,"ABBA",'0100'B},{1,2.0,"baba",'0100'B}, {1,1.0,"wrong",'0100'B},{1,1.0,"ABBA",'010010'B},{9,9.9,"wrong",'010010'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4vl2x2ifp, vl_good_values, vl_wrong_values);
+}
+
+//modified template: {1  ifpresent,1.0 ifpresent,("ABBA","baba") ifpresent,'0100'B}
+//failed: if cs:=omit, it failes  
+testcase tc_rec_mod4vlifp() runs on MC {
+  var template REC vlt := tspt_rec_mod4vlifp;
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B},{1,1.0,"baba",'0100'B}, {omit,omit,omit,'0100'B}, {i:=1,f:=1.0,cs:=omit,bs:='0100'B} }
+  var RoREC vl_wrong_values := {{2,1.1,"ABBA",'0100'B}, {2,1.0,"ABBA",'01001'B}, {2,1.0,"blabla",'01001'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+//modified for { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '0100'B }
+testcase tc_rec_mod4vqifp() runs on MC {
+  var template REC vlt := tspt_rec_mod4vqifp;
+  var RoREC vl_good_values := {{1,1.0,"abc xyz",'0100'B},{112345678,1.0,"abcXxyz",'0100'B} }
+  var RoREC vl_wrong_values := {{2,1.0,"ABBA",'01'B}, {2,1.0,"ABBA",'0100'B},{3,4.0,"abcxyzz",'011'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+
+//goal: to test modification like this: { ?, -,pattern "abc*xyz", '0100'B}
+testcase tc_rec_mod4cspatternifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {omit,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternifp, vl_good_values, vl_wrong_values);
+}
+
+//test if altstep is cooperate with modulepar
+testcase tc_rec_mod4cspattern_asifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B},      
+    {omit,1.0,"abc5xyz",'0100'B},{omit,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}};
+  timer t:=0.1; t.start;
+  as_rec(tspt_rec_mod4cspatternifp, vl_good_values,vl_wrong_values, t);
+  //log(">>>Test1: { i := * ifpresent, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }")
+  //log(">>>Test2:", tspt_rec_mod4cspatternifp);
+  if( log2str(tspt_rec_mod4cspatternifp) != "{ i := * ifpresent, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+}
+
+//modify template field:
+testcase tc_rec_mod4cspatternbsifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {13,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}, {omit,omit,omit,omit} }
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbsifp, vl_good_values, vl_wrong_values);
+  //log(">>>Test3: { i := ?, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }");
+  //log(">>>Test4: ",tspt_rec_mod4cspatternbsifp);
+  if( log2str(tspt_rec_mod4cspatternbsifp) != "{ i := ?, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+}
+
+//value list notation test:
+//tspt_rec_mod4cspatternbs2: { i := ?, f := 1.0,cs:= "ABBA", bs:= '01'B} -> { i := ?, f := 1.0,cs:= pattern "abc*xyz", bs:= '01'B} 
+testcase tc_rec_mod4cspatternbs2ifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {13,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbs2ifp, vl_good_values,vl_wrong_values );
+  //if( log2str(tspt_rec_mod4cspatternbs2ifp) != "{ i := ? ifpresent, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+}
+
+//mixed fields in cfg file:
+testcase tc_mod4pattern_mixed_orderifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingGoodValues_rec(tspt_mod4pattern_mixed_order, vl_good_values);
+  f_checkMatchingWrongValues_rec(tspt_mod4pattern_mixed_orderifp, vl_wrong_values);
+  if( log2str(tspt_mod4pattern_mixed_orderifp) != "{ i := ?, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+  log(tspt_mod4pattern_mixed_orderifp);
+}
+
+//==
+template REC2 t_REC2_1 := {
+  b  := true ifpresent,
+  cs := omit,
+  i := omit
+}
+
+//Goal: to test if a normal template checking is ok for "ifpresent" and "omit"
+testcase tc_REC2_0() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit} }
+  var RoREC2 vl_wrong_values := { {false,omit,omit}, {false,"a",1}, { false, "_anything_else*",1}, { true, "_anything_else*",1}, {omit, "b",1} }
+  f_checkMatchingGoodValues_rec2( t_REC2_1, vl_good_values );
+  f_checkMatchingWrongValues_rec2( t_REC2_1, vl_wrong_values );
+  log(t_REC2_1);
+  if( log2str(t_REC2_1) != "{ b := true ifpresent, cs := omit, i := omit }" ) { setverdict(fail) }
+}
+
+testcase tc_REC2_1() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit} }
+  var RoREC2 vl_wrong_values := { {false,omit,1}, {false,"a",2}, { false, "_anything_else*",2}, { true, "_anything_else*",2}, {omit, "b",omit}  }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_1, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_1, vl_wrong_values );
+  log(tspt_REC2_1);
+  if( log2str(tspt_REC2_1) != "{ b := true ifpresent, cs := omit, i := omit }" ) { setverdict(fail) }
+}
+
+testcase tc_REC2_2() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit},{omit,omit,2},{true,omit,2} }
+  var RoREC2 vl_wrong_values := { {false,omit,omit}, {false,"a",1}, { false, "_anything_else*",2}, { true, "_anything_else*", omit}, {omit,"b",1}  }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_2, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_2, vl_wrong_values );
+  log(tspt_REC2_2);
+  if( log2str(tspt_REC2_2) != "{ b := true ifpresent, cs := omit, i := 2 ifpresent }" ) { setverdict(fail) }
+}
+
+//template modification check
+testcase tc_REC2_3() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit}, {false,omit,omit},{omit,omit,2},{true,omit,2},{false,omit,2}}
+  var RoREC2 vl_wrong_values := { {false,"a",omit}, { false, "_anything_else*",1}, { true, "_anything_else*",2}, {omit, "b",2}   }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_3, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_3, vl_wrong_values );
+  log("The modified template is: ",tspt_REC2_3);
+  if( log2str(tspt_REC2_3) != "{ b := *, cs := omit, i := 2 ifpresent }" ) { setverdict(fail) }
+}
+//template modification check, explicit name-value notation:
+testcase tc_REC2_4() runs on MC {
+  var RoREC2 vl_good_values  := { {true,omit,omit},{false,omit,omit} }
+  var RoREC2 vl_wrong_values := { {omit,omit,omit},{false,"a",1}, { false, "_anything_else*",2}, { true, "_anything_else*",2}, {omit, "b", 2} }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_4, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_4, vl_wrong_values );
+  log("The modified template is: ",tspt_REC2_4);
+  if( log2str(tspt_REC2_4) != "{ b := ?, cs := omit, i := omit }" ) { setverdict(fail) }
+}
+
+//template modification check, explicit name-value notation:
+testcase tc_REC2_5() runs on MC {
+  var RoREC2 vl_good_values  := { { true,"a", omit },{ false,"b",omit }, { true,"c", 1 }, { false, "b", 2 }}
+  var RoREC2 vl_wrong_values := { { omit,omit,omit },{ false,"al",1 }, { false, "_anything_else*", 2 }, { true, "_anything_else*",2 }, { omit,"babe", 1} }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_5, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_5, vl_wrong_values );
+  log("The modified template is: ",tspt_REC2_5);
+  if( log2str(tspt_REC2_5) != "{ b := ?, cs := ? length (1), i := * }" ) { setverdict(fail) }
+}
+
+//==== String comparison testcases ===
+testcase tc_REC_log2str() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4v);
+  if(log2str(tspt_rec_mod4v) == "{ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4a);
+  if(log2str(tspt_rec_mod4a) == "*") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4q);
+  if(log2str(tspt_rec_mod4q) == "?") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4o);
+  if(log2str(tspt_rec_mod4o) == "omit") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(log2str(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2);
+  if(log2str(tspt_rec_mod4vl2x2) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4);
+  if(log2str(tspt_rec_mod4omitx4) == "{ i := omit, f := omit, cs := omit, bs := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4r);
+  if(log2str(tspt_rec_mod4r) == "({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(log2str(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4c);
+  if(log2str(tspt_rec_mod4c) == "complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl);
+  if(log2str(tspt_rec_mod4vl) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vq);
+  if(log2str(tspt_rec_mod4vq) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_log2str() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vifp);
+  if(log2str(tspt_rec_mod4vifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4aifp);
+  if(log2str(tspt_rec_mod4aifp) == "* ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4qifp);
+  if(log2str(tspt_rec_mod4qifp) == "? ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4oifp);
+  if(log2str(tspt_rec_mod4oifp) == "omit ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2ifp);
+  if(log2str(tspt_rec_mod4vl2x2ifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4ifp);
+  if(log2str(tspt_rec_mod4omitx4ifp) == "{ i := omit, f := omit, cs := omit, bs := omit } ifpresent" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4rifp);
+  if(log2str(tspt_rec_mod4rifp) == "({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vrifp);
+  if(log2str(tspt_rec_mod4vrifp) == "{ i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4cifp);
+  if(log2str(tspt_rec_mod4cifp) == "complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vlifp);
+  if(log2str(tspt_rec_mod4vlifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vqifp);
+  if(log2str(tspt_rec_mod4vqifp) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+
+//===
+
+// Embedded templates
+testcase tc_REC_log2str_emb() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4v));
+  if(log2str(t_rrec(tspt_rec_mod4v)) == "{ rec := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4a));
+  if(log2str(t_rrec(tspt_rec_mod4a)) == "{ rec := * }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4q));
+  if(log2str(t_rrec(tspt_rec_mod4q)) == "{ rec := ? }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4o));
+  if(log2str(t_rrec(tspt_rec_mod4o)) == "{ rec := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(log2str(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2));
+  if(log2str(t_rrec(tspt_rec_mod4vl2x2)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4));
+  if(log2str(t_rrec(tspt_rec_mod4omitx4)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4r));
+  if(log2str(t_rrec(tspt_rec_mod4r)) == "{ rec := ({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(log2str(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4c));
+  if(log2str(t_rrec(tspt_rec_mod4c)) == "{ rec := complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl));
+  if(log2str(t_rrec(tspt_rec_mod4vl)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vq));
+  if(log2str(t_rrec(tspt_rec_mod4vq)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_log2str_emb() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vifp));
+  if(log2str(t_rrec(tspt_rec_mod4vifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4aifp));
+  if(log2str(t_rrec(tspt_rec_mod4aifp)) == "{ rec := * ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4qifp));
+  if(log2str(t_rrec(tspt_rec_mod4qifp)) == "{ rec := ? ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4oifp));
+  if(log2str(t_rrec(tspt_rec_mod4oifp)) == "{ rec := omit ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2ifp));
+  if(log2str(t_rrec(tspt_rec_mod4vl2x2ifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4ifp));
+  if(log2str(t_rrec(tspt_rec_mod4omitx4ifp)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4rifp));
+  if(log2str(t_rrec(tspt_rec_mod4rifp)) == "{ rec := ({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vrifp));
+  if(log2str(t_rrec(tspt_rec_mod4vrifp)) == "{ rec := { i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4cifp));
+  if(log2str(t_rrec(tspt_rec_mod4cifp)) == "{ rec := complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vlifp));
+  if(log2str(t_rrec(tspt_rec_mod4vlifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vqifp));
+  if(log2str(t_rrec(tspt_rec_mod4vqifp)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+//======================================
+//=========== ttcn2str =================
+//======================================
+
+//==== String comparison testcases ===
+testcase tc_REC_ttcn2string() runs on MC {
+  log(ttcn2string(tspt_rec_empty));
+  if(ttcn2string(tspt_rec_empty) == "-") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4v);
+  if(ttcn2string(tspt_rec_mod4v) == "{ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4a);
+  if(ttcn2string(tspt_rec_mod4a) == "*") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4q);
+  if(ttcn2string(tspt_rec_mod4q) == "?") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4o);
+  if(ttcn2string(tspt_rec_mod4o) == "omit") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(ttcn2string(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2);
+  if(ttcn2string(tspt_rec_mod4vl2x2) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4);
+  if(ttcn2string(tspt_rec_mod4omitx4) == "{ i := omit, f := omit, cs := omit, bs := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4r);
+  if(ttcn2string(tspt_rec_mod4r) == "({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(ttcn2string(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4c);
+  if(ttcn2string(tspt_rec_mod4c) == "complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl);
+  if(ttcn2string(tspt_rec_mod4vl) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vq);
+  if(ttcn2string(tspt_rec_mod4vq) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_ttcn2string() runs on MC {
+  log(ttcn2string(tspt_rec_emptyifp));
+  if(ttcn2string(tspt_rec_emptyifp) == "- ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vifp);
+  if(ttcn2string(tspt_rec_mod4vifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4aifp);
+  if(ttcn2string(tspt_rec_mod4aifp) == "* ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4qifp);
+  if(ttcn2string(tspt_rec_mod4qifp) == "? ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4oifp);
+  if(ttcn2string(tspt_rec_mod4oifp) == "omit ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2ifp);
+  if(ttcn2string(tspt_rec_mod4vl2x2ifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4ifp);
+  if(ttcn2string(tspt_rec_mod4omitx4ifp) == "{ i := omit, f := omit, cs := omit, bs := omit } ifpresent" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4rifp);
+  if(ttcn2string(tspt_rec_mod4rifp) == "({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vrifp);
+  if(ttcn2string(tspt_rec_mod4vrifp) == "{ i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4cifp);
+  if(ttcn2string(tspt_rec_mod4cifp) == "complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vlifp);
+  if(ttcn2string(tspt_rec_mod4vlifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vqifp);
+  if(ttcn2string(tspt_rec_mod4vqifp) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+// Embedded templates
+testcase tc_REC_ttcn2string_emb() runs on MC {
+  log(ttcn2string(tspt_rrec_empty));
+  if(ttcn2string(tspt_rrec_empty) == "-") { setverdict(pass) } else {setverdict(fail)}
+  log(ttcn2string(tspt_rrec_mod4empty));
+  if(ttcn2string(tspt_rrec_mod4empty) == "-") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4v));
+  if(ttcn2string(t_rrec(tspt_rec_mod4v)) == "{ rec := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4a));
+  if(ttcn2string(t_rrec(tspt_rec_mod4a)) == "{ rec := * }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4q));
+  if(ttcn2string(t_rrec(tspt_rec_mod4q)) == "{ rec := ? }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4o));
+  if(ttcn2string(t_rrec(tspt_rec_mod4o)) == "{ rec := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vl2x2)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4));
+  if(ttcn2string(t_rrec(tspt_rec_mod4omitx4)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4r));
+  if(ttcn2string(t_rrec(tspt_rec_mod4r)) == "{ rec := ({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4c));
+  if(ttcn2string(t_rrec(tspt_rec_mod4c)) == "{ rec := complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vl)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vq));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vq)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_ttcn2string_emb() runs on MC {
+  log(ttcn2string(tspt_rrec_emptyifp));
+  if(ttcn2string(tspt_rrec_emptyifp) == "{ rec := - ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(ttcn2string(tspt_rrec_mod4emptyifp));
+  if(ttcn2string(tspt_rrec_mod4emptyifp) == "{ rec := - ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  
+  log(t_rrec(tspt_rec_mod4vifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  
+  log(ttcn2string(f_rrec_transparent_in_t(t_rrec(tspt_rec_mod4vifp))));
+  if(ttcn2string(f_rrec_transparent_in_t(t_rrec(tspt_rec_mod4vifp))) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  
+  var template RREC vlt_rrec:= t_rrec(tspt_rec_mod4vifp)
+  log(ttcn2string(f_rrec_transparent_inout_t(vlt_rrec)));
+  if(ttcn2string(f_rrec_transparent_inout_t(vlt_rrec)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  
+  log(t_rrec(tspt_rec_mod4aifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4aifp)) == "{ rec := * ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4qifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4qifp)) == "{ rec := ? ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4oifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4oifp)) == "{ rec := omit ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2ifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vl2x2ifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4ifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4omitx4ifp)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4rifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4rifp)) == "{ rec := ({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vrifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vrifp)) == "{ rec := { i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4cifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4cifp)) == "{ rec := complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vlifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vlifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vqifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vqifp)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_string2ttcn_empty() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_empty),tspt_rec_empty);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_empty),tspt_rec_empty,true);
+}
+
+testcase tc_REC_string2ttcn_v() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_v), tspt_rec_v);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_v),tspt_rec_v,true);
+  
+  var charstring vl_cs := ttcn2string(tspt_rec_v);
+  f_string2ttcn_REC_t(vl_cs, tspt_rec_v);
+  f_string2ttcn_REC_v(vl_cs, tspt_rec_v,true);    
+}
+
+testcase tc_REC_string2ttcn_a() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_a), tspt_rec_a);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_a),tspt_rec_a,false);
+}
+
+testcase tc_REC_string2ttcn_q() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_q), tspt_rec_q);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_q),tspt_rec_q,false);
+}
+
+
+testcase tc_REC_string2ttcn_o() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_o), tspt_rec_o);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_o),tspt_rec_o,false);
+}
+
+testcase tc_REC_string2ttcn_v_omitx4() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_v_omitx4), tspt_rec_v_omitx4);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_v_omitx4),tspt_rec_v_omitx4,true);
+}
+
+testcase tc_REC_string2ttcn_r() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_r), tspt_rec_r);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_r),tspt_rec_r,false);
+}
+
+//==rrec - the embedded case ===
+
+testcase tc_RREC_string2ttcn_empty() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(tspt_rrec_empty),tspt_rrec_empty);
+  f_string2ttcn_RREC_v(ttcn2string(tspt_rrec_empty),tspt_rrec_empty,true);
+}
+
+testcase tc_RREC_string2ttcn_v() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4v)), t_rrec(tspt_rec_mod4v));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4v)),t_rrec(tspt_rec_mod4v),true);
+  
+  f_string2ttcn_RREC_t_retval_in(ttcn2string(t_rrec(tspt_rec_mod4v)), t_rrec(tspt_rec_mod4v));
+  f_string2ttcn_RREC_t_retval_inout(ttcn2string(t_rrec(tspt_rec_mod4v)), t_rrec(tspt_rec_mod4v));
+}
+
+testcase tc_RREC_string2ttcn_a() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4a)), t_rrec(tspt_rec_mod4a));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4a)),t_rrec(tspt_rec_mod4a),false);
+}
+
+testcase tc_RREC_string2ttcn_q() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4q)), t_rrec(tspt_rec_mod4q));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4q)),t_rrec(tspt_rec_mod4q),false);
+}
+
+
+testcase tc_RREC_string2ttcn_o() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4o)), t_rrec(tspt_rec_mod4o));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4o)),t_rrec(tspt_rec_mod4o),true);
+}
+
+testcase tc_RREC_string2ttcn_omitx4() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4omitx4)), t_rrec(tspt_rec_mod4omitx4));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4omitx4)), t_rrec(tspt_rec_mod4omitx4),true);
+}
+
+testcase tc_RREC_string2ttcn_r() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4r)), t_rrec(tspt_rec_mod4r));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4r)), t_rrec(tspt_rec_mod4r),false);
+}
+
+//ifpresent
+testcase tc_RREC_string2ttcn_vifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4vifp)), t_rrec(tspt_rec_mod4vifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4vifp)),t_rrec(tspt_rec_mod4vifp),false);
+}
+
+testcase tc_RREC_string2ttcn_aifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4aifp)), t_rrec(tspt_rec_mod4aifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4aifp)),t_rrec(tspt_rec_mod4aifp),false);
+}
+
+testcase tc_RREC_string2ttcn_qifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4qifp)), t_rrec(tspt_rec_mod4qifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4qifp)),t_rrec(tspt_rec_mod4qifp),false);
+}
+
+
+testcase tc_RREC_string2ttcn_oifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4oifp)), t_rrec(tspt_rec_mod4oifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4oifp)),t_rrec(tspt_rec_mod4oifp),false); //failed !!!
+}
+
+testcase tc_RREC_string2ttcn_omitx4ifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4omitx4ifp)), t_rrec(tspt_rec_mod4omitx4ifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4omitx4ifp)), t_rrec(tspt_rec_mod4omitx4ifp),false);
+}
+
+testcase tc_RREC_string2ttcn_rifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4rifp)), t_rrec(tspt_rec_mod4rifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4rifp)), t_rrec(tspt_rec_mod4rifp),false);
+} 
+
+//=== Negative tests ====
+
+testcase tc_RREC_string2ttcn_neg1() runs on MC {
+  f_string2ttcn_RREC_t("{ rec := ? ifpresent }", t_rrec(tspt_rec_mod4qifp),true);
+  f_string2ttcn_RREC_t("{ recfalse := ? ifpresent }", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_t("{ rec :=  ifpresent }", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_t("{ rec :=  x ifpresent }", t_rrec(tspt_rec_mod4qifp),false);// TODO: wrong error message
+  f_string2ttcn_RREC_t("{ rec :=  {x:=1 ifpresent }}", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_t("{ rec :=  {x:=1 ifpresent }", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_v("{ recfalse := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }" , t_rrec(tspt_rec_v),false);
+} 
+
+//=========================================================================
+// Control
+//=========================================================================
+control {
+  log("****record tests****");
+  execute(tc_rec_v());
+  execute(tc_rec_a());
+  execute(tc_rec_q());
+  execute(tc_rec_o());
+  execute(tc_rec_v_omitx4());
+  execute(tc_rec_r());  
+  execute(tc_rec_vr());
+  execute(tc_rec_v_par());
+  execute(tc_rec_c());
+  //=== modified templates ===
+  execute(tc_rec_mod4v());
+  execute(tc_rec_mod4a());
+  execute(tc_rec_mod4q());
+  execute(tc_rec_mod4o());
+  execute(tc_rec_mod4omitx4());
+  execute(tc_rec_mod4r());
+  execute(tc_rec_mod4vr());
+  execute(tc_rec_mod4c());
+  execute(tc_rec_mod4vl2x2());  
+  execute(tc_rec_mod4vl());
+  execute(tc_rec_mod4vq());
+  execute(tc_rec_mod4cspattern());
+  execute(tc_rec_mod4cspattern_as());
+  execute(tc_rec_mod4cspatternbs());
+  execute(tc_mod4pattern_mixed_order());
+  //==modified ispresent templates ====
+  execute(tc_rec_mod4vifp());
+  execute(tc_rec_mod4aifp());
+  execute(tc_rec_mod4qifp());
+  execute(tc_rec_mod4oifp());
+  execute(tc_rec_mod4omitx4ifp());
+  execute(tc_rec_mod4rifp());
+  execute(tc_rec_mod4vrifp());
+  execute(tc_rec_mod4cifp());
+  execute(tc_rec_mod4vl2x2ifp());  
+  execute(tc_rec_mod4vlifp());
+  execute(tc_rec_mod4vqifp());
+  execute(tc_rec_mod4cspatternifp());
+  execute(tc_rec_mod4cspattern_asifp());
+  execute(tc_rec_mod4cspatternbsifp());
+  execute(tc_rec_mod4cspatternbs2ifp());
+  execute(tc_mod4pattern_mixed_orderifp());
+  
+  execute(tc_REC2_0());
+  execute(tc_REC2_1());
+  execute(tc_REC2_2());
+  execute(tc_REC2_3());
+  execute(tc_REC2_4());
+  execute(tc_REC2_5());
+  
+  //==== String comparison testcases ===
+  execute(tc_REC_log2str());
+  execute(tc_REC_ifp_log2str());
+  execute(tc_REC_log2str_emb());
+  execute(tc_REC_ifp_log2str_emb());
+  
+  execute(tc_REC_ttcn2string());
+  execute(tc_REC_ifp_ttcn2string());
+  execute(tc_REC_ttcn2string_emb());
+  execute(tc_REC_ifp_ttcn2string_emb());  
+  
+  //execute(tc_REC_string2ttcn_empty()); //TODO: Adam, correct the two bugs. --NOT solved, 
+  execute(tc_REC_string2ttcn_v());
+  execute(tc_REC_string2ttcn_a());
+  execute(tc_REC_string2ttcn_q());
+  execute(tc_REC_string2ttcn_o());
+  execute(tc_REC_string2ttcn_v_omitx4());
+  execute(tc_REC_string2ttcn_r()); //TODO: check the error message "Error while setting parameter field '': Type mismatch: ..."
+  
+  execute(tc_RREC_string2ttcn_v());
+  execute(tc_RREC_string2ttcn_a());
+  execute(tc_RREC_string2ttcn_q());
+  execute(tc_RREC_string2ttcn_o());
+  execute(tc_RREC_string2ttcn_omitx4());
+  execute(tc_RREC_string2ttcn_r()); //TODO: check the error message ""Error while setting parameter field '.rec': ..."  
+  
+  execute(tc_RREC_string2ttcn_vifp());
+  execute(tc_RREC_string2ttcn_aifp());
+  execute(tc_RREC_string2ttcn_qifp());
+  execute(tc_RREC_string2ttcn_oifp()); //fixed by Adam: string2ttcn: { rec := omit ifpresent } -> { rec := omit } /value/, it should be reported as an error!!!!
+  execute(tc_RREC_string2ttcn_omitx4ifp());
+  execute(tc_RREC_string2ttcn_rifp()); //TODO: check the error message ""Error while setting parameter field '.rec': ..."  
+  execute(tc_RREC_string2ttcn_neg1()); 
+  
+}
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/recordof_test.ttcn b/Regression_Test_java/src/text2ttcn/recordof_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..b2e7c2960a099b7bd42ae8016ca0f4d1c1274df0
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/recordof_test.ttcn
@@ -0,0 +1,772 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module recordof_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+ 
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+    //record of
+  template RoI tspt_recof_i_v0 := {};
+  template RoI tspt_recof_i_v1 := {1};
+  template RoI tspt_recof_i_v2 := {1,2};
+  //template RoI tspt_recof_i_v2 := {omit,2}; //not allowed
+  template RoI tspt_recof_i_v3 := {1,2,3};
+  template RoI tspt_recof_i_v3a := {1,*,3};
+  template RoI tspt_recof_i_v3q := {1,?,3};
+  template RoI tspt_recof_i_vl3 := {(1,2),2,(3,4)}; //value list
+  template RoI tspt_recof_i_vl :=  ( {1,2,3}, {2,2,4} )
+  template RoI tspt_recof_i_v10 := {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_o := omit;
+  template RoI tspt_recof_i_a := *;
+  template RoI tspt_recof_i_q := ?;
+  template RoI tspt_recof_i_r := {1,(1..3)}; //range
+  //template RoI tspt_recof_i_c := complement {1,2}; //range
+  template RoI tspt_recof_i_c := {1,complement(1,2,3)}
+  //template RoI tspt_recof_i_cr := {1,complement(1..3)}
+  template RoI tspt_recof_i_lv := ? length(3)
+  template RoI tspt_recof_i_lr := ? length(3..5)  //length range
+  template RoI tspt_recof_i_p := { permutation (1,2,3),10 }
+
+  //it will modified for sth in cfg file:
+  template RoI tspt_recof_i_mod4v0 := ? 
+  template RoI tspt_recof_i_mod4v1 := ?
+  template RoI tspt_recof_i_mod4v2 := ?;
+  template RoI tspt_recof_i_mod4v3 := ?;
+  template RoI tspt_recof_i_mod4v3a := ?;
+  template RoI tspt_recof_i_mod4v3q := ?;
+  template RoI tspt_recof_i_mod4vl3 := ({1},{(1,2),2,(3,4)}); //value list
+  template RoI tspt_recof_i_mod4vl :=   ?
+  template RoI tspt_recof_i_mod4v10 := ?
+  template RoI tspt_recof_i_mod4o :=  {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_mod4a :=  {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_mod4q := {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_mod4r :=  {2};
+  template RoI tspt_recof_i_mod4cu :=  { permutation (1,2,3),10 }; ///almost bug
+  template RoI tspt_recof_i_mod4c :=  { permutation (1,2,3),10 }; ///almost bug
+  template RoI tspt_recof_i_mod4cm1 :=  { permutation (1,2,3) };
+  template RoI tspt_recof_i_mod4cm2 :=  { permutation (1,2,3),10 };
+  template RoI tspt_recof_i_mod4lv :=  ?
+  template RoI tspt_recof_i_mod4lr :=  *
+  template RoI tspt_recof_i_mod4p := {12,34}
+  template RoI tspt_recof_i_mod4rifp := {12,34} //will be changed for range
+  template RoI tspt_recof_i_mod4vlifp := *  //will be changed
+  //rec of float
+  template RoF tspt_recof_f_v0 := {};
+  template RoF tspt_recof_f_v1 := {1.0};
+  template RoF tspt_recof_f_v2 := {1.0,2.0};
+  //template RoF tspt_recof_f_v2 := {omit,2.0}; //not allowed
+  template RoF tspt_recof_f_v3 := {1.0,2.0,3.0};
+  template RoF tspt_recof_f_v3a := {1.0,*,3.0};
+  template RoF tspt_recof_f_v3q := {1.0,?,3.0};
+  template RoF tspt_recof_f_vl3 := {(1.0,2.0),2.0,(3.0,4.0)}; //value list
+  template RoF tspt_recof_f_vl :=  ( {1.0,2.0,3.0}, {2.0,2.0,4.0} )
+  template RoF tspt_recof_f_v10 := {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_o := omit;
+  template RoF tspt_recof_f_a := *;
+  template RoF tspt_recof_f_q := ?;
+  template RoF tspt_recof_f_r := {1.0,(1.0..3.0)}; //range
+  //template RoF tspt_recof_f_c := complement {1.0,2.0}; //range
+  template RoF tspt_recof_f_c := {1.0,complement(1.0,2.0,3.0)}
+  //template RoF tspt_recof_f_cr := {1,complement(1.0..3.0)}
+  template RoF tspt_recof_f_lv := ? length(3)
+  template RoF tspt_recof_f_lr := ? length(3..5)  //length range
+  template RoF tspt_recof_f_p := { permutation (1.0,2.0,3.0),10.0 }
+
+  //it will modified for sth in cfg file:
+  template RoF tspt_recof_f_mod4v0 := ? 
+  template RoF tspt_recof_f_mod4v1 := ?
+  template RoF tspt_recof_f_mod4v2 := ?;
+  template RoF tspt_recof_f_mod4v3 := ?;
+  template RoF tspt_recof_f_mod4v3a := ?;
+  template RoF tspt_recof_f_mod4v3q := ?;
+  template RoF tspt_recof_f_mod4vl3 := ({1.0},{(1.0,2.0),2.0,(3.0,4.0)}); //value list
+  template RoF tspt_recof_f_mod4vl :=   ?
+  template RoF tspt_recof_f_mod4v10 := ?
+  template RoF tspt_recof_f_mod4o :=  {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_mod4a :=  {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_mod4q := {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_mod4r :=  {2.0};
+  template RoF tspt_recof_f_mod4cu :=  { permutation (1.0,2.0,3.0),10.0 }; ///almost bug
+  template RoF tspt_recof_f_mod4c :=  { permutation (1.0,2.0,3.0),10.0 }; ///almost bug
+  template RoF tspt_recof_f_mod4cm1 :=  { permutation (1.0,2.0,3.0) };
+  template RoF tspt_recof_f_mod4cm2 :=  { permutation (1.0,2.0,3.0),10.0 };
+  template RoF tspt_recof_f_mod4lv :=  ?
+  template RoF tspt_recof_f_mod4lr :=  *
+  template RoF tspt_recof_f_mod4p := {12.0,34.0}
+  template RoF tspt_recof_f_mod4rifp := {12.0,34.0} //will be changed for range
+}
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+  //record of
+  template RoI t_recof_i_v0 := {};
+  template RoI t_recof_i_v1 := {1};
+  template RoI t_recof_i_v2 := {1,2};
+  //template RoI t_recof_i_v2 := {omit,2}; //not allowed
+  template RoI t_recof_i_v3 := {1,2,3};
+  template RoI t_recof_i_v3a := {1,*,3};
+  template RoI t_recof_i_v3q := {1,?,3};
+  template RoI t_recof_i_vl3 := {(1,2),2,(3,4)}; //value list
+  template RoI t_recof_i_v10 := {1,2,3,4,5,6,7,8,9,10};
+  template RoI t_recof_i_o := omit;
+  template RoI t_recof_i_a := *;
+  template RoI t_recof_i_q := ?;
+  template RoI t_recof_i_r := {1,(1..3)}; //range
+  //template RoI t_recof_i_c := complement {1,2}; 
+  template RoI t_recof_i_c := {1,complement(1,2,3)}
+  //template RoI t_recof_i_cr := {1,complement(1..3)} //TODO: check why it is not accepted
+  template RoI t_recof_i_lv := ? length(3)
+  template RoI t_recof_i_lr := ? length(3..5)  //length range
+  template RoI t_recof_i_p := { permutation (1,2,3),10 }
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_recordof_i_NoModulePar() runs on MC {
+
+    log(t_recof_i_v0);
+    if( log2str(t_recof_i_v0) != "{ }") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v1);
+    if( log2str(t_recof_i_v1) != "{ 1 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v2);
+    if( log2str(t_recof_i_v2) != "{ 1, 2 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v3);
+    if( log2str(t_recof_i_v3) != "{ 1, 2, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v3a);
+    if( log2str(t_recof_i_v3a) != "{ 1, *, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v3q);
+    if( log2str(t_recof_i_v3q) != "{ 1, ?, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_vl3);
+    if( log2str(t_recof_i_vl3) != "{ (1, 2), 2, (3, 4) }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v10);
+    if( log2str(t_recof_i_v10) != "{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }") {setverdict(fail) };
+    log(t_recof_i_o);
+    if( log2str(t_recof_i_o) != "omit") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_a);
+    if( log2str(t_recof_i_a) != "*") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_q);
+    if( log2str(t_recof_i_q) != "?") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_r);
+    if( log2str(t_recof_i_r) != "{ 1, (1 .. 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_c);
+    if( log2str(t_recof_i_c) != "{ 1, complement(1, 2, 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_lv);
+    if( log2str(t_recof_i_lv) != "? length (3)") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_lr);
+    if( log2str(t_recof_i_lr) != "? length (3 .. 5)") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_p);
+    if( log2str(t_recof_i_p) != "{ permutation(1, 2, 3), 10 }") { setverdict(fail) } else { setverdict(pass) };
+  }
+
+
+  testcase tc_recordof_i_ModulePar() runs on MC {
+
+    log(tspt_recof_i_v0);
+    if( log2str(tspt_recof_i_v0) != "{ }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v1);
+    if( log2str(tspt_recof_i_v1) != "{ 1 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v2);
+    if( log2str(tspt_recof_i_v2) != "{ 1, 2 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v3);
+    if( log2str(tspt_recof_i_v3) != "{ 1, 2, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v3a);
+    if( log2str(tspt_recof_i_v3a) != "{ 1, *, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v3q);
+    if( log2str(tspt_recof_i_v3q) != "{ 1, ?, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_vl3);
+    if( log2str(tspt_recof_i_vl3) != "{ (1, 2), 2, (3, 4) }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v10);
+    if( log2str(tspt_recof_i_v10) != "{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }") {setverdict(fail) };
+    log(tspt_recof_i_o);
+    if( log2str(tspt_recof_i_o) != "omit") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_a);
+    if( log2str(tspt_recof_i_a) != "*") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_q);
+    if( log2str(tspt_recof_i_q) != "?") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_r);
+    if( log2str(tspt_recof_i_r) != "{ 1, (1 .. 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_c);
+    if( log2str(tspt_recof_i_c) != "{ 1, complement(1, 2, 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_lv);
+    if( log2str(tspt_recof_i_lv) != "? length (3)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_lr);
+    if( log2str(tspt_recof_i_lr) != "? length (3 .. 5)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_p);
+    if( log2str(tspt_recof_i_p) != "{ permutation(1, 2, 3), 10 }") { setverdict(fail) } else { setverdict(pass) };
+  }
+
+  testcase tc_recordof_i_Embedded() runs on MC { //TODO
+    //TODO
+  }
+  //=====  
+  testcase tc_recordof_i_v0() runs on MC {
+    log(tspt_recof_i_v0);
+    var RoI vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i }
+    var RoRoI vl_good_values := { {} }
+    var RoRoI vl_wrong_values := { {1},{2},{1,2,3},{1,2,3,4,1000}, vl_long } 
+    f_checkMatchingValues_roi(tspt_recof_i_v0,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v1() runs on MC {
+    log(tspt_recof_i_v1);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1} };
+    var RoRoI vl_wrong_values := { {2},{1,2},{1,2,3},{1,2,3,4,1000} }   //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v2() runs on MC {
+    log(tspt_recof_i_v2);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,3},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v2,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v3() runs on MC {
+    log(tspt_recof_i_v3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v3a() runs on MC {
+    log(tspt_recof_i_v3a);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v3a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v3q() runs on MC {
+    log(tspt_recof_i_v3q);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v3q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_vl3() runs on MC {
+    log(tspt_recof_i_vl3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3}, {2,2,3}, {1,2,4}, {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,5},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_vl3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_vl() runs on MC {
+    log(tspt_recof_i_vl);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3},  {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {2,2,3}, {1,2,4} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_vl,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_i_v10() runs on MC {
+    log(tspt_recof_i_v10);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3,4,5,6,7,8,9,10} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11}} //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v10,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_o() runs on MC {
+    log(tspt_recof_i_o);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := {};
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_o,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_a() runs on MC {
+    log(tspt_recof_i_a);
+    var RoRoI vl_good_values := {{}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_q() runs on MC {
+    log(tspt_recof_i_q);
+    var RoRoI vl_good_values := { {}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_r() runs on MC {
+    log(tspt_recof_i_r);
+    var RoRoI vl_good_values := { {1,1},{1,2},{1,3} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_r,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_c() runs on MC {
+    log(tspt_recof_i_c);
+    var RoRoI vl_good_values := { {1,0},{1,4},{1,5}} 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_c,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_i_lv() runs on MC {
+    log(tspt_recof_i_lv);
+    var RoRoI vl_good_values := { {0,1,0},{1,4,5},{1,5,-1},{1000,6000,700},{11,5,-3},{1,2,4}} 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3},{1,2,3,4,1000},{1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_lv,vl_good_values,vl_wrong_values);
+  }  
+
+  //length range
+  testcase tc_recordof_i_lr() runs on MC {
+    log(tspt_recof_i_lr);
+    var RoRoI vl_good_values := { {1,0,1},{1,2,3,4},{1,2,3,4,5},{-5,4,3,2,1}, {0,0,0} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3}, {1,2,3,4,1000,1001}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_lr,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_p() runs on MC {
+    log(tspt_recof_i_p);
+    var RoRoI vl_good_values := { {1,2,3,10},{1,3,2,10},{2,1,3,10},{2,3,1,10},{3,1,2,10},{3,2,1,10} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3},{11,5,-3},{1,2,4},{1,2,3,11}, {4,2,3,10},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_p,vl_good_values,vl_wrong_values);
+  }    
+
+  //====recordof templates modified from cfg file=====
+
+  testcase tc_recordof_i_mod4v0() runs on MC {
+    log(tspt_recof_i_mod4v0);
+    var RoI vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i }
+    var RoRoI vl_good_values := { {} }
+    var RoRoI vl_wrong_values := { {1},{2},{1,2,3},{1,2,3,4,1000}, vl_long } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v0,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v1() runs on MC {
+    log(tspt_recof_i_mod4v1);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1} };
+    var RoRoI vl_wrong_values := { {},{2},{1,2},{1,2,3},{1,2,3,4,1000} }   //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v2() runs on MC {
+    log(tspt_recof_i_mod4v2);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2} };
+    var RoRoI vl_wrong_values := { {},{1},{2},{2,3},{1,2,3},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v2,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v3() runs on MC {
+    log(tspt_recof_i_mod4v3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v3a() runs on MC {
+    log(tspt_recof_i_mod4v3a);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v3a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v3q() runs on MC {
+    log(tspt_recof_i_mod4v3q);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v3q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4vl3() runs on MC {
+    log(tspt_recof_i_mod4vl3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3}, {2,2,3}, {1,2,4}, {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,5},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4vl3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4vl() runs on MC {
+    log(tspt_recof_i_mod4vl);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3},  {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {2,2,3}, {1,2,4} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4vl,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_i_mod4v10() runs on MC {
+    log(tspt_recof_i_mod4v10);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3,4,5,6,7,8,9,10} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11}} //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v10,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4o() runs on MC {
+    log(tspt_recof_i_mod4o);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := {};
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4o,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4a() runs on MC {
+    log(tspt_recof_i_mod4a);
+    var RoRoI vl_good_values := {{}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4q() runs on MC {
+    log(tspt_recof_i_mod4q);
+    var RoRoI vl_good_values := { {}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4r() runs on MC {
+    log(tspt_recof_i_mod4r);
+    var RoRoI vl_good_values := { {1,1},{1,2},{1,3} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4r,vl_good_values,vl_wrong_values);
+  }
+
+  //fails
+  testcase tc_recordof_i_cu_noconfig() runs on MC {
+    var template RoI vlt := { permutation (1,2,3),10 }
+    log("Before mod: ",vlt);   //Before mod: { permutation(1, 2, 3), 10 }
+    vlt := { 1, complement(1,2,3),3,4 } ;
+    log("after mod: ",vlt); //after mod:  { permutation(1, complement(1, 2, 3), 3), 4 } but it should be { 1, complement(1,2,3),3,4 } 
+    var RoRoI vl_good_values := {{1,0,3,4},{1,4,3,4},{1,5,3,4},{1,-1,3,4}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1,3,4},{1,2,3,4},{1,3,3,4},{1,2,3,4},{1,3},{3,1,1,4} } 
+    f_checkMatchingValues_roi(vlt,vl_good_values,vl_wrong_values);
+  }
+
+  //fails
+  testcase tc_recordof_i_mod4c_undefined() runs on MC {
+    //original:
+    log(tspt_recof_i_mod4cu); //expected: { 1, complement(1,2,3),3,4 } , got:  { permutation(1, complement(1, 2, 3), 3), 4 }
+    var RoRoI vl_good_values :=   {{1,0,3,4},{1,4,3,4},{1,5,3,4},{1,-1,3,4}}
+    var RoRoI vl_wrong_values :=  { {}, {2},{1,1,3,4},{1,2,3,4},{1,3,3,4},{1,2,3,4},{1,3},{3,1,1,4} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4cu,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4c() runs on MC {
+    log(tspt_recof_i_mod4c);
+    var RoRoI vl_good_values := {{1,0,1,1},{1,4,1,1},{1,5,1,1}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4c,vl_good_values,vl_wrong_values);
+  }  
+
+  //3->3 elements
+  testcase tc_recordof_i_mod4cm1() runs on MC {
+    log(tspt_recof_i_mod4cm1);
+    var RoRoI vl_good_values := {{1,0,1},{1,4,1},{1,5,1}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4cm1,vl_good_values,vl_wrong_values);
+  }
+  //3->5 elements
+  testcase tc_recordof_i_mod4cm2() runs on MC {
+    log(tspt_recof_i_mod4cm2);
+    var RoRoI vl_good_values := {{1,0,1,1,1},{1,4,1,1,1},{1,5,1,1,1}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,10}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4cm2,vl_good_values,vl_wrong_values);
+  }
+  testcase tc_recordof_i_mod4lv() runs on MC {
+    log(tspt_recof_i_mod4lv);
+    var RoRoI vl_good_values := { {0,1,0},{1,4,5},{1,5,-1},{1000,6000,700},{11,5,-3},{1,2,4},{2,3,4}} 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{1,2,3,4,1000},{1,2,3,4,5,6,7,8,9,11}} 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4lv,vl_good_values,vl_wrong_values);
+  }  
+
+  //length range
+  testcase tc_recordof_i_mod4lr() runs on MC {
+    log(tspt_recof_i_mod4lr);
+    var RoRoI vl_good_values := { {1,0,1},{1,2,3,4},{1,2,3,4,5},{-5,4,3,2,1}, {0,0,0} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3}, {1,2,3,4,1000,1001}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4lr,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4p() runs on MC {
+    log(tspt_recof_i_mod4p);
+    var RoRoI vl_good_values := { {1,2,3,10},{1,3,2,10},{2,1,3,10},{2,3,1,10},{3,1,2,10},{3,2,1,10} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3},{11,5,-3},{1,2,4},{1,2,3,11}, {4,2,3,10},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4p,vl_good_values,vl_wrong_values);
+  } 
+
+  testcase tc_recordof_i_mod4rifp() runs on MC {
+    log(tspt_recof_i_mod4rifp);
+    var RoRoI vl_good_values := { {1,1},{1,2},{1,3} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4rifp,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4vlifp() runs on MC {
+    log(tspt_recof_i_mod4vlifp);
+    var RoRoI vl_good_values := { {1,2,3},{2,2,4} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4vlifp,vl_good_values,vl_wrong_values);
+  }
+  
+  //record of floats
+  testcase tc_recordof_f_ModulePar() runs on MC {
+
+    log(tspt_recof_f_v0);
+    if( log2str(tspt_recof_f_v0) != "{ }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v1);
+    if( log2str(tspt_recof_f_v1) != "{ 1.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v2);
+    if( log2str(tspt_recof_f_v2) != "{ 1.000000, 2.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v3);
+    if( log2str(tspt_recof_f_v3) != "{ 1.000000, 2.000000, 3.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v3a);
+    if( log2str(tspt_recof_f_v3a) != "{ 1.000000, *, 3.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v3q);
+    if( log2str(tspt_recof_f_v3q) != "{ 1.000000, ?, 3.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_vl3);
+    if( log2str(tspt_recof_f_vl3) != "{ (1.000000, 2.000000), 2.000000, (3.000000, 4.000000) }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v10);
+    if( log2str(tspt_recof_f_v10) != "{ 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000 }") {setverdict(fail) };
+    log(tspt_recof_f_o);
+    if( log2str(tspt_recof_f_o) != "omit") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_a);
+    if( log2str(tspt_recof_f_a) != "*") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_q);
+    if( log2str(tspt_recof_f_q) != "?") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_r);
+    if( log2str(tspt_recof_f_r) != "{ 1.000000, (1.000000 .. 3.000000) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_c);
+    if( log2str(tspt_recof_f_c) != "{ 1.000000, complement(1.000000, 2.000000, 3.000000) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_lv);
+    if( log2str(tspt_recof_f_lv) != "? length (3)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_lr);
+    if( log2str(tspt_recof_f_lr) != "? length (3 .. 5)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_p);
+    if( log2str(tspt_recof_f_p) != "{ permutation(1.000000, 2.000000, 3.000000), 10.000000 }") { setverdict(fail) } else { setverdict(pass) };
+  }
+
+  testcase tc_recordof_f_v0() runs on MC {
+    log(tspt_recof_f_v0);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {} }
+    var RoRoF vl_wrong_values := { {1.0},{2.0},{1.0,2.0,3.0},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v0,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_f_v1() runs on MC {
+    log(tspt_recof_f_v1);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {1.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{1.0,2.0,3.0},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v2() runs on MC {
+    log(tspt_recof_f_v2);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {1.0,2.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0,3.0},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v2,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v3() runs on MC {
+    log(tspt_recof_f_v3);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {1.0,2.0,3.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v3a() runs on MC {
+    log(tspt_recof_f_v3a);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {1.0,29.9,3.0}, {1.0,-29.9,3.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_v3a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v3q() runs on MC {
+    log(tspt_recof_f_v3q);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {1.0,29.9,3.0}, {1.0,-29.9,3.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_v3q,vl_good_values,vl_wrong_values);
+  }
+  testcase tc_recordof_f_vl3() runs on MC {
+    log(tspt_recof_f_vl3);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {2.0,2.0,3.0}, {1.0,2.0,4.0}, {2.0,2.0,4.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,5.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_vl3,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_f_vl() runs on MC {
+    log(tspt_recof_f_vl);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {2.0,2.0,4.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0},{1.0,2.0,4.0}, {2.0,3.0,4.0},{1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_vl,vl_good_values,vl_wrong_values);
+  }  
+  testcase tc_recordof_f_v10() runs on MC {
+    log(tspt_recof_f_v10);
+    var RoRoF vl_good_values := { {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0},{1.0,2.0,4.0}, {2.0,3.0,4.0},{1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_v10,vl_good_values,vl_wrong_values);
+  }
+  //TODO: record of charstring, bitstring etc + rec of type
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+   log("***record of tests****");
+  execute(tc_recordof_i_NoModulePar());
+  execute(tc_recordof_i_ModulePar());
+  execute(tc_recordof_i_v0());
+  execute(tc_recordof_i_v1());
+  execute(tc_recordof_i_v2());
+  execute(tc_recordof_i_v3());
+  execute(tc_recordof_i_v3a());
+  execute(tc_recordof_i_v3q());
+  execute(tc_recordof_i_vl3());
+  execute(tc_recordof_i_vl());
+  execute(tc_recordof_i_v10());
+  execute(tc_recordof_i_o());
+  execute(tc_recordof_i_a());
+  execute(tc_recordof_i_q());
+  execute(tc_recordof_i_r());
+  execute(tc_recordof_i_c());
+  execute(tc_recordof_i_lv());
+  execute(tc_recordof_i_lr());
+  execute(tc_recordof_i_p());
+
+  execute(tc_recordof_i_mod4v0());
+  execute(tc_recordof_i_mod4v1());
+  execute(tc_recordof_i_mod4v2());
+  execute(tc_recordof_i_mod4v3());
+  execute(tc_recordof_i_mod4v3a());
+  execute(tc_recordof_i_mod4v3q());
+  execute(tc_recordof_i_mod4vl3());
+  execute(tc_recordof_i_mod4vl());
+  execute(tc_recordof_i_mod4v10());
+  execute(tc_recordof_i_mod4o());
+  execute(tc_recordof_i_mod4a());
+  execute(tc_recordof_i_mod4q());
+  execute(tc_recordof_i_mod4r());
+  //execute(tc_recordof_i_cu_noconfig()); //fails, TR: HS10984
+  //execute(tc_recordof_i_mod4c_undefined()); //fails, TR: HS10984
+  execute(tc_recordof_i_mod4c());
+  execute(tc_recordof_i_mod4cm1());
+  execute(tc_recordof_i_mod4cm2());
+  execute(tc_recordof_i_mod4lv());
+  execute(tc_recordof_i_mod4lr());
+  execute(tc_recordof_i_mod4p());
+  execute(tc_recordof_i_mod4rifp());
+  execute(tc_recordof_i_mod4vlifp());
+
+  execute(tc_recordof_f_ModulePar());
+  execute(tc_recordof_f_v0());
+  execute(tc_recordof_f_v1());
+  execute(tc_recordof_f_v2());
+  execute(tc_recordof_f_v3());
+  execute(tc_recordof_f_v3a());
+  execute(tc_recordof_f_v3q());
+  execute(tc_recordof_f_vl3());
+  execute(tc_recordof_f_vl());
+  execute(tc_recordof_f_v10()); 
+}
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/set_test.ttcn b/Regression_Test_java/src/text2ttcn/set_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e77f48d9d22bff7a74c34d266448dbf9acc709b3
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/set_test.ttcn
@@ -0,0 +1,327 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module set_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  //set
+  template SET tspt_set_v0;
+  template SET tspt_set_v1:=  { b:=true };
+  template SET tspt_set_v2:=  { b:=true, cs:= "sth" }
+  template SET tspt_set_v3:=  { b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}
+  // these will be overwritten from cfg file:
+  template SET tspt_set_mod4v1 := omit;
+  template SET tspt_set_mod4v2 := omit;
+  template SET tspt_set_mod4v3 := omit;
+  template SET tspt_set_mod4a := omit;
+  template SET tspt_set_mod4q := omit;
+  template SET tspt_set_mod4o := *;
+  template SET tspt_set_mod4c0 := *;
+  template SET tspt_set_mod4c1 := *;
+  template SET tspt_set_mod4c2 := *;
+  template SET tspt_set_mod4c3 := *;
+}
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+testcase tc_set_ModulePar() runs on MC {
+  //values:
+  log(tspt_set_v0);   
+  if(log2str(tspt_set_v0) != "<uninitialized template>") {setverdict(fail) } else {setverdict(pass)}
+  log(tspt_set_v1);
+  if(log2str(tspt_set_v1) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> }") {setverdict(fail) } else {setverdict(pass)}
+  log(tspt_set_v2);
+  if(log2str(tspt_set_v2) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  log(tspt_set_v3);
+  if(log2str(tspt_set_v3) != "{ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  //jokers
+  if(log2str(tspt_set_mod4v1) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> }") {setverdict(fail) } else {setverdict(pass)}
+  if(log2str(tspt_set_mod4v2) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  if(log2str(tspt_set_mod4v3) != "{ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  if(log2str(tspt_set_mod4a) != "*") {setverdict(fail) } else {setverdict(pass)};
+  if(log2str(tspt_set_mod4q) != "?") {setverdict(fail) } else {setverdict(pass)};
+  if(log2str(tspt_set_mod4o) != "omit") {setverdict(fail) } else {setverdict(pass)};
+}
+
+testcase tc_set_ModulePar_emb() runs on MC {
+  @try {
+    log(t_rset(tspt_set_v0)); 
+  }
+  @catch( dte_message) {
+    if( match(dte_message, pattern "*Copying an uninitialized/unsupported template*" )) {setverdict(pass)} else {setverdict(fail)};
+  }
+  log(tspt_set_v1);
+  @try {
+    log(t_rset(tspt_set_v1)); 
+  }
+  @catch( dte_message) {
+    if( match(dte_message, pattern "*Copying an uninitialized/unsupported template*" )) {setverdict(pass)} else {setverdict(fail)};
+    log("Hi");
+  }
+  log("Bye");
+  //jokers:
+  log(t_rset(tspt_set_mod4v1));
+  if(log2str(t_rset(tspt_set_mod4v1)) == "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4v2));
+  if(log2str(t_rset(tspt_set_mod4v2)) == "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := \"sth\" } }" ) {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4a));
+  if(log2str(t_rset(tspt_set_mod4a)) == "{ s := * }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4q));
+  if(log2str(t_rset(tspt_set_mod4q)) == "{ s := ? }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4o));
+  if(log2str(t_rset(tspt_set_mod4o)) == "{ s := omit }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4c1));
+  if(log2str(t_rset(tspt_set_mod4c1)) == "{ s := complement({ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }) }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4c2));
+  if(log2str(t_rset(tspt_set_mod4c2)) == "{ s := complement({ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }, omit) }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4c3));
+  if(log2str(t_rset(tspt_set_mod4c3)) == "{ s := complement({ b := true, i := 0, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }, { b := true, i := 1, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }, { b := true, i := 2, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }) }") {setverdict(pass)} else {setverdict(fail)};
+}
+
+//rset
+//cfg: tspt_set_mod4v3 := { b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}
+testcase tc_set_mod4v3_emb() runs on MC {
+  log(t_rset(tspt_set_mod4v3));
+  var RoRSET vl_good_values := {
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,  cs:="sth" }},
+    {{ i:=99,   b:=true, f:=0.0, bs:=omit, os:='ABBA'O, hs:='ABC11'H,cs:="sth" }},
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:='EF'O,   hs:='D'H,    cs:="sth" }},
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:='ABBA'O,hs:='A'H, cs:="sth" }}
+  } 
+  var RoRSET vl_wrong_values := { 
+    {omit},
+    {{ b:=true, i:=omit, f:=0.0, bs:=omit, os:='FF'O,  hs:='0'H, cs:="sth" }},
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:=omit,   hs:=omit, cs:="sth" }},
+    {{b:=true, i:=99, f:=0.0, bs:='0110'B, os:='ABBA'O,hs:='A'H, cs:="sth" }}
+    
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4v3),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_set_mod4a_emb() runs on MC {
+  log(t_rset(tspt_set_mod4a));
+  var RoRSET vl_good_values := {
+    {omit},
+    {{ b:=omit, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,cs:="sth" }},
+    {{ i:=99, b:=true, f:=0.0, bs:=omit, os:='ABBA'O,hs:='ABC11'H,cs:="sth" }}
+  } 
+  var RoRSET vl_wrong_values := { } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4a),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_set_mod4q_emb() runs on MC {
+  log(t_rset(tspt_set_mod4q));
+  var RoRSET vl_good_values := {  	  	
+    {{ b:=omit, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,cs:="sth" }},
+    {{ i:=99, b:=true, f:=0.0, bs:=omit, os:='ABBA'O,hs:='ABC11'H,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:=omit,hs:=omit,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:='0110'B, os:='ABBA'O,hs:='A'H,cs:="sth" }}
+  } 
+  var RoRSET vl_wrong_values := {
+    {omit}     
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4q),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_set_mod4o_emb() runs on MC {
+  log(t_rset(tspt_set_mod4o));
+  var RoRSET vl_good_values := { 
+    {omit}   	  	
+  } 
+  var RoRSET vl_wrong_values := {
+    {{ b:=omit, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,cs:="sth" }},
+    {{ i:=99, b:=true, f:=0.0, bs:=omit, os:='ABBA'O,hs:='ABC11'H,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:=omit,hs:=omit,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:='0110'B, os:='ABBA'O,hs:='A'H,cs:="sth" }}  
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4o),vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//tspt_set_mod4c1 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99})
+testcase tc_set_mod4c1_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c1));
+  var RoRSET vl_good_values := {
+    {omit}, 	  	
+    {{ b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}}       
+  } 
+  var RoRSET vl_wrong_values := {
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}}   
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c1),vl_good_values,vl_wrong_values);
+}
+
+//tspt_set_mod4c2 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}, omit)
+testcase tc_set_mod4c2_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c2));
+  var RoRSET vl_good_values := { 	  	
+    {{ b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}}       
+  } 
+  var RoRSET vl_wrong_values := {
+    { omit },
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}}   
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c2),vl_good_values,vl_wrong_values);
+}
+//complement(omit)
+testcase tc_set_mod4c0_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c0));
+  var RoRSET vl_good_values := { 	  	
+    {{ b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}}        
+  } 
+  var RoRSET vl_wrong_values := {
+    { omit }
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c0),vl_good_values,vl_wrong_values);
+}
+//tspt_set_mod4c3 := 
+//complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=0},
+//{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=1},{ b:=true,i:=2, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?})
+
+testcase tc_set_mod4c3_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c3));
+  var RoRSET vl_good_values := { 	  	
+    {{ b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=98}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}}       
+  } 
+  var RoRSET vl_wrong_values := {       
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=0}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=1}},
+    {{ b:=true,i:=2, cs:= "sth", f:=0.0, bs:=omit, os:='01'O,hs:='A'H}}
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c3),vl_good_values,vl_wrong_values);
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("***set tests *********");
+  execute(tc_set_ModulePar());
+  execute(tc_set_ModulePar_emb());
+  execute(tc_set_mod4v3_emb());
+  execute(tc_set_mod4a_emb());
+  execute(tc_set_mod4q_emb());
+  execute(tc_set_mod4o_emb());
+  execute(tc_set_mod4c1_emb());
+  execute(tc_set_mod4c2_emb());
+  execute(tc_set_mod4c0_emb());
+  execute(tc_set_mod4c3_emb()); 
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/setof_test.ttcn b/Regression_Test_java/src/text2ttcn/setof_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..1e71400e24afb8c0fb8659f1fbda93dca3c1988f
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/setof_test.ttcn
@@ -0,0 +1,314 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module setof_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //set of
+  template SoCS tspt_setof_mod4v1 := omit;
+  template SoCS tspt_setof_mod4v2 := omit;
+  template SoCS tspt_setof_mod4v3 := omit;
+  template SoCS tspt_setof_mod4a := omit;
+  template SoCS tspt_setof_mod4q := omit;
+  template SoCS tspt_setof_mod4o := *;
+  template SoCS tspt_setof_mod4c0 := *;
+  template SoCS tspt_setof_mod4c1 := *;
+  template SoCS tspt_setof_mod4c2 := *;
+  template SoCS tspt_setof_mod4c3 := *;
+  template SoCS tspt_setof_mod4vl := *;
+  
+  template SoCS tspt_setof_mod4v1ifp := omit;
+  template SoCS tspt_setof_mod4v2ifp := omit;
+  template SoCS tspt_setof_mod4v3ifp := omit;
+  template SoCS tspt_setof_mod4aifp := omit;
+  template SoCS tspt_setof_mod4qifp := omit;
+  template SoCS tspt_setof_mod4oifp := *;
+  template SoCS tspt_setof_mod4c0ifp := *;
+  template SoCS tspt_setof_mod4c1ifp := *;
+  template SoCS tspt_setof_mod4c2ifp := *;
+  template SoCS tspt_setof_mod4c3ifp := *;
+  template SoCS tspt_setof_mod4vlifp := *;
+  template SoCS tspt_setof_mod4superset := *;
+  template SoCS tspt_setof_mod4supersetifp := *;
+  template SoCS tspt_setof_mod4supersetl3 := *;
+  template SoCS tspt_setof_mod4supersetl1_3 := *;
+  template SoCS tspt_setof_mod4supersetl3ifp := *;
+  template SoCS tspt_setof_mod4subset := *;
+  template SoCS tspt_setof_mod4subsetifp := *;
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+testcase tc_setof_ModulePar() runs on MC {
+  log(log2str(tspt_setof_mod4v1));
+  if( log2str(tspt_setof_mod4v1) == "{ \"a\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v2));
+  if( log2str(tspt_setof_mod4v2) == "{ \"a\", \"b\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v3));
+  if( log2str(tspt_setof_mod4v3) == "{ \"a\", \"b\", \"c\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4a));
+  if( log2str(tspt_setof_mod4a) == "*") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4q));
+  if( log2str(tspt_setof_mod4q) == "?") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4o));
+  if( log2str(tspt_setof_mod4o) == "omit") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c0));
+  if( log2str(tspt_setof_mod4c0) == "{ complement(omit) }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c1));
+  if( log2str(tspt_setof_mod4c1) == "{ complement(\"a\"), \"b\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c2));
+  if( log2str(tspt_setof_mod4c2) == "{ complement(\"a\", \"b\"), \"c\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c3));
+  if( log2str(tspt_setof_mod4c3) == "complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" })") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4vl));
+  if( log2str(tspt_setof_mod4vl) == "{ (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") }") { setverdict(pass)} else { setverdict(fail) };
+  log(log2str(tspt_setof_mod4superset));
+  if( log2str(tspt_setof_mod4superset) == "superset(\"a\", \"b\")") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetl3));
+  if( log2str(tspt_setof_mod4supersetl3) == "superset(\"a\", \"b\") length (3)") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetl1_3));
+  if( log2str(tspt_setof_mod4supersetl1_3) == "superset(\"a\", \"b\") length (1 .. 3)") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4subset));
+  if( log2str(tspt_setof_mod4subset) == "subset(\"a\", \"b\")") { setverdict(pass)} else { setverdict(fail) }
+  
+  log(log2str(tspt_setof_mod4v1ifp));
+  if( log2str(tspt_setof_mod4v1ifp) == "{ \"a\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v2ifp));
+  if( log2str(tspt_setof_mod4v2ifp) == "{ \"a\", \"b\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v3ifp));
+  if( log2str(tspt_setof_mod4v3ifp) == "{ \"a\", \"b\", \"c\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4aifp));
+  if( log2str(tspt_setof_mod4aifp) == "* ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4qifp));
+  if( log2str(tspt_setof_mod4qifp) == "? ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4oifp));
+  if( log2str(tspt_setof_mod4oifp) == "omit ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c0ifp));
+  if( log2str(tspt_setof_mod4c0ifp) == "{ complement(omit) } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c1ifp));
+  if( log2str(tspt_setof_mod4c1ifp) == "{ complement(\"a\"), \"b\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c2ifp));
+  if( log2str(tspt_setof_mod4c2ifp) == "{ complement(\"a\", \"b\"), \"c\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c3ifp));
+  if( log2str(tspt_setof_mod4c3ifp) == "complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" }) ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4vlifp));
+  if( log2str(tspt_setof_mod4vlifp) == "{ (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetifp));
+  if( log2str(tspt_setof_mod4supersetifp) == "superset(\"a\", \"b\") ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetl3ifp));
+  if( log2str(tspt_setof_mod4supersetl3ifp) == "superset(\"a\", \"b\") length (3) ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4subsetifp));
+  if( log2str(tspt_setof_mod4subsetifp) == "subset(\"a\", \"b\") ifpresent") { setverdict(pass)} else { setverdict(fail) }
+}
+
+testcase tc_setof_ModulePar_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4v1)));
+  if( log2str(t_rsocs(tspt_setof_mod4v1)) == "{ s := { \"a\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v2)));
+  if( log2str(t_rsocs(tspt_setof_mod4v2)) == "{ s := { \"a\", \"b\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v3)));
+  if( log2str(t_rsocs(tspt_setof_mod4v3)) == "{ s := { \"a\", \"b\", \"c\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4a)));
+  if( log2str(t_rsocs(tspt_setof_mod4a)) == "{ s := * }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4q)));
+  if( log2str(t_rsocs(tspt_setof_mod4q)) == "{ s := ? }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4o)));
+  if( log2str(t_rsocs(tspt_setof_mod4o)) == "{ s := omit }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c0)));
+  if( log2str(t_rsocs(tspt_setof_mod4c0)) == "{ s := { complement(omit) } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c1)));
+  if( log2str(t_rsocs(tspt_setof_mod4c1)) == "{ s := { complement(\"a\"), \"b\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c2)));
+  if( log2str(t_rsocs(tspt_setof_mod4c2)) == "{ s := { complement(\"a\", \"b\"), \"c\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c3)));
+  if( log2str(t_rsocs(tspt_setof_mod4c3)) == "{ s := complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" }) }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4vl)));
+  if( log2str(t_rsocs(tspt_setof_mod4vl)) == "{ s := { (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4superset)));
+  if( log2str(t_rsocs(tspt_setof_mod4superset)) == "{ s := superset(\"a\", \"b\") }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl3)));
+  if( log2str(t_rsocs(tspt_setof_mod4supersetl3)) == "{ s := superset(\"a\", \"b\") length (3) }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4subset)));
+  if( log2str(t_rsocs(tspt_setof_mod4subset)) == "{ s := subset(\"a\", \"b\") }") { setverdict(pass)} else { setverdict(fail) }
+  
+  
+  log(log2str(t_rsocs(tspt_setof_mod4v1ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4v1ifp)) == "{ s := { \"a\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v2ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4v2ifp)) == "{ s := { \"a\", \"b\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v3ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4v3ifp)) == "{ s := { \"a\", \"b\", \"c\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4aifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4aifp)) == "{ s := * ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4qifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4qifp)) == "{ s := ? ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4oifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4oifp)) == "{ s := omit ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c0ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c0ifp)) == "{ s := { complement(omit) } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c1ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c1ifp)) == "{ s := { complement(\"a\"), \"b\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c2ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c2ifp)) == "{ s := { complement(\"a\", \"b\"), \"c\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c3ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c3ifp)) == "{ s := complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" }) ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4vlifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4vlifp)) == "{ s := { (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4supersetifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4supersetifp)) == "{ s := superset(\"a\", \"b\") ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl3ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4supersetl3ifp)) == "{ s := superset(\"a\", \"b\") length (3) ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4subsetifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4subsetifp)) == "{ s := subset(\"a\", \"b\") ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  
+}
+
+testcase tc_setof_mod4vlifp_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4vlifp)));
+  var RoRSoCS  vl_good_values := {{s:=omit}, {s:={"a","cica"} }}
+  var RoRSoCS vl_wrong_values := { {{"c","cica"}}  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4vlifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4superset_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4superset)));
+  var RoRSoCS  vl_good_values := { {s:={"a","cica","b"} }, {s:={"a","b"} } ,  {s:={"a","b","a", "d", "anything"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}, {{"a","c","anyth"}} }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4superset),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4supersetl3_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl3)));
+  var RoRSoCS  vl_good_values := { {s:={"a","cica","b"} },  {s:={"a","b","a"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}, {s:={"a","b","c","dada"} }  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4supersetl3),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4supersetl1_3_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl1_3)));
+  var RoRSoCS  vl_good_values := { {s:={"a","cica","b"} },  {s:={"a","b","a"} }, {s:={"a","b"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}, {s:={"a","b","c","dada"} } }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4supersetl1_3),vl_good_values,vl_wrong_values);
+}
+
+
+testcase tc_setof_mod4supersetifp_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4supersetifp)));
+  var RoRSoCS  vl_good_values := {{s:=omit}, {s:={"a","cica","b"} },  {s:={"a","b"} },  {s:={"a","b","b"} } }
+  var RoRSoCS vl_wrong_values := { {{"a","cica"}}  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4supersetifp),vl_good_values,vl_wrong_values);
+}  
+
+testcase tc_setof_mod4subset_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4subset)));
+  var RoRSoCS  vl_good_values := { {s:={}}, {s:={"a"}}, {s:={"b"}}, {s:={"a","b"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4subset),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4subsetifp_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4subsetifp)));
+  var RoRSoCS  vl_good_values := {{s:=omit}, {s:={}},{s:={"a"}}, {s:={"b"}}, {s:={"a","b"}} }
+  var RoRSoCS vl_wrong_values := { {{"a","cica"}},   {{"a","cica","b"}} }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4subsetifp),vl_good_values,vl_wrong_values);
+}  
+//TODO: matching tests
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+ log("***set of tests ******");
+  execute(tc_setof_ModulePar());
+  execute(tc_setof_ModulePar_emb());
+  execute(tc_setof_mod4vlifp_emb());
+  execute(tc_setof_mod4superset_emb());
+  execute(tc_setof_mod4supersetl3_emb());
+  execute(tc_setof_mod4supersetl1_3_emb());
+  execute(tc_setof_mod4supersetifp_emb());
+  execute(tc_setof_mod4subset_emb());
+  execute(tc_setof_mod4subsetifp_emb());
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn/text2ttcn_1.cfg b/Regression_Test_java/src/text2ttcn/text2ttcn_1.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..19a0e7119b7d8825ed353100c42064b637c78731
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/text2ttcn_1.cfg
@@ -0,0 +1,508 @@
+###############################################################################
+# Copyright (c) 2000-2019 Ericsson Telecom AB
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+#
+# Contributors:
+#   Balasko, Jeno
+#   Baranyi, Botond
+#
+###############################################################################
+[LOGGING]
+SourceInfoFormat := Stack
+
+[MODULE_PARAMETERS]
+
+#boolean
+tspt_b_a1 := true
+tspt_b_a2 := false
+tspt_b_a3 := omit
+tspt_b_a4 := *
+tspt_b_a5 := ?
+tspt_b_a6 := true ifpresent
+tspt_b_a7 := false ifpresent
+tspt_b_a8 := * ifpresent
+tspt_b_a9 := ? ifpresent
+tspt_b_a10 := (true,false)
+tspt_b_a11 := complement(true)
+
+#tspt_b_err := xy //error
+#tspt_b_err := "apple"
+#tspt_b_err := 'apple2'
+#tspt_b_err := 12
+
+#Type: integer
+tspt_i1 := 9
+tspt_i2 := omit
+tspt_i3 := *
+tspt_i4 := ? 
+tspt_i5 := (0,1,-1)
+tspt_i6 := 9 ifpresent
+tspt_i7 := omit ifpresent 
+tspt_i8 := * ifpresent
+tspt_i9 := ? ifpresent
+tspt_i10 := (0,1,-1) ifpresent
+tspt_i11 := complement(9)
+#value list:
+#tspt_i_vl := (0,1,-1)
+
+#Tpe:float
+tspt_f1 := 9.00
+tspt_f2 := omit
+tspt_f3 := *
+tspt_f4 := ?
+tspt_f_mod4vl1 := (0.0)
+tspt_f_mod4vl3 := (0.0, 1.2, -1.9)
+tspt_f6 := 9.00 ifpresent
+tspt_f7 := omit ifpresent
+tspt_f8 := * ifpresent
+tspt_f9 := ? ifpresent
+tspt_f10 := (0.0, 1.2, -1.9) ifpresent
+tspt_f11 := complement(9.000)
+tspt_f12 := complement(9.000) ifpresent
+tspt_f13 := (-1.9..3.1) 
+tspt_f14 := (-1.9..3.1) ifpresent
+#Type: bitstring
+
+tspt_bs_mod4v := '01101'B;
+ tspt_bs_mod4o := omit;
+ tspt_bs_mod4a := *;
+ tspt_bs_mod4q := ?;
+ tspt_bs_mod4al1 := * length(2); //length restriction
+ tspt_bs_mod4al2 := * length(2..4);
+ tspt_bs_mod4ql1 := ? length(2);
+ tspt_bs_mod4ql2 := ? length(2..4);
+ //tspt_bs_mod4vl1 := ('01101'B);  //TODO for Adam: in line xx, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_bs_mod4vl2 := ('01101'B,'1010'B); 
+ tspt_bs_mod4vl3 := ('01101'B,'1010'B,'101'B);
+ tspt_bs_mod4c1 := complement('01101'B)
+ tspt_bs_mod4c2 := complement('01101'B,'1010'B);
+ tspt_bs_mod4c3 := complement('01101'B,'1010'B,'101'B);
+ //tspt_bs_mod4r1 := ("A".."B"); //range not allowed
+ //tspt_bs_mod4r2 := ("a".."c"); //range not allowed
+ tspt_bs_mod4pa := '000*111'B
+ tspt_bs_mod4pq := '000?111'B
+
+ tspt_bs_mod4vifp := '01101'B ifpresent;
+ tspt_bs_mod4oifp := omit ifpresent;
+ tspt_bs_mod4aifp := * ifpresent;
+ tspt_bs_mod4qifp := ? ifpresent;
+ tspt_bs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_bs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_bs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_bs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_bs_mod4vl1ifp := ('01101'B) ifpresent; //TODO for Adam: in line yy, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_bs_mod4vl2ifp := ('01101'B,'1010'B) ifpresent;
+ tspt_bs_mod4vl3ifp := ('01101'B,'1010'B,'101'B) ifpresent;
+ tspt_bs_mod4c1ifp := complement('01101'B) ifpresent
+ tspt_bs_mod4c2ifp := complement('01101'B,'1010'B) ifpresent;
+ tspt_bs_mod4c3ifp := complement('01101'B,'1010'B,'101'B) ifpresent;
+ //tspt_bs_mod4r1ifp := ('A'B .. 'B'B) ifpresent; //range not allowed
+ //tspt_bs_mod4r2ifp := ('a'B ..'c'B) ifpresent;//range not allowed
+ tspt_bs_mod4paifp := '000*111'B  ifpresent
+ tspt_bs_mod4pqifp := '000?111'B  ifpresent
+ 
+
+#Type: octetstring
+ tspt_os_mod4v := 'ABBA'O;
+ tspt_os_mod4o := omit;
+ tspt_os_mod4a := *;
+ tspt_os_mod4q := ?;
+ tspt_os_mod4al1 := * length(2); //length restriction
+ tspt_os_mod4al2 := * length(2..4);
+ tspt_os_mod4ql1 := ? length(2);
+ tspt_os_mod4ql2 := ? length(2..4);
+ //tspt_os_mod4vl1 := ('ABBA'O);  //TODO for Adam: in line xx, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_os_mod4vl2 := ('ABBA'O,'baba'O); 
+ tspt_os_mod4vl3 := ('ABBA'O,'baba'O,'B120'O);
+ tspt_os_mod4c1 := complement('ABBA'O)
+ tspt_os_mod4c2 := complement('ABBA'O,'baba'O);
+ tspt_os_mod4c3 := complement('ABBA'O,'baba'O,'B120'O);
+ //tspt_os_mod4r1 := ("A".."B"); //range not allowed
+ //tspt_os_mod4r2 := ("a".."c"); //range not allowed
+ tspt_os_mod4pa := 'abcd*1234'O
+ tspt_os_mod4pq := 'abcd?1234'O
+
+ tspt_os_mod4vifp := 'ABBA'O ifpresent;
+ tspt_os_mod4oifp := omit ifpresent;
+ tspt_os_mod4aifp := * ifpresent;
+ tspt_os_mod4qifp := ? ifpresent;
+ tspt_os_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_os_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_os_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_os_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_os_mod4vl1ifp := ('ABBA'O) ifpresent; //TODO for Adam: in line yy, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_os_mod4vl2ifp := ('ABBA'O,'baba'O) ifpresent;
+ tspt_os_mod4vl3ifp := ('ABBA'O,'baba'O,'B120'O) ifpresent;
+ tspt_os_mod4c1ifp := complement('ABBA'O) ifpresent
+ tspt_os_mod4c2ifp := complement('ABBA'O,'baba'O) ifpresent;
+ tspt_os_mod4c3ifp := complement('ABBA'O,'baba'O,'B120'O) ifpresent;
+ //tspt_os_mod4r1ifp := ('A'O..'B'O) ifpresent; //range not allowed
+ //tspt_os_mod4r2ifp := ('a'O..'c'O) ifpresent;//range not allowed
+ tspt_os_mod4paifp := 'abcd*1234'O  ifpresent
+ tspt_os_mod4pqifp := 'abcd?1234'O  ifpresent
+
+#Type: hexstring
+
+ tspt_hs_mod4v := 'ABBA'H;
+ tspt_hs_mod4o := omit;
+ tspt_hs_mod4a := *;
+ tspt_hs_mod4q := ?;
+ tspt_hs_mod4al1 := * length(2); //length restriction
+ tspt_hs_mod4al2 := * length(2..4);
+ tspt_hs_mod4ql1 := ? length(2);
+ tspt_hs_mod4ql2 := ? length(2..4);
+ //tspt_hs_mod4vl1 := ('ABBA'H);  //TODO for Adam: in line xx, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_hs_mod4vl2 := ('ABBA'H,'baba'H); 
+ tspt_hs_mod4vl3 := ('ABBA'H,'baba'H,'B12'H);
+ tspt_hs_mod4c1 := complement('ABBA'H)
+ tspt_hs_mod4c2 := complement('ABBA'H,'baba'H);
+ tspt_hs_mod4c3 := complement('ABBA'H,'baba'H,'B12'H);
+ //tspt_hs_mod4r1 := ("A".."B"); //range not allowed
+ //tspt_hs_mod4r2 := ("a".."c"); //range not allowed
+ tspt_hs_mod4pa := 'abc*123'H
+ tspt_hs_mod4pq := 'abc?123'H
+
+ tspt_hs_mod4vifp := 'ABBA'H ifpresent;
+ tspt_hs_mod4oifp := omit ifpresent;
+ tspt_hs_mod4aifp := * ifpresent;
+ tspt_hs_mod4qifp := ? ifpresent;
+ tspt_hs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_hs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_hs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_hs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_hs_mod4vl1ifp := ('ABBA'H) ifpresent; //TODO for Adam: in line yy, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_hs_mod4vl2ifp := ('ABBA'H,'baba'H) ifpresent;
+ tspt_hs_mod4vl3ifp := ('ABBA'H,'baba'H,'B12'H) ifpresent;
+ tspt_hs_mod4c1ifp := complement('ABBA'H) ifpresent
+ tspt_hs_mod4c2ifp := complement('ABBA'H,'baba'H) ifpresent;
+ tspt_hs_mod4c3ifp := complement('ABBA'H,'baba'H,'B12'H) ifpresent;
+ //tspt_hs_mod4r1ifp := ('A'H..'B'H) ifpresent; //range not allowed
+ //tspt_hs_mod4r2ifp := ('a'H..'c'H) ifpresent;//range not allowed
+ tspt_hs_mod4paifp := 'abc*123'H  ifpresent
+ tspt_hs_mod4pqifp := 'abc?123'H  ifpresent
+ 
+#Type: charstring
+ tspt_cs_mod4v := "ABBA";
+ tspt_cs_mod4o := omit;
+ tspt_cs_mod4ol := omit length(2);
+ tspt_cs_mod4a := *;
+ tspt_cs_mod4q := ?;
+ tspt_cs_mod4al1 := * length(2); //length restriction
+ tspt_cs_mod4al2 := * length(2..4);
+ tspt_cs_mod4ql1 := ? length(2);
+ tspt_cs_mod4ql2 := ? length(2..4);
+ //tspt_cs_mod4vl1 := ("ABBA");  //TODO for Adam: in line 67, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_cs_mod4vl2 := ("ABBA","baba"); 
+ tspt_cs_mod4vl3 := ("ABBA","baba","Bye");
+ tspt_cs_mod4c1 := complement("ABBA")
+ tspt_cs_mod4c2 := complement("ABBA","baba");
+ tspt_cs_mod4c3 := complement("ABBA","baba","Bye");
+ tspt_cs_mod4r1 := ("A".."B"); //range
+ tspt_cs_mod4r2 := ("a".."c");
+ tspt_cs_mod4pa := pattern "abc*xyz"
+ tspt_cs_mod4pq := pattern "abc?xyz"
+
+ tspt_cs_mod4vifp := "ABBA" ifpresent;
+ tspt_cs_mod4oifp := omit ifpresent;
+ tspt_cs_mod4aifp := * ifpresent;
+ tspt_cs_mod4qifp := ? ifpresent;
+ tspt_cs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_cs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_cs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_cs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_cs_mod4vl1ifp := ("ABBA") ifpresent; //TODO for Adam: in line 86, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_cs_mod4vl2ifp := ("ABBA","baba") ifpresent;
+ tspt_cs_mod4vl3ifp := ("ABBA","baba","Bye") ifpresent;
+ tspt_cs_mod4c1ifp := complement("ABBA") ifpresent
+ tspt_cs_mod4c2ifp := complement("ABBA","baba") ifpresent;
+ tspt_cs_mod4c3ifp := complement("ABBA","baba","Bye") ifpresent;
+ tspt_cs_mod4r1ifp := ("A".."B") ifpresent; //range
+ tspt_cs_mod4r2ifp := ("a".."c") ifpresent;
+ tspt_cs_mod4paifp := pattern "abc*xyz"  ifpresent
+ tspt_cs_mod4pqifp := pattern "abc?xyz"  ifpresent  
+ 
+#type: universal charstring
+ tspt_ucs_mod4v := "ABBA";
+ tspt_ucs_mod4o := omit;
+ tspt_ucs_mod4ol := omit length(2);
+ tspt_ucs_mod4a := *;
+ tspt_ucs_mod4q := ?;
+ tspt_ucs_mod4al1 := * length(2); //length restriction
+ tspt_ucs_mod4al2 := * length(2..4);
+ tspt_ucs_mod4ql1 := ? length(2);
+ tspt_ucs_mod4ql2 := ? length(2..4);
+ //tspt_ucs_mod4vl1 := ("ABBA");  //TODO for Adam: in line 67, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_ucs_mod4vl2 := ("Ádám","Éva"); 
+ tspt_ucs_mod4vl3 := ("ABBA","baba","Bye");
+ tspt_ucs_mod4c1 := complement("ABBA")
+ tspt_ucs_mod4c2 := complement("ABBA","baba");
+ tspt_ucs_mod4c3 := complement("ABBA","baba","Bye");
+ tspt_ucs_mod4r1 := ("A".."B"); //range
+ tspt_ucs_mod4r2 := ("a".."c");
+ tspt_ucs_mod4pa := pattern "abc*xyz"
+ tspt_ucs_mod4pq := pattern "abc?xyz"
+
+ tspt_ucs_mod4vifp := "ABBA" ifpresent;
+ tspt_ucs_mod4oifp := omit ifpresent;
+ tspt_ucs_mod4aifp := * ifpresent;
+ tspt_ucs_mod4qifp := ? ifpresent;
+ tspt_ucs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_ucs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_ucs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_ucs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_ucs_mod4vl1ifp := ("ABBA") ifpresent; //TODO for Adam: in line 86, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_ucs_mod4vl2ifp := ("ABBA","baba") ifpresent;
+ tspt_ucs_mod4vl3ifp := ("ABBA","baba","Bye") ifpresent;
+ tspt_ucs_mod4c1ifp := complement("ABBA") ifpresent
+ tspt_ucs_mod4c2ifp := complement("ABBA","baba") ifpresent;
+ tspt_ucs_mod4c3ifp := complement("ABBA","baba","Bye") ifpresent;
+ tspt_ucs_mod4r1ifp := ("A".."B") ifpresent; //range
+ tspt_ucs_mod4r2ifp := ("a".."c") ifpresent;
+ tspt_ucs_mod4paifp := pattern "abc*xyz"  ifpresent
+ tspt_ucs_mod4pqifp := pattern "abc?xyz"  ifpresent  
+ 
+
+############### Type:REC ####################################
+tspt_rec_mod4empty := {}
+tspt_rec_mod4v := {1,1.0,"ABBA",'0100'B}
+tspt_rec_mod4a := *;
+tspt_rec_mod4q := ?;
+tspt_rec_mod4o := omit;
+tspt_rec_mod4vr := { (1..2), ?, "ABBA", '0100'B } //not final value!
+tspt_rec_mod4vl2x2 := { 1, 1.0, ("ABBA","baba"),('0100'B,'01001'B) }
+tspt_rec_mod4omitx4 := { omit, omit, omit, omit }
+tspt_rec_mod4r := ({1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B})
+tspt_rec_mod4vr := {1,1.0,("ABBA","baba"),'0100'B}
+tspt_rec_mod4c := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+tspt_rec_mod4vl := { 1, -,("ABBA","baba"), -}
+tspt_rec_mod4vq := { ?, -,-, '0100'B}
+
+tspt_rec_mod4cspattern := { *, -,pattern "abc*xyz", '0100'B}
+
+tspt_rec_mod4cspatternbs := { cs := pattern "abc*xyz"}
+tspt_rec_mod4cspatternbs := { bs := '0100'B}
+
+tspt_rec_mod4cspatternbs2 := { i := -, f := -, cs := pattern "abc*xyz", bs:= '0100'B }
+
+tspt_mod4pattern_mixed_order := {  f := -, cs := pattern "abc*xyz", bs:= '0100'B, i := - }
+//== ifpresent
+tspt_rec_mod4emptyifp := {} ifpresent
+tspt_rrec_mod4emptyifp := { rec:= {} ifpresent }
+tspt_rec_mod4vifp := {1 ifpresent,1.0 ifpresent,"ABBA" ifpresent,'0100'B ifpresent}
+tspt_rec_mod4aifp := * ifpresent; //???? TR ???
+tspt_rec_mod4qifp := ? ifpresent; //???? TR ???
+tspt_rec_mod4oifp := omit ifpresent; //???? TR ???
+tspt_rec_mod4vrifp := { (1..2) ifpresent, ? ifpresent, "ABBA" ifpresent, '0100'B ifpresent }
+tspt_rec_mod4vl2x2ifp := { 1 ifpresent, 1.0 ifpresent, ("ABBA" ifpresent,"baba" ifpresent),('0100'B,'01001'B) ifpresent }
+tspt_rec_mod4omitx4ifp := { omit, omit, omit, omit } ifpresent
+tspt_rec_mod4rifp := ({1 ifpresent,1.0 ifpresent,"ABBA" ifpresent,'0100'B ifpresent}, {2,2.0,"baba",'01001'B})
+tspt_rec_mod4cifp := complement( {1 ifpresent,1.0 ifpresent,("ABBA","baba") ifpresent,'0100'B ifpresent} )
+tspt_rec_mod4vlifp := { 1 ifpresent, -,("ABBA","baba") ifpresent, -}
+tspt_rec_mod4vqifp := { ?, -,-, '0100'B ifpresent}
+
+tspt_rec_mod4cspatternifp := { * ifpresent, -,pattern "abc*xyz" ifpresent, '0100'B ifpresent}
+
+tspt_rec_mod4cspatternbsifp := { cs := pattern "abc*xyz" ifpresent}
+tspt_rec_mod4cspatternbsifp := { bs := '0100'B ifpresent}
+
+tspt_rec_mod4cspatternbs2ifp := { i := -, f := -, cs := pattern "abc*xyz" ifpresent, bs:= '0100'B ifpresent}
+
+tspt_mod4pattern_mixed_orderifp := {  f := -, cs := pattern "abc*xyz" ifpresent, bs:= '0100'B ifpresent, i := - }
+//==
+#Type: REC2
+tspt_REC2_2 := {-,-}
+tspt_REC2_3 := { *, -, 2 ifpresent }
+tspt_REC2_4 := { b:=?,  cs:=-} //ugly spacing:)
+tspt_REC2_5 := { b:=?, cs:= ? length(1), i := * }
+
+#Type: record of
+tspt_recof_i_mod4v0 := {};
+tspt_recof_i_mod4v1 := {1};
+tspt_recof_i_mod4v2 := {1,2};
+tspt_recof_i_mod4v3 := {1,2,3};
+tspt_recof_i_mod4v3a := {1,*,3};
+tspt_recof_i_mod4v3q := {1,?,3};
+tspt_recof_i_mod4vl3 := {(1,2),2,(3,4)}; //value list
+tspt_recof_i_mod4vl  :=  ( {1,2,3}, {2,2,4} )
+tspt_recof_i_mod4v10 := {1,2,3,4,5,6,7,8,9,10};
+tspt_recof_i_mod4o := omit;
+tspt_recof_i_mod4a := *;
+tspt_recof_i_mod4q := ?;
+tspt_recof_i_mod4r := {1,(1..3)}; //range
+//tspt_recof_i_mod4cu :=  { 1, complement(1,2,3) } //3->2 elements --undefined behavior, result: { permutation(1, complement(1, 2, 3) }
+tspt_recof_i_mod4cu :=  { 1, complement(1,2,3),3,4 } //3->2 elements --undefined behavior, result: { permutation(1, complement(1, 2, 3) }
+tspt_recof_i_mod4c :=   { 1, complement(1,2,3),1,1 } //3->4 elements
+tspt_recof_i_mod4cm1 := { 1, complement(1,2,3),1} //3->3 elements
+tspt_recof_i_mod4cm2 := { 1, complement(1,2,3),1,1,1} //3->5 elements
+tspt_recof_i_mod4lv := ? length(3)
+tspt_recof_i_mod4lr := ? length(3..5)  //length range
+tspt_recof_i_mod4p := { permutation( 1, 2, 3), 10 }
+tspt_recof_i_mod4rifp := {1,(1..3)} ifpresent
+tspt_recof_i_mod4vlifp  :=  ( {1,2,3}, {2,2,4} ) ifpresent
+
+#type: array
+tspt_array_i3_mod4a := *
+tspt_array_i3_mod4q := ?
+tspt_array_i3_mod4o := omit  
+tspt_array_i3_mod4v0 := {-,-,-}
+tspt_array_i3_mod4v1:= {1,-,-}
+tspt_array_i3_mod4v2:= {1,2,-}
+tspt_array_i3_mod4v3v := {0, 1, 2}
+//tspt_array_i3_mod4v4 := {0, 1, 2, 3} 
+tspt_array_i3_mod4v3a := {0, *, 2}
+tspt_array_i3_mod4v3q := {?, 1, 2}
+//tspt_array_i3_mod4v3o := {omit, 1, 2} //error
+tspt_array_i3_mod4v3vl := {0, 1, (1,2)} //value list
+tspt_array_i3_mod4vl := ( {0,1,2},{9,10,11})
+tspt_array_i3_mod4v3r := {0, 1, (1..3)} //range
+tspt_array_i3_mod4v3mix := {(0,1), 1, (1..3)}
+tspt_array_i3_mod4v3c := {(0,1), 1, complement(2,3)}
+tspt_array_i3_mod4field1 := {0, -, -}
+
+tspt_array_i3_mod4aifp  := * ifpresent
+tspt_array_i3_mod4qifp  := ? ifpresent
+tspt_array_i3_mod4v0ifp := omit  ifpresent   //not error ?
+tspt_array_i3_mod4v1ifp := {1} ifpresent   //not error
+tspt_array_i3_mod4v2ifp := {1,2} ifpresent //noterror
+tspt_array_i3_mod4v3vifp := {0, 1, 2} ifpresent
+//tspt_array_i3_mod4v4 := {0, 1, 2, 3} ifpresent
+tspt_array_i3_mod4v3aifp := {0, *, 2} ifpresent
+tspt_array_i3_mod4v3qifp := {?, 1, 2} ifpresent
+//tspt_array_i3_mod4v3o := {omit, 1, 2} //error
+tspt_array_i3_mod4v3vlifp := {0, 1, (1,2)} ifpresent //value list
+tspt_array_i3_mod4vlifp := ( {0,1,2},{9,10,11}) ifpresent
+tspt_array_i3_mod4v3rifp := {0, 1, (1..3)} ifpresent //range
+tspt_array_i3_mod4v3mixifp := {(0,1), 1, (1..3)} ifpresent 
+tspt_array_i3_mod4v3cifp := {(0,1), 1, complement(2,3)} ifpresent 
+tspt_array_i3_mod4field1ifp := {0, -, -} ifpresent
+
+//=== SET===
+tspt_set_mod4v1 :=  { b:=true };
+tspt_set_mod4v2 := { b:=true, cs:= "sth" };
+tspt_set_mod4v3 := { b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}
+tspt_set_mod4a  := *;
+tspt_set_mod4q  := ?;
+tspt_set_mod4o  := omit;
+tspt_set_mod4c1 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99})
+tspt_set_mod4c2 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}, omit)
+tspt_set_mod4c0 := complement(omit)
+tspt_set_mod4c3 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=0},{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=1},{ b:=true,i:=2, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?})
+
+tspt_setof_mod4v1 := { "a" }
+tspt_setof_mod4v2 := { "a", "b"}
+tspt_setof_mod4v3 := { "a","b","c"}
+tspt_setof_mod4a := *
+tspt_setof_mod4q := ?;
+tspt_setof_mod4o := omit;
+tspt_setof_mod4c0 := {complement(omit)};
+tspt_setof_mod4c1 := {complement("a"),"b"};
+tspt_setof_mod4c2 := {complement("a","b"),"c"};
+tspt_setof_mod4c3 := complement({"a"}, {"a","b"},{"c"});
+tspt_setof_mod4vl := { ("a","b"),("cica","macska","cat") }
+tspt_setof_mod4superset := superset ("a", "b")
+tspt_setof_mod4subset := subset ("a", "b")
+tspt_setof_mod4supersetl3 := superset ("a", "b") length(3)
+tspt_setof_mod4supersetl1_3 := superset ("a", "b") length(1..3)
+
+tspt_setof_mod4v1ifp := { "a" } ifpresent
+tspt_setof_mod4v2ifp := { "a", "b"} ifpresent
+tspt_setof_mod4v3ifp := { "a","b","c"} ifpresent
+tspt_setof_mod4aifp := * ifpresent
+tspt_setof_mod4qifp := ? ifpresent
+tspt_setof_mod4oifp := omit ifpresent
+tspt_setof_mod4c0ifp := {complement(omit)} ifpresent
+tspt_setof_mod4c1ifp := {complement("a"),"b"} ifpresent
+tspt_setof_mod4c2ifp := {complement("a","b"),"c"} ifpresent
+tspt_setof_mod4c3ifp := complement({"a"}, {"a","b"},{"c"}) ifpresent
+tspt_setof_mod4vlifp := { ("a","b"),("cica","macska","cat") } ifpresent
+tspt_setof_mod4supersetifp := superset ("a", "b") ifpresent
+tspt_setof_mod4supersetl3ifp := superset ("a", "b") length(3) ifpresent
+tspt_setof_mod4subsetifp := subset ("a", "b") ifpresent
+//enum
+tspt_enum_mod4v := first
+tspt_enum_mod4a := *
+tspt_enum_mod4q := ?
+tspt_enum_mod4o := omit
+tspt_enum_mod4c0:=complement(omit);
+tspt_enum_mod4c1:=complement(first);
+tspt_enum_mod4c2:=complement(first,second);
+tspt_enum_mod4vl1 := first
+tspt_enum_mod4vl2 := (first, second )
+
+tspt_enum_mod4vifp := first ifpresent
+tspt_enum_mod4aifp := * ifpresent
+tspt_enum_mod4qifp := ? ifpresent
+tspt_enum_mod4oifp := omit ifpresent
+tspt_enum_mod4c0ifp := complement(omit) ifpresent
+tspt_enum_mod4c1ifp := complement(first) ifpresent
+tspt_enum_mod4c2ifp := complement(first,second) ifpresent
+tspt_enum_mod4vl1ifp := first ifpresent
+tspt_enum_mod4vl2ifp := (first, second ) ifpresent
+
+//union
+tspt_union_mod4v_b := { b := true }
+tspt_union_mod4v_i := { i := 1 }
+tspt_union_mod4v_f := { f := 1.0 }
+tspt_union_mod4v_bs := { bs := '01101'B }
+tspt_union_mod4v_os := { os := 'ABBA'O }
+tspt_union_mod4v_hs := { hs := 'ABBA'H }
+tspt_union_mod4v_cs := { cs := "ABBA" }
+tspt_union_mod4v_r := { r := { 1, 1.0, "ABBA",'0100'B } }
+tspt_union_mod4v_roi := { roi := { 1 } }
+tspt_union_mod4v_s_uninit := { s := { b := true } }
+tspt_union_mod4v_s := { s:= { b:=true, i:=1,f:=1.0,bs:='01101'B, os:='ABBA'O, hs:='ABBA'H, cs:="ABBA" } }
+tspt_union_mod4v_socs := { socs := { "ABBA"} }
+tspt_union_mod4v_e := { e := first }
+tspt_union_mod4v_u := { u := { i := 1 } }
+
+tspt_union_mod4a := *
+tspt_union_mod4q := ?
+tspt_union_mod4o := omit
+
+tspt_union_mod4v_bifp := { b := true } ifpresent
+
+
+tspt_union_mod4v_bifp := { b := true } ifpresent
+tspt_union_mod4v_iifp := { i := 1 } ifpresent
+tspt_union_mod4v_fifp := { f := 1.0 } ifpresent
+tspt_union_mod4v_bsifp := { bs := '01101'B } ifpresent
+tspt_union_mod4v_osifp := { os := 'ABBA'O } ifpresent
+tspt_union_mod4v_hsifp := { hs := 'ABBA'H } ifpresent
+tspt_union_mod4v_csifp := { cs := "ABBA" } ifpresent
+tspt_union_mod4v_rifp := { r := { 1, 1.0, "ABBA",'0100'B } }  ifpresent
+tspt_union_mod4v_roiifp := { roi := { 1 } } ifpresent
+tspt_union_mod4v_s_uninitifp := { s := { b := true } } ifpresent
+tspt_union_mod4v_sifp := { s:= { b:=true, i:=1,f:=1.0,bs:='01101'B, os:='ABBA'O, hs:='ABBA'H, cs:="ABBA" } }  ifpresent
+tspt_union_mod4v_socsifp := { socs := { "ABBA"} } ifpresent
+tspt_union_mod4v_eifp := { e := first } ifpresent
+tspt_union_mod4v_uifp := { u := { i := 1 } } ifpresent
+
+tspt_union_mod4aifp := * ifpresent
+tspt_union_mod4qifp := ? ifpresent
+tspt_union_mod4oifp := omit ifpresent
+[EXECUTE]
+#array_test.tc_array_string2ttcn_DTE_test - TODO: put into neg test !!!
+array_test.control
+boolean_test.control
+integer_test.control
+float_test.control
+bitstring_test.control
+octetstring_test.control
+hexstring_test.control
+charstring_test.control
+record_test.control
+recordof_test.control
+set_test.control
+setof_test.control
+enum_test.control
+ucharstring_test.control
+union_test.control
+objid_test.control
+
+
+#To debug the faulty testcases:
+#record_test.tc_REC_string2ttcn_empty
+#record_test.tc_RREC_string2ttcn_oifp
diff --git a/Regression_Test_java/src/text2ttcn/text2ttcn_2.cfg b/Regression_Test_java/src/text2ttcn/text2ttcn_2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..46e4425d4b660f1d95b387da185020555a772327
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/text2ttcn_2.cfg
@@ -0,0 +1,4 @@
+[ORDERED_INCLUDE]
+"../text2ttcn_1.cfg"
+[EXECUTE]
+component_test.control
diff --git a/Regression_Test_java/src/text2ttcn/types2.ttcn b/Regression_Test_java/src/text2ttcn/types2.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e30ebda334ca1c573650676a2d3d73090fa89fd1
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/types2.ttcn
@@ -0,0 +1,254 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module types2 {
+
+type component MC {}
+
+
+
+group g_boolean {
+  type record of boolean RoB;
+}//g_boolean
+
+group g_integer {
+
+  type record of integer RoI;
+  type integer int_1_3 (1..3)
+
+} //g_integer
+
+group g_float{
+  type record of float RoF
+
+} //g_float
+
+group g_bitstring {
+  type bitstring BitStrings1 ('0'B, '1'B );
+  type bitstring BitStrings2 ('00'B, '01'B, '10'B, '11'B);
+  type bitstring BitStrings_1_2 (BitStrings1, BitStrings2);
+
+  type record of hexstring RoBS;  
+  //wrapper to test charstring in record:
+  type record RBS {
+    bitstring bs optional
+  }
+
+  type record of RBS RoRBS;
+
+  template RBS t_rbs(template bitstring pl_bs) := { bs:=pl_bs }
+
+}//g_bitstring
+
+group g_octetstring {
+  type record of octetstring RoOS;  
+  //wrapper to test charstring in record:
+  type record ROS {
+    octetstring os optional
+  }
+
+  type record of ROS RoROS;
+
+  template ROS t_ros(template octetstring pl_os) := { os:=pl_os }
+
+}//g_octetstring
+
+group g_hexstring {
+  type record of hexstring RoHS;  
+  //wrapper to test charstring in record:
+  type record RHS {
+    hexstring hs optional
+  }
+
+  type record of RHS RoRHS;
+
+  template RHS t_rhs(template hexstring pl_hs) := { hs:=pl_hs }
+
+}//g_hexstring
+
+group g_charstring {
+
+  type record of charstring RoCS;  
+  //wrapper to test charstring in record:
+  type record RCS {
+    charstring cs optional
+  }
+
+  type record of RCS RoRCS;
+
+  template RCS t_rcs(template charstring pl_cs) := { cs:=pl_cs }
+
+}//g_charstring
+
+group g_universal_charstring {
+
+  type record of universal charstring RoUCS;  
+  //wrapper to test charstring in record:
+  type record RUCS {
+    universal charstring ucs optional
+  }
+
+  type record of RUCS RoRUCS;
+
+  template RUCS t_rucs(template universal charstring pl_ucs) := { ucs:=pl_ucs }
+
+}//g_charstring
+
+group g_record {
+
+  //REC
+  type record REC {
+    integer    i optional,
+    float      f optional,
+    charstring cs optional,
+    bitstring  bs optional
+  }
+  type record of REC RoREC;
+
+  type record RREC { REC rec optional };
+  
+  template RoREC t_rorec(template REC pl_rec) := { pl_rec }
+  template RREC t_rrec( template REC pl_rec) := { rec := pl_rec }
+  //REC2
+  type record REC2 {
+    boolean b optional,
+    charstring cs optional,
+    int_1_3    i optional
+  }
+  type record of REC2 RoREC2;
+
+  //record of boolean, octetstring, hexstring:
+  type record REC_BOH {
+    boolean     b optional,
+    octetstring o optional,
+    hexstring   h optional
+  }
+
+  type record REC_BAI3 {
+    boolean     b optional,
+    AI3         ai3 optional
+  }
+
+  template REC t_rec(template integer pl_i, template float pl_f, template charstring pl_cs, template bitstring pl_bs) := {
+    i:= pl_i,
+    f:= pl_f,
+    cs:=pl_cs,
+    bs:=pl_bs
+  }
+
+  
+}//g_record
+
+group g_recordof {
+  // see earlier: type record of integer RoI
+  type record of RoI RoRoI;
+  type record of RoB RoRoB;
+  //type record of float RoF;
+  type record of RoF RoRoF;
+
+}//g_recordof
+
+group g_array {
+  //array of boolean;
+  //array of integers;
+  type integer AI3[3];
+  type integer AI2x3[2][3];
+
+  type record of AI3 RoAI3;
+  type record of AI2x3 RoAI2x3;
+
+  type record RAI3 {
+    AI3 ai3 optional
+  }
+
+  type record of RAI3 RoRAI3;
+  template RAI3 t_rai3(template AI3 pl_ai3) := { ai3 := pl_ai3 };
+
+  //array of floats
+  //array of bitstrings
+  //array of octetstrings
+  //array of hexstrings
+  //array of charstrings
+  //array of records
+  //arrays of sets
+  //arrays of set of
+  //array of enum
+  //array of union
+  //array of anytype
+  //array of user type
+
+  //see also REC_BAI3
+}//g_array
+
+
+group g_set {
+
+  type set SET {
+    boolean    b  optional,
+    integer    i  optional,
+    float      f  optional,
+    bitstring  bs optional,
+    octetstring os optional,
+    hexstring  hs optional,
+    charstring cs optional    
+  }
+  type record of SET RoSET;
+  //template RoSET t_roset(template SET pl_set) := { pl_set };
+
+  type record RSET { SET s optional }
+  template RSET t_rset(template SET pl_set) := {s:= pl_set };
+  type record of RSET RoRSET;
+
+}//g_set
+
+group g_setof {
+  type set of charstring SoCS;
+  type record of SoCS RoSoCS;
+  type record RSoCS { SoCS s optional }
+  template RSoCS t_rsocs(template SoCS pl_s) := { s := pl_s } 
+  type record of RSoCS RoRSoCS
+
+}//g_setof
+
+group g_enumerated {
+  type enumerated MyEnum { first, second, third }
+
+  type record REnum { MyEnum e optional }
+  template REnum t_renum(template MyEnum pl_e) := { e := pl_e }
+}//g_enumerated
+
+group g_union {
+  type union U {
+    boolean    b,
+    integer    i,
+    float      f,
+    bitstring  bs,
+    octetstring os,
+    hexstring  hs,
+    charstring cs,
+    REC        r,
+    RoI        roi,
+    SET        s,
+    SoCS       socs,
+    MyEnum	   e,
+    U		   u
+  }
+
+  type record RU  { U u optional }
+  template RU t_ru(template U pl_u) := { u := pl_u }
+
+}//g_union
+
+group g_anytype {
+
+}//g_anytype
+
+}//module
diff --git a/Regression_Test_java/src/text2ttcn/ucharstring_test.ttcn b/Regression_Test_java/src/text2ttcn/ucharstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..1dea71f53e9e9b262e7b7dd017083826ab10016f
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/ucharstring_test.ttcn
@@ -0,0 +1,565 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module ucharstring_test {
+//=========================================================================
+// Import Part
+//=========================================================================
+
+import from types2 all;
+//import from functions all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //modulepar charstrings not modified from cfg file
+  template universal charstring tspt_ucs_v := "ABBA";
+  template universal charstring tspt_ucs_o := omit;
+  template universal charstring tspt_ucs_a := *;
+  template universal charstring tspt_ucs_q := ?;
+  template universal charstring tspt_ucs_al1 := * length(2); //length restriction
+  template universal charstring tspt_ucs_al2 := * length(2..4);
+  template universal charstring tspt_ucs_ql1 := ? length(2);
+  template universal charstring tspt_ucs_ql2 := ? length(2..4);
+  template universal charstring tspt_ucs_vl1 := ("ABBA");
+  template universal charstring tspt_ucs_vl2 := ("ABBA","baba");
+  template universal charstring tspt_ucs_vl3 := ("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_c1 := complement("ABBA")
+  template universal charstring tspt_ucs_c2 := complement("ABBA","baba");
+  template universal charstring tspt_ucs_c3 := complement("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_r1 := ("A".."B"); //range
+  template universal charstring tspt_ucs_r2 := ("a".."c");
+  template universal charstring tspt_ucs_pa := pattern "abc*xyz"
+  template universal charstring tspt_ucs_pq := pattern "abc?xyz"
+  
+  template universal charstring tspt_ucs_vifp := "ABBA" ifpresent;
+  template universal charstring tspt_ucs_oifp := omit ifpresent;
+  template universal charstring tspt_ucs_aifp := * ifpresent;
+  template universal charstring tspt_ucs_qifp := ? ifpresent;
+  template universal charstring tspt_ucs_al1ifp := * length(2) ifpresent; //length restriction
+  template universal charstring tspt_ucs_al2ifp := * length(2..4) ifpresent;
+  template universal charstring tspt_ucs_ql1ifp := ? length(2) ifpresent;
+  template universal charstring tspt_ucs_ql2ifp := ? length(2..4) ifpresent;
+  template universal charstring tspt_ucs_vl1ifp := ("ABBA") ifpresent;
+  template universal charstring tspt_ucs_vl2ifp := ("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_c1ifp := complement("ABBA") ifpresent
+  template universal charstring tspt_ucs_c2ifp := complement("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_r1ifp := ("A".."B") ifpresent; //range
+  template universal charstring tspt_ucs_r2ifp := ("a".."c") ifpresent;
+  template universal charstring tspt_ucs_paifp := pattern "abc*xyz"  ifpresent
+  template universal charstring tspt_ucs_pqifp := pattern "abc?xyz"  ifpresent  
+  
+  //modulepar universal charstrings modified from cfg file
+  template universal charstring tspt_ucs_mod4v := * //after mod:"ABBA";
+  template universal charstring tspt_ucs_mod4o := * //omit;
+  template universal charstring tspt_ucs_mod4ol := * //omit;
+  template universal charstring tspt_ucs_mod4a := "A" //*;
+  template universal charstring tspt_ucs_mod4q := "" //?;
+  template universal charstring tspt_ucs_mod4al1 := "A" //* length(2); //length restriction
+  template universal charstring tspt_ucs_mod4al2 := "Original" //mofified for: * length(2..4);
+  template universal charstring tspt_ucs_mod4ql1 := "Original" //mofified for:? length(2);
+  template universal charstring tspt_ucs_mod4ql2 := "Original" //mofified for:? length(2..4);
+  template universal charstring tspt_ucs_mod4vl1 := ("ABBA") //TODO: Adam //It should be mofified for: ("ABBA");
+  template universal charstring tspt_ucs_mod4vl2 := "Original" //mofified for:("ABBA","baba");
+  template universal charstring tspt_ucs_mod4vl3 := "Original" //mofified for:("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_mod4c1 := "Original" //mofified for:complement("ABBA")
+  template universal charstring tspt_ucs_mod4c2 := "Original" //mofified for:complement("ABBA","baba");
+  template universal charstring tspt_ucs_mod4c3 := "Original" //mofified for:complement("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_mod4r1 := "Original" //mofified for:("A".."B"); //range
+  template universal charstring tspt_ucs_mod4r2 := "Original" //mofified for:("a".."c");
+  template universal charstring tspt_ucs_mod4pa := "Original" //mofified for:pattern "abc*xyz"
+  template universal charstring tspt_ucs_mod4pq := "Original" //mofified for:pattern "abc?xyz"
+  
+  template universal charstring tspt_ucs_mod4vifp := "Original" //mofified for:"ABBA" ifpresent;
+  template universal charstring tspt_ucs_mod4oifp := "Original" //mofified for:omit ifpresent;
+  template universal charstring tspt_ucs_mod4aifp := "Original" //mofified for:* ifpresent;
+  template universal charstring tspt_ucs_mod4qifp := "Original" //mofified for:? ifpresent;
+  template universal charstring tspt_ucs_mod4al1ifp := "Original" //mofified for:* length(2) ifpresent; //length restriction
+  template universal charstring tspt_ucs_mod4al2ifp := "Original" //mofified for:* length(2..4) ifpresent;
+  template universal charstring tspt_ucs_mod4ql1ifp := "Original" //mofified for:? length(2) ifpresent;
+  template universal charstring tspt_ucs_mod4ql2ifp := "Original" //mofified for:? length(2..4) ifpresent;
+  template universal charstring tspt_ucs_mod4vl1ifp :=  ("ABBA") ifpresent //TODO: Adam //It should be mofified for: ("ABBA");
+  template universal charstring tspt_ucs_mod4vl2ifp := "Original" //mofified for:("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_mod4vl3ifp := "Original" //mofified for:("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_mod4c1ifp := "Original" //mofified for:complement("ABBA") ifpresent
+  template universal charstring tspt_ucs_mod4c2ifp := "Original" //mofified for:complement("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_mod4c3ifp := "Original" //mofified for:complement("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_mod4r1ifp := "Original" //mofified for:("A".."B") ifpresent; //range
+  template universal charstring tspt_ucs_mod4r2ifp := "Original" //mofified for:("a".."c") ifpresent;
+  template universal charstring tspt_ucs_mod4paifp := "Original" //mofified for:pattern "abc*xyz"  ifpresent
+  template universal charstring tspt_ucs_mod4pqifp := "Original" //mofified for:pattern "abc?xyz"  ifpresent  
+  
+}
+
+//=========================================================================
+// Templates
+//=========================================================================
+// not modulepars
+template universal charstring t_ucs_v := "ABBA";
+template universal charstring t_ucs_o := omit;
+template universal charstring t_ucs_a := *;
+template universal charstring t_ucs_q := ?;
+template universal charstring t_ucs_al1 := * length(2); //length restriction
+template universal charstring t_ucs_al2 := * length(2..4);
+template universal charstring t_ucs_ql1 := ? length(2);
+template universal charstring t_ucs_ql2 := ? length(2..4);
+template universal charstring t_ucs_vl1 := ("ABBA");
+template universal charstring t_ucs_vl2 := ("ABBA","baba");
+template universal charstring t_ucs_vl3 := ("ABBA","baba","Bye");
+template universal charstring t_ucs_c1 := complement("ABBA")
+template universal charstring t_ucs_c2 := complement("ABBA","baba");
+template universal charstring t_ucs_c3 := complement("ABBA","baba","Bye");
+template universal charstring t_ucs_r1 := ("A".."B"); //range
+template universal charstring t_ucs_r2 := ("a".."c");
+template universal charstring t_ucs_pa := pattern "abc*xyz"
+template universal charstring t_ucs_pq := pattern "abc?xyz"
+
+template universal charstring t_ucs_vifp := "ABBA" ifpresent;
+template universal charstring t_ucs_oifp := omit ifpresent;
+template universal charstring t_ucs_aifp := * ifpresent;
+template universal charstring t_ucs_qifp := ? ifpresent;
+template universal charstring t_ucs_al1ifp := * length(2) ifpresent; //length restriction
+template universal charstring t_ucs_al2ifp := * length(2..4) ifpresent;
+template universal charstring t_ucs_ql1ifp := ? length(2) ifpresent;
+template universal charstring t_ucs_ql2ifp := ? length(2..4) ifpresent;
+template universal charstring t_ucs_vl1ifp := ("ABBA") ifpresent;
+template universal charstring t_ucs_vl2ifp := ("ABBA","baba") ifpresent;
+template universal charstring t_ucs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+template universal charstring t_ucs_c1ifp := complement("ABBA") ifpresent
+template universal charstring t_ucs_c2ifp := complement("ABBA","baba") ifpresent;
+template universal charstring t_ucs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+template universal charstring t_ucs_r1ifp := ("A".."B") ifpresent; //range
+template universal charstring t_ucs_r2ifp := ("a".."c") ifpresent;
+template universal charstring t_ucs_paifp := pattern "abc*xyz"  ifpresent
+template universal charstring t_ucs_pqifp := pattern "abc?xyz"  ifpresent
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+function f_string2ttcn_rucs_t(in charstring pl_cs, in template RUCS pl_expected_result) {
+  var template RUCS vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_rucs_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template RUCS vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_rucs_v(in charstring pl_cs, in template RUCS pl_expected_result, in boolean pl_ok_expected) {
+  var RUCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_rucs_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RUCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_ucs_ttcn2string_emb() runs on MC {
+  log(t_rucs(tspt_ucs_mod4v));
+  log(ttcn2string(t_rucs(tspt_ucs_mod4v)));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4v)) != "{ ucs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4o));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4o)) != "{ ucs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4a));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4a)) != "{ ucs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4q));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4q)) != "{ ucs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al1)) != "{ ucs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al2)) != "{ ucs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql1)) != "{ ucs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql2)) != "{ ucs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rucs(tspt_ucs_mod4vl1),"<");
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl1)) != "{ ucs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl2)) != "{ ucs := (char(0, 0, 0, 193) & \"d\" & char(0, 0, 0, 225) & \"m\", char(0, 0, 0, 201) & \"va\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl3));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl3)) != "{ ucs := (\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c1)) != "{ ucs := complement(\"ABBA\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c2)) != "{ ucs := complement(\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c3));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c3)) != "{ ucs := complement(\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r1)) != "{ ucs := (\"A\" .. \"B\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r2)) != "{ ucs := (\"a\" .. \"c\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4pa));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4pa)) != "{ ucs := pattern \"abc*xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4pq));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4pq)) != "{ ucs := pattern \"abc?xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rucs(tspt_ucs_mod4vifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vifp)) != "{ ucs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4oifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4oifp)) != "{ ucs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4aifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4aifp)) != "{ ucs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4qifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4qifp)) != "{ ucs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al1ifp)) != "{ ucs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al2ifp)) != "{ ucs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql1ifp)) != "{ ucs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql2ifp)) != "{ ucs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl1ifp)) != "{ ucs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl2ifp)) != "{ ucs := (\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl3ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl3ifp)) != "{ ucs := (\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c1ifp)) != "{ ucs := complement(\"ABBA\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c2ifp)) != "{ ucs := complement(\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c3ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c3ifp)) != "{ ucs := complement(\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r1ifp)) != "{ ucs := (\"A\" .. \"B\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r2ifp)) != "{ ucs := (\"a\" .. \"c\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4paifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4paifp)) != "{ ucs := pattern \"abc*xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4pqifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4pqifp)) != "{ ucs := pattern \"abc?xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+//==== string2ttcn testcases ===============================================================
+//These testcases tests if
+// 1. string2ttcn can generate the expected template
+// 2. string2ttcn can generate the expected value, if possible/required (=true the third arg)
+//===========================================================================================
+testcase tc_ucs_string2ttcn_mod4v() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4v)),t_rucs(tspt_ucs_mod4v));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4v)),t_rucs(tspt_ucs_mod4v),true);
+}
+
+testcase tc_ucs_string2ttcn_mod4o() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4o)),t_rucs(tspt_ucs_mod4o));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4o)),t_rucs(tspt_ucs_mod4o),true);
+}
+
+//omit length
+testcase tc_ucs_string2ttcn_mod4ol() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ol)),t_rucs(tspt_ucs_mod4ol));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ol)),t_rucs(tspt_ucs_mod4ol),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4a() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4a)),t_rucs(tspt_ucs_mod4a));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4a)),t_rucs(tspt_ucs_mod4a),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4q() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4q)),t_rucs(tspt_ucs_mod4q));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4q)),t_rucs(tspt_ucs_mod4q),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al1)),t_rucs(tspt_ucs_mod4al1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al1)),t_rucs(tspt_ucs_mod4al1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al2)),t_rucs(tspt_ucs_mod4al2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al2)),t_rucs(tspt_ucs_mod4al2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql1)),t_rucs(tspt_ucs_mod4ql1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql1)),t_rucs(tspt_ucs_mod4ql1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql2)),t_rucs(tspt_ucs_mod4ql2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql2)),t_rucs(tspt_ucs_mod4ql2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl1)),t_rucs(tspt_ucs_mod4vl1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl1)),t_rucs(tspt_ucs_mod4vl1),true);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl2)),t_rucs(tspt_ucs_mod4vl2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl2)),t_rucs(tspt_ucs_mod4vl2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl3() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl3)),t_rucs(tspt_ucs_mod4vl3));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl3)),t_rucs(tspt_ucs_mod4vl3),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c1)),t_rucs(tspt_ucs_mod4c1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c1)),t_rucs(tspt_ucs_mod4c1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c2)),t_rucs(tspt_ucs_mod4c2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c2)),t_rucs(tspt_ucs_mod4c2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c3() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c3)),t_rucs(tspt_ucs_mod4c3));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c3)),t_rucs(tspt_ucs_mod4c3),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r1)),t_rucs(tspt_ucs_mod4r1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r1)),t_rucs(tspt_ucs_mod4r1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r2)),t_rucs(tspt_ucs_mod4r2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r2)),t_rucs(tspt_ucs_mod4r2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4pa() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4pa)),t_rucs(tspt_ucs_mod4pa));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4pa)),t_rucs(tspt_ucs_mod4pa),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4pq() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4pq)),t_rucs(tspt_ucs_mod4pq));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4pq)),t_rucs(tspt_ucs_mod4pq),false);
+}
+
+// ifp
+
+testcase tc_ucs_string2ttcn_mod4vifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vifp)),t_rucs(tspt_ucs_mod4vifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vifp)),t_rucs(tspt_ucs_mod4vifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4oifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4oifp)),t_rucs(tspt_ucs_mod4oifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4oifp)),t_rucs(tspt_ucs_mod4oifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4aifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4aifp)),t_rucs(tspt_ucs_mod4aifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4aifp)),t_rucs(tspt_ucs_mod4aifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4qifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4qifp)),t_rucs(tspt_ucs_mod4qifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4qifp)),t_rucs(tspt_ucs_mod4qifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al1ifp)),t_rucs(tspt_ucs_mod4al1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al1ifp)),t_rucs(tspt_ucs_mod4al1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al2ifp)),t_rucs(tspt_ucs_mod4al2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al2ifp)),t_rucs(tspt_ucs_mod4al2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql1ifp)),t_rucs(tspt_ucs_mod4ql1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql1ifp)),t_rucs(tspt_ucs_mod4ql1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql2ifp)),t_rucs(tspt_ucs_mod4ql2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql2ifp)),t_rucs(tspt_ucs_mod4ql2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl1ifp)),t_rucs(tspt_ucs_mod4vl1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl1ifp)),t_rucs(tspt_ucs_mod4vl1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl2ifp)),t_rucs(tspt_ucs_mod4vl2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl2ifp)),t_rucs(tspt_ucs_mod4vl2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl3ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl3ifp)),t_rucs(tspt_ucs_mod4vl3ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl3ifp)),t_rucs(tspt_ucs_mod4vl3ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c1ifp)),t_rucs(tspt_ucs_mod4c1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c1ifp)),t_rucs(tspt_ucs_mod4c1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c2ifp)),t_rucs(tspt_ucs_mod4c2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c2ifp)),t_rucs(tspt_ucs_mod4c2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c3ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c3ifp)),t_rucs(tspt_ucs_mod4c3ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c3ifp)),t_rucs(tspt_ucs_mod4c3ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r1ifp)),t_rucs(tspt_ucs_mod4r1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r1ifp)),t_rucs(tspt_ucs_mod4r1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r2ifp)),t_rucs(tspt_ucs_mod4r2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r2ifp)),t_rucs(tspt_ucs_mod4r2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4paifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4paifp)),t_rucs(tspt_ucs_mod4paifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4paifp)),t_rucs(tspt_ucs_mod4paifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4pqifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4pqifp)),t_rucs(tspt_ucs_mod4pqifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4pqifp)),t_rucs(tspt_ucs_mod4pqifp),false);
+}
+
+control { 
+  
+  log("***universal charstring tests****");
+  //execute(tc_ucs_v());
+   //ttcn2string:
+  execute(tc_ucs_ttcn2string_emb());
+  
+  execute(tc_ucs_string2ttcn_mod4v());
+  execute(tc_ucs_string2ttcn_mod4o());
+  execute(tc_ucs_string2ttcn_mod4ol());
+  execute(tc_ucs_string2ttcn_mod4a());
+  execute(tc_ucs_string2ttcn_mod4q());
+  execute(tc_ucs_string2ttcn_mod4al1());
+  execute(tc_ucs_string2ttcn_mod4al2());
+  execute(tc_ucs_string2ttcn_mod4ql1());
+  execute(tc_ucs_string2ttcn_mod4ql2());
+  execute(tc_ucs_string2ttcn_mod4vl1());
+  execute(tc_ucs_string2ttcn_mod4vl2());
+  execute(tc_ucs_string2ttcn_mod4vl3());
+  execute(tc_ucs_string2ttcn_mod4c1());
+  execute(tc_ucs_string2ttcn_mod4c2());
+  execute(tc_ucs_string2ttcn_mod4c3());
+  execute(tc_ucs_string2ttcn_mod4r1());
+  execute(tc_ucs_string2ttcn_mod4r2());
+  execute(tc_ucs_string2ttcn_mod4pa());
+  execute(tc_ucs_string2ttcn_mod4pq());
+  //ttcn2string with ifpresent
+  execute(tc_ucs_string2ttcn_mod4vifp());
+  execute(tc_ucs_string2ttcn_mod4oifp());
+  execute(tc_ucs_string2ttcn_mod4aifp());
+  execute(tc_ucs_string2ttcn_mod4qifp());
+  execute(tc_ucs_string2ttcn_mod4al1ifp());
+  execute(tc_ucs_string2ttcn_mod4al2ifp());
+  execute(tc_ucs_string2ttcn_mod4ql1ifp());
+  execute(tc_ucs_string2ttcn_mod4ql2ifp());
+  execute(tc_ucs_string2ttcn_mod4vl1ifp());
+  execute(tc_ucs_string2ttcn_mod4vl2ifp());
+  execute(tc_ucs_string2ttcn_mod4vl3ifp());
+  execute(tc_ucs_string2ttcn_mod4c1ifp());
+  execute(tc_ucs_string2ttcn_mod4c2ifp());
+  execute(tc_ucs_string2ttcn_mod4c3ifp());
+  execute(tc_ucs_string2ttcn_mod4r1ifp());
+  execute(tc_ucs_string2ttcn_mod4r2ifp());
+  execute(tc_ucs_string2ttcn_mod4paifp());
+  execute(tc_ucs_string2ttcn_mod4pqifp()); 
+  
+}
+
+} //module
diff --git a/Regression_Test_java/src/text2ttcn/union_test.ttcn b/Regression_Test_java/src/text2ttcn/union_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..7ecf189a74aba2cf37a1e29ad80bd8b5c9038586
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn/union_test.ttcn
@@ -0,0 +1,297 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module union_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar{
+  template U tspt_union_mod4v_b := { e := first }
+  template U tspt_union_mod4v_i := { e := first }
+  template U tspt_union_mod4v_f := { e := first }
+  template U tspt_union_mod4v_bs := { e := first }
+  template U tspt_union_mod4v_os := { e := first }
+  template U tspt_union_mod4v_hs := { e := first }
+  template U tspt_union_mod4v_cs := { e := first }
+  template U tspt_union_mod4v_r := { e := first }
+  template U tspt_union_mod4v_roi := { e := first }
+  template U tspt_union_mod4v_s := { e := first }
+  template U tspt_union_mod4v_s_uninit := { e := first }
+  template U tspt_union_mod4v_socs := { e := first }
+  template U tspt_union_mod4v_e := { e := first }
+  template U tspt_union_mod4v_u := { e := first }
+  
+  template U tspt_union_mod4a := { e := first }
+  template U tspt_union_mod4q := { e := first }
+  template U tspt_union_mod4o := { e := first }
+  
+  //union ifpresent
+  template U tspt_union_mod4v_bifp := { e := first }  
+  template U tspt_union_mod4v_iifp := { e := first } ifpresent
+  template U tspt_union_mod4v_fifp := { e := first } ifpresent
+  template U tspt_union_mod4v_bsifp := { e := first } ifpresent
+  template U tspt_union_mod4v_osifp := { e := first } ifpresent
+  template U tspt_union_mod4v_hsifp := { e := first } ifpresent
+  template U tspt_union_mod4v_csifp := { e := first } ifpresent
+  template U tspt_union_mod4v_rifp := { e := first } ifpresent
+  template U tspt_union_mod4v_roiifp := { e := first } ifpresent
+  template U tspt_union_mod4v_sifp := { e := first } ifpresent
+  template U tspt_union_mod4v_s_uninitifp := { e := first } 
+  template U tspt_union_mod4v_socsifp := { e := first } ifpresent
+  template U tspt_union_mod4v_eifp := { e := first } ifpresent
+  template U tspt_union_mod4v_uifp := { e := first } ifpresent
+  
+  template U tspt_union_mod4aifp := { e := first } ifpresent
+  template U tspt_union_mod4qifp := { e := first } ifpresent
+  template U tspt_union_mod4oifp := { e := first } ifpresent  
+}
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+
+testcase tc_union_ModulePar() runs on MC {
+  log(log2str(tspt_union_mod4v_b));
+  if(log2str(tspt_union_mod4v_b) == "{ b := true }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_i));
+  if(log2str(tspt_union_mod4v_i) == "{ i := 1 }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_f));
+  if(log2str(tspt_union_mod4v_f) == "{ f := 1.000000 }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_bs));
+  if(log2str(tspt_union_mod4v_bs) == "{ bs := '01101'B }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_os));
+  if(log2str(tspt_union_mod4v_os) == "{ os := 'ABBA'O }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_hs));
+  if(log2str(tspt_union_mod4v_hs) == "{ hs := 'ABBA'H }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_cs));
+  if(log2str(tspt_union_mod4v_cs) == "{ cs := \"ABBA\" }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_r));
+  if(log2str(tspt_union_mod4v_r) == "{ r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_roi));
+  if(log2str(tspt_union_mod4v_roi) == "{ roi := { 1 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_s));
+  if(log2str(tspt_union_mod4v_s) == 
+    "{ s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } }" ) 
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_s_uninit)); 
+  if(log2str(tspt_union_mod4v_s_uninit) == 
+    "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } }")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_socs));
+  if(log2str(tspt_union_mod4v_socs) == "{ socs := { \"ABBA\" } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_e));
+  if(log2str(tspt_union_mod4v_e) == "{ e := first (0) }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_u));
+  if(log2str(tspt_union_mod4v_u) == "{ u := { i := 1 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4a));
+  if(log2str(tspt_union_mod4a) == "*" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4q));
+  if(log2str(tspt_union_mod4q) == "?" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4o));
+  if(log2str(tspt_union_mod4o) == "omit" ) {setverdict(pass)} else {setverdict(fail)}
+  
+  log(log2str(tspt_union_mod4v_bifp));
+  if(log2str(tspt_union_mod4v_bifp) == "{ b := true } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_iifp));
+  if(log2str(tspt_union_mod4v_iifp) == "{ i := 1 } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_fifp));
+  if(log2str(tspt_union_mod4v_fifp) == "{ f := 1.000000 } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_bsifp));
+  if(log2str(tspt_union_mod4v_bsifp) == "{ bs := '01101'B } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_osifp));
+  if(log2str(tspt_union_mod4v_osifp) == "{ os := 'ABBA'O } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_hsifp));
+  if(log2str(tspt_union_mod4v_hsifp) == "{ hs := 'ABBA'H } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_csifp));
+  if(log2str(tspt_union_mod4v_csifp) == "{ cs := \"ABBA\" } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_rifp));
+  if(log2str(tspt_union_mod4v_rifp) == "{ r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_roiifp));
+  if(log2str(tspt_union_mod4v_roiifp) == "{ roi := { 1 } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_sifp));
+  if(log2str(tspt_union_mod4v_sifp) == 
+    "{ s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } } ifpresent" ) 
+  {setverdict(pass)} else {setverdict(fail)}	    
+  log(log2str(tspt_union_mod4v_s_uninitifp));
+  if(log2str(tspt_union_mod4v_s_uninitifp) == 
+    "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } } ifpresent")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_socsifp));
+  if(log2str(tspt_union_mod4v_socsifp) == "{ socs := { \"ABBA\" } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_eifp));
+  if(log2str(tspt_union_mod4v_eifp) == "{ e := first (0) } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_uifp));
+  if(log2str(tspt_union_mod4v_uifp) == "{ u := { i := 1 } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4aifp));
+  if(log2str(tspt_union_mod4aifp) == "* ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4qifp));
+  if(log2str(tspt_union_mod4qifp) == "? ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4oifp));
+  if(log2str(tspt_union_mod4oifp) == "omit ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+}
+
+testcase tc_union_ModulePar_emb() runs on MC {
+  log(log2str(t_ru(tspt_union_mod4v_b)));
+  if(log2str(t_ru(tspt_union_mod4v_b)) == "{ u := { b := true } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_i)));
+  if(log2str(t_ru(tspt_union_mod4v_i)) == "{ u := { i := 1 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_f)));
+  if(log2str(t_ru(tspt_union_mod4v_f)) == "{ u := { f := 1.000000 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_bs)));
+  if(log2str(t_ru(tspt_union_mod4v_bs)) == "{ u := { bs := '01101'B } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_os)));
+  if(log2str(t_ru(tspt_union_mod4v_os)) == "{ u := { os := 'ABBA'O } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_hs)));
+  if(log2str(t_ru(tspt_union_mod4v_hs)) == "{ u := { hs := 'ABBA'H } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_cs)));
+  if(log2str(t_ru(tspt_union_mod4v_cs)) == "{ u := { cs := \"ABBA\" } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_r)));
+  if(log2str(t_ru(tspt_union_mod4v_r)) == "{ u := { r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_roi)));
+  if(log2str(t_ru(tspt_union_mod4v_roi)) == "{ u := { roi := { 1 } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_s)));
+  if(log2str(t_ru(tspt_union_mod4v_s)) == 
+    "{ u := { s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } } }" ) 
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_s_uninit))); 
+  if(log2str(t_ru(tspt_union_mod4v_s_uninit)) == 
+    "{ u := { s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } } }")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_socs)));
+  if(log2str(t_ru(tspt_union_mod4v_socs)) == "{ u := { socs := { \"ABBA\" } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_e)));
+  if(log2str(t_ru(tspt_union_mod4v_e)) == "{ u := { e := first (0) } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_u)));
+  if(log2str(t_ru(tspt_union_mod4v_u)) == "{ u := { u := { i := 1 } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4a)));
+  if(log2str(t_ru(tspt_union_mod4a)) == "{ u := * }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4q)));
+  if(log2str(t_ru(tspt_union_mod4q)) == "{ u := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4o)));
+  if(log2str(t_ru(tspt_union_mod4o)) == "{ u := omit }" ) {setverdict(pass)} else {setverdict(fail)}
+  
+  log(log2str(t_ru(tspt_union_mod4v_bifp)));
+  if(log2str(t_ru(tspt_union_mod4v_bifp)) == "{ u := { b := true } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_iifp)));
+  if(log2str(t_ru(tspt_union_mod4v_iifp)) == "{ u := { i := 1 } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_fifp)));
+  if(log2str(t_ru(tspt_union_mod4v_fifp)) == "{ u := { f := 1.000000 } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_bsifp)));
+  if(log2str(t_ru(tspt_union_mod4v_bsifp)) == "{ u := { bs := '01101'B } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_osifp)));
+  if(log2str(t_ru(tspt_union_mod4v_osifp)) == "{ u := { os := 'ABBA'O } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_hsifp)));
+  if(log2str(t_ru(tspt_union_mod4v_hsifp)) == "{ u := { hs := 'ABBA'H } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_csifp)));
+  if(log2str(t_ru(tspt_union_mod4v_csifp)) == "{ u := { cs := \"ABBA\" } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_rifp)));
+  if(log2str(t_ru(tspt_union_mod4v_rifp)) == "{ u := { r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_roiifp)));
+  if(log2str(t_ru(tspt_union_mod4v_roiifp)) == "{ u := { roi := { 1 } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_sifp)));
+  if(log2str(t_ru(tspt_union_mod4v_sifp)) == 
+    "{ u := { s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } } ifpresent }" ) 
+  {setverdict(pass)} else {setverdict(fail)}	    
+  log(log2str(t_ru(tspt_union_mod4v_s_uninitifp)));
+  if(log2str(t_ru(tspt_union_mod4v_s_uninitifp)) == 
+    "{ u := { s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } } ifpresent }")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_socsifp)));
+  if(log2str(t_ru(tspt_union_mod4v_socsifp)) == "{ u := { socs := { \"ABBA\" } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_eifp)));
+  if(log2str(t_ru(tspt_union_mod4v_eifp)) == "{ u := { e := first (0) } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_uifp)));
+  if(log2str(t_ru(tspt_union_mod4v_uifp)) == "{ u := { u := { i := 1 } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4aifp)));
+  if(log2str(t_ru(tspt_union_mod4aifp)) == "{ u := * ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4qifp)));
+  if(log2str(t_ru(tspt_union_mod4qifp)) == "{ u := ? ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4oifp)));
+  if(log2str(t_ru(tspt_union_mod4oifp)) == "{ u := omit ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+}
+  //=========================================================================
+  // Control
+  //=========================================================================
+  control {
+    log("***union tests********");
+    execute(tc_union_ModulePar());
+    execute(tc_union_ModulePar_emb());
+  }
+  
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/array_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/array_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..eafdcda5667393853198a635ca30b698567d9ac8
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/array_test.ttcn
@@ -0,0 +1,1021 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module array_test
+{
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  template AI3 tspt_array_i3_a := *
+  template AI3 tspt_array_i3_q := ?
+  template AI3 tspt_array_i3_v0 := {-,-,-} //error, length shall be 3
+  template AI3 tspt_array_i3_v1:= {1,-,-}
+  template AI3 tspt_array_i3_v2:= {1,2,-}
+  template AI3 tspt_array_i3_v3v := {0, 1, 2}
+  //template AI3 tspt_array_i3_v4 := {0, 1, 2, 3} //error, length shall be 3
+  template AI3 tspt_array_i3_v3a := {0, *, 2}
+  template AI3 tspt_array_i3_v3q := {?, 1, 2}
+  //template AI3 tspt_array_i3_v3o := {omit, 1, 2} //"error: `omit' value is not allowed in this context"
+  template AI3 tspt_array_i3_v3vl := {0, 1, (1,2)} //value list
+  template AI3 tspt_array_i3_vl := ( {0,1,2},{9,10,11})
+  template AI3 tspt_array_i3_v3r := {0, 1, (1..3)} //range
+  template AI3 tspt_array_i3_v3mix := {(0,1), 1, (1..3)}
+  template AI3 tspt_array_i3_v3c := {(0,1), 1, complement(2,3)}
+  template AI3 tspt_array_i3_v3p := { permutation(1,2,3) } //TR: HS10539, fixed
+  template AI3 tspt_array_i3_v3pa := { permutation(1,2,*) }
+  
+  template AI3 tspt_array_i3_mod4a := {9,10,11}
+  template AI3 tspt_array_i3_mod4q := {9,10,11}
+  template AI3 tspt_array_i3_mod4o := *
+  template AI3 tspt_array_i3_mod4v0 := {1,2,3}
+  template AI3 tspt_array_i3_mod4v1:= {-,2,3}
+  template AI3 tspt_array_i3_mod4v2:= {-,-,3}
+  template AI3 tspt_array_i3_mod4v3v := {-,-,-}
+  //template AI3 tspt_array_i3_mod4v4 := {-,-,-}
+  template AI3 tspt_array_i3_mod4v3a := {9,10,11}
+  template AI3 tspt_array_i3_mod4v3q := {9,10,11}
+  //template AI3 tspt_array_i3_mod4v3o := *
+  template AI3 tspt_array_i3_mod4v3vl := {-,-,-}
+  template AI3 tspt_array_i3_mod4vl := *
+  template AI3 tspt_array_i3_mod4v3r := {-,-,-}
+  template AI3 tspt_array_i3_mod4v3mix := {-,-,-}
+  template AI3 tspt_array_i3_mod4v3c := {-,-,-}
+  template AI3 tspt_array_i3_mod4field1 := { (0, 1), 1, (1 .. 3) }
+  
+  template AI3 tspt_array_i3_mod4aifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4qifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4v0ifp := *
+  template AI3 tspt_array_i3_mod4v1ifp := *
+  template AI3 tspt_array_i3_mod4v2ifp := *
+  template AI3 tspt_array_i3_mod4v3vifp := *
+  template AI3 tspt_array_i3_mod4v4 := ?
+  template AI3 tspt_array_i3_mod4v3aifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4v3qifp := {9,10,11}
+  //template AI3 tspt_array_i3_mod4v3o ifp := *
+  template AI3 tspt_array_i3_mod4v3vlifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4vlifp := *
+  template AI3 tspt_array_i3_mod4v3rifp := {9,10,11}
+  template AI3 tspt_array_i3_mod4v3mixifp := ?
+  template AI3 tspt_array_i3_mod4v3cifp := ?;
+  // template AI3 tspt_array_i3_mod4v3crifp := *;
+  // template AI3 tspt_array_i3_mod4v3pifp := *;
+  template AI3 tspt_array_i3_mod4field1ifp := { (0, 1), 1, (1 .. 3) } ifpresent;
+}
+
+//=========================================================================
+// Templates
+//=========================================================================
+//array
+template AI3 t_array_i3_a := *
+template AI3 t_array_i3_q := ?
+template AI3 t_array_i3_v0 := {-,-,-} //error
+template AI3 t_array_i3_v1:= {1,-,-} //error
+template AI3 t_array_i3_v2:= {1,2,-} //error
+template AI3 t_array_i3_v3v := {0, 1, 2}
+//template AI3 t_array_i3_v4 := {0, 1, 2, 3}
+template AI3 t_array_i3_v3a := {0, *, 2}
+template AI3 t_array_i3_v3q := {?, 1, 2}
+//template AI3 t_array_i3_v3o := {omit, 1, 2} //error
+template AI3 t_array_i3_v3vl := {0, 1, (1,2)} //value list
+template AI3 t_array_i3_vl := ( {0,1,2},{0,1,3})
+template AI3 t_array_i3_v3r := {0, 1, (1..3)} //range
+template AI3 t_array_i3_v3mix := {(0,1), 1, (1..3)}
+template AI3 t_array_i3_v3c := {(0,1), 1, complement(2,3)}
+template AI3 t_array_i3_v3cr := {(0..1), 1, complement(2,4)}
+template AI3 t_array_i3_v3p := { permutation(1,2,3) } //TR: HS10539, fixed
+template AI3 t_array_i3_v3pa := { permutation(1,2,*) }
+
+template AI3 tt := { 1,2,* };
+template AI3 tt1x3 := { 1,*,3 };
+template AI3 ttx45 := { *,4,5 };
+
+
+template REC_BAI3 t_array_bai3( template boolean t_b, template AI3 t_ai3) := {
+  b:= t_b,
+  ai3:=t_ai3
+}
+
+type component MyComp_CT {
+  var template integer v_AI3literal[3] := { permutation(1,*,3) };
+  var template integer v_AI3allfrom[3] := { permutation(all from tt) };
+}
+
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+//template string -> template conversion
+//expected result: success
+function f_string2ttcn_REC_BAI3_t(in charstring pl_cs, in template REC_BAI3 pl_expected_result) {
+  var template REC_BAI3 vl_result;
+  @try {
+    string2ttcn(pl_cs, vl_result);
+    setverdict(pass);
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> template conversion
+//expected result: success, expected result struct in charstring
+function f_string2ttcn_REC_BAI3_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template REC_BAI3 vl_result;
+  @try {
+    string2ttcn(pl_cs, vl_result);
+    setverdict(pass);
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_REC_BAI3_v(in charstring pl_cs, in template REC_BAI3 pl_expected_result, in boolean pl_ok_expected) {
+  var REC_BAI3 vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_REC_BAI3_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var REC_BAI3 vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail, match(pl_expected_result, log2str(vl_result))) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+
+
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_array_i_NoModulePar() runs on MC {
+  
+  if( log2str(t_array_i3_a) != "*" ) {setverdict(fail) } else { setverdict(pass) };
+  if( log2str(t_array_i3_q) != "?" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3v);
+  if( log2str(t_array_i3_v3v) != "{ 0, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3a);
+  if( log2str(t_array_i3_v3a) != "{ 0, *, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3q);
+  if( log2str(t_array_i3_v3q) != "{ ?, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3vl);
+  if( log2str(t_array_i3_v3vl) != "{ 0, 1, (1, 2) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_vl);
+  if( log2str(t_array_i3_vl) != "({ 0, 1, 2 }, { 0, 1, 3 })" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3r);
+  if( log2str(t_array_i3_v3r) != "{ 0, 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3mix);
+  if( log2str(t_array_i3_v3mix) != "{ (0, 1), 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3c);
+  if( log2str(t_array_i3_v3c) != "{ (0, 1), 1, complement(2, 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(t_array_i3_v3p);
+  if( log2str(t_array_i3_v3p) != "{ permutation(1, 2, 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+}
+
+testcase tc_array_i_ModulePar() runs on MC {
+
+  if( log2str(tspt_array_i3_a) != "*" ) {setverdict(fail) } else { setverdict(pass) };
+  if( log2str(tspt_array_i3_q) != "?" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3v);
+  if( log2str(tspt_array_i3_v3v) != "{ 0, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3a);
+  if( log2str(tspt_array_i3_v3a) != "{ 0, *, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3q);
+  if( log2str(tspt_array_i3_v3q) != "{ ?, 1, 2 }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3vl);
+  if( log2str(tspt_array_i3_v3vl) != "{ 0, 1, (1, 2) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_vl);
+  if( log2str(tspt_array_i3_vl) != "({ 0, 1, 2 }, { 9, 10, 11 })" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3r);
+  if( log2str(tspt_array_i3_v3r) != "{ 0, 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3mix);
+  if( log2str(tspt_array_i3_v3mix) != "{ (0, 1), 1, (1 .. 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3c);
+  if( log2str(tspt_array_i3_v3c) != "{ (0, 1), 1, complement(2, 3) }" ) {setverdict(fail) } else { setverdict(pass) };
+  log(tspt_array_i3_v3p);
+  if( log2str(tspt_array_i3_v3p) != "{ permutation(1, 2, 3) }" ) {setverdict(fail) } else { setverdict(pass) }; //TR: HS10539, fixed
+  log(tspt_array_i3_v3pa);
+  if( log2str(tspt_array_i3_v3pa) != "{ permutation(1, 2, *) }" ) {setverdict(fail) } else { setverdict(pass) }; //TR: HS10539, fixed
+}
+
+testcase tc_array_i_v3p() runs on MC {
+  var RoAI3 vl_good_values := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1} }
+  var RoAI3 vl_wrong_values := { {1,2,4}, {1,5,6},{20,10,30} }
+  f_checkMatchingValues_ai3(tspt_array_i3_v3p,vl_good_values,vl_wrong_values);
+  f_checkMatchingValues_ai3(t_array_i3_v3p,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3pa() runs on MC {
+  var RoAI3 vl_good_values := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}, {1,2,4}, {5,2,1}}
+  var RoAI3 vl_wrong_values := { {1,5,6},{20,10,30} }
+  f_checkMatchingValues_ai3(tspt_array_i3_v3pa,vl_good_values,vl_wrong_values);
+  f_checkMatchingValues_ai3(t_array_i3_v3pa,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_a() runs on MC {
+  log(tspt_array_i3_a);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_q() runs on MC {
+  log(tspt_array_i3_q);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_q,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3v() runs on MC {
+  log(tspt_array_i3_v3v);
+  var RoAI3 vl_good_values := { {0,1,2} };
+  var RoAI3 vl_wrong_values := {{0,1,3},{0,2,2},{0,3,2},{0,-1,2},{0,-,2},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3v,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3a() runs on MC {
+  log(tspt_array_i3_v3a);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3q() runs on MC {
+  log(tspt_array_i3_v3q);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3}, {0,4,9}, {1,9999,2} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3vl() runs on MC {
+  log(tspt_array_i3_v3vl);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_vl() runs on MC {
+  log(tspt_array_i3_vl);
+  var RoAI3 vl_good_values := { {0,1,2},{9,10,11}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,2}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3r() runs on MC {
+  log(tspt_array_i3_v3r);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3r,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3mix() runs on MC {
+  log(tspt_array_i3_v3mix);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3},{1,1,1},{1,1,2},{1,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2},{1,1,4},{1,1,4},{1,1,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3mix,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_v3c() runs on MC {
+  log(tspt_array_i3_v3c);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,4},{0,1,5},{1,1,1},{1,1,4},{1,1,5}, {1,1,-1} , {1,1,-100}};
+  var RoAI3 vl_wrong_values := {{0,1,2},{0,1,3}, {1,1,2},{1,1,3},{1,2,4},{1,2,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_v3c,vl_good_values,vl_wrong_values);
+}
+//
+testcase tc_array_i_mod4a() runs on MC {
+  log(tspt_array_i3_mod4a);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4q() runs on MC {
+  log(tspt_array_i3_mod4q);
+  var RoAI3 vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  var RoAI3 vl_wrong_values := { };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4q,vl_good_values,vl_wrong_values);
+}
+
+
+testcase tc_array_i_mod4v0() runs on MC {
+  log(tspt_array_i3_mod4v0);
+  var RoAI3 vl_good_values := {{1,2,3} };  
+  var RoAI3 vl_wrong_values := { {0,1,2} } // compilation error for {1},{1,2} TODO: put into negative test
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v0,vl_good_values,vl_wrong_values,true);
+}
+
+testcase tc_array_i_mod4v1() runs on MC {
+  log(tspt_array_i3_mod4v1);
+  var RoAI3 vl_good_values := {{1,2,3}};//TODO: put {{1}} into the negative test
+  var RoAI3 vl_wrong_values := { {0,1,2} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v1,vl_good_values,vl_wrong_values,true);
+}
+
+testcase tc_array_i_mod4v2() runs on MC {
+  log(tspt_array_i3_mod4v2);
+  var RoAI3 vl_good_values := {{1,2,3}};//TODO: put {{1,2}} into the negative test
+  var RoAI3 vl_wrong_values := { {0,1,2} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v2,vl_good_values,vl_wrong_values,true);
+}
+
+
+testcase tc_array_i_mod4v3v() runs on MC {
+  log(tspt_array_i3_mod4v3v);
+  var RoAI3 vl_good_values := { {0,1,2} };
+  var RoAI3 vl_wrong_values := {{0,1,3},{0,2,2},{0,3,2},{0,-1,2},{0,-,2},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3v,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3a() runs on MC {
+  log(tspt_array_i3_mod4v3a);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3q() runs on MC {
+  log(tspt_array_i3_mod4v3q);
+  var RoAI3 vl_good_values := { {0,1,2},{0,2,2},{0,3,2},{0,-1,2},{0,-,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3}, {0,4,9}, {1,9999,2} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3a,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3vl() runs on MC {
+  log(tspt_array_i3_mod4v3vl);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,3}, {0,2,3}, {1,3,3} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4vl() runs on MC {
+  log(tspt_array_i3_mod4vl);
+  var RoAI3 vl_good_values := { {0,1,2},{9,10,11}};
+  var RoAI3 vl_wrong_values := {{0,1,3},{1,1,2}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4vl,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3r() runs on MC {
+  log(tspt_array_i3_mod4v3r);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3r,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3mix() runs on MC {
+  log(tspt_array_i3_mod4v3mix);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3},{1,1,1},{1,1,2},{1,1,3} };
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,0}, {0,2,2},{1,1,4},{1,1,4},{1,1,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3mix,vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3c() runs on MC {
+  log(tspt_array_i3_mod4v3c);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,4},{0,1,5},{1,1,1},{1,1,4},{1,1,5}, {1,1,-1} , {1,1,-100}};
+  var RoAI3 vl_wrong_values := {{0,1,2},{0,1,3}, {1,1,2},{1,1,3},{1,2,4},{1,2,0}, {9,10,12},{9,11,11},{4,4,4}  };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4v3c,vl_good_values,vl_wrong_values);
+}
+
+//{ (0, 1), 1, (1 .. 3) } -{0, -, -}--> { 1, 1, (1 .. 3) }
+testcase tc_array_i_mod4field1() runs on MC {
+  log(tspt_array_i3_mod4field1);
+  var RoAI3 vl_good_values := { {0,1,1},{0,1,2},{0,1,3}};
+  var RoAI3 vl_wrong_values := {{0,1,4},{0,1,5}, {1,1,1},{1,1,2},{1,1,3},{1,1,4}, {9,10,12} };
+  f_checkMatchingValues_ai3(tspt_array_i3_mod4field1,vl_good_values,vl_wrong_values);
+}
+//====
+
+testcase tc_array_i_mod4aifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4aifp));
+  var RoRAI3 vl_good_values := { {omit},{{1,1,3}}, {{1,2,3}}, {{1,3,3}}, {{1,4,3}}, {{1,9999,3}} };
+  var RoRAI3 vl_wrong_values := {{}};
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4aifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4qifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4qifp));
+  var RoRAI3 vl_good_values := { {omit},{{1,1,3}}, {{1,2,3}}, {{1,3,3}}, {{1,4,3}}, {{1,9999,3}} };
+  var RoRAI3 vl_wrong_values := {{} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4qifp),vl_good_values,vl_wrong_values);
+}
+testcase tc_array_i_mod4v0ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v0ifp));
+  var RoRAI3 vl_good_values := {{omit},{}}; //TODO: put {{}} into the negative test
+  var RoRAI3 vl_wrong_values := { {{0,1,2}} } // compilation error for {1},{1,2} TODO: put into negative test
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v0ifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v1ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v1ifp));
+  var RoRAI3 vl_good_values := {{omit},{}};//TODO: put {{1}} into the negative test
+  var RoRAI3 vl_wrong_values := { {{0,1,2}} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v1ifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v2ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v2ifp));
+  var RoRAI3 vl_good_values := {{omit},{}};//TODO: put {{1,2}} into the negative test
+  var RoRAI3 vl_wrong_values := { {{0,1,2}} } // compilation error for {1},{1,2} TODO: put into neg test
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v2ifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3vifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3vifp));
+  var RoRAI3 vl_good_values := {{omit}, {{0,1,2}} };
+  var RoRAI3 vl_wrong_values := { {{0,1,3}},{{0,2,2}},{{0,3,2}},{{0,-1,2}},{{0,-,2}},{{1,1,3}},{{1,2,3}},{{1,3,3}},{{1,4,3}},{{1,9999,3}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3vifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3aifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3aifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,2}},{{0,2,2}},{{0,3,2}},{{0,-1,2}},{{0,-,2}}};
+  var RoRAI3 vl_wrong_values := { {{0,1,3}},{{1,1,3}},{{1,2,3}}, {{1,3,3}},{{1,4,3}},{{1,9999,3}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3aifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3qifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3qifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,2}},{{0,2,2}},{{0,3,2}},{{0,-1,2}},{{0,-,2}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,3}},{{1,1,3}},{{0,2,3}},{{1,3,3}},{{0,4,9}},{{1,9999,2}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3aifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3vlifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3vlifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}},{{0,1,2}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,3}},{{1,1,3}},{{0,2,3}},{{1,3,3}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3vlifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4vlifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4vlifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,2}}, {{9,10,11}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,3}}, {{1,1,2}}, {{0,2,2}}, {{9,10,12}}, {{9,11,11}}, {{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4vlifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3rifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3rifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}}, {{0,1,2}}, {{0,1,3}} };
+  var RoRAI3 vl_wrong_values := { {{0,1,4}}, {{0,1,0}}, {{0,2,2}}, {{9,10,12}}, {{9,11,11}}, {{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3rifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3mixifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3mixifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}},{{0,1,2}},{{0,1,3}},{{1,1,1}},{{1,1,2}},{{1,1,3}} } ;
+  var RoRAI3 vl_wrong_values :={ {{0,1,4}}, {{0,1,0}}, {{0,2,2}}, {{1,1,4}}, {{1,1,4}}, {{1,1,0}}, {{9,10,12}}, {{9,11,11}}, {{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3mixifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_array_i_mod4v3cifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4v3cifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}},{{0,1,4}},{{0,1,5}},{{1,1,1}},{{1,1,4}},{{1,1,5}},{{1,1,-1}},{{1,1,-100}} };
+  var RoRAI3 vl_wrong_values := { {{0,1,2}},{{0,1,3}},{{1,1,2}},{{1,1,3}},{{1,2,4}},{{1,2,0}},{{9,10,12}},{{9,11,11}},{{4,4,4}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4v3cifp),vl_good_values,vl_wrong_values);
+}
+
+//{ (0, 1), 1, (1 .. 3) } -{0, -, -}--> { 1, 1, (1 .. 3) }
+testcase tc_array_i_mod4field1ifp_emb() runs on MC {
+  log(t_rai3(tspt_array_i3_mod4field1ifp));
+  var RoRAI3 vl_good_values := { {omit},{{0,1,1}}, {{0,1,2}}, {{0,1,3}} };
+  var RoRAI3 vl_wrong_values :={ {{0,1,4}}, {{0,1,5}}, {{1,1,1}}, {{1,1,2}}, {{1,1,3}}, {{1,1,4}}, {{9,10,12}} };
+  f_checkMatchingValues_rai3(t_rai3(tspt_array_i3_mod4field1ifp),vl_good_values,vl_wrong_values);
+}
+
+//=====
+testcase tc_array_i_emb() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_a)) != "{ b := true, ai3 := * }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_q)) != "{ b := true, ai3 := ? }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3v));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3v)) != "{ b := true, ai3 := { 0, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3a)) != "{ b := true, ai3 := { 0, *, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3q)) != "{ b := true, ai3 := { ?, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3vl)) != "{ b := true, ai3 := { 0, 1, (1, 2) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_vl)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3r));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3r)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3mix));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3mix)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_v3c));
+  if( log2str(t_array_bai3(true,tspt_array_i3_v3c)) != "{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }") {setverdict(fail)} else {setverdict(pass)}
+}
+
+//array embedded in record, modified from cfg file
+testcase tc_array_i_ModulePar_emb() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4a)) != "{ b := true, ai3 := * }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4q)) != "{ b := true, ai3 := ? }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4o));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4o)) != "{ b := true, ai3 := omit }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v0));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v0)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v1)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v2)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3v));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3v)) != "{ b := true, ai3 := { 0, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3a));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3a)) != "{ b := true, ai3 := { 0, *, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3q));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3q)) != "{ b := true, ai3 := { ?, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3vl)) != "{ b := true, ai3 := { 0, 1, (1, 2) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vl));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4vl)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3r));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3r)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mix));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3mix)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3c));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3c)) != "{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4field1ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4field1ifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)} 
+}  
+
+testcase tc_array_iifp_ModulePar_emb() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4aifp)) != "{ b := true, ai3 := * ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4qifp)) != "{ b := true, ai3 := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v0ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v0ifp)) != "{ b := true, ai3 := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v1ifp)) != "{ b := true, ai3 := { 1 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v2ifp)) != "{ b := true, ai3 := { 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3aifp)) != "{ b := true, ai3 := { 0, *, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3qifp)) != "{ b := true, ai3 := { ?, 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3vlifp)) != "{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4vlifp)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3rifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3rifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mixifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3mixifp)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true, tspt_array_i3_mod4field1ifp));
+  if( log2str(t_array_bai3(true, tspt_array_i3_mod4field1ifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+}
+
+//=========================
+// ttcn2string testcases: 
+//=========================
+testcase tc_array_i_ModulePar_emb_ttcn2string() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4a));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4a)) != "{ b := true, ai3 := * }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4q));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4q)) != "{ b := true, ai3 := ? }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4o));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4o)) != "{ b := true, ai3 := omit }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v1)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v2)) != "{ b := true, ai3 := { 1, 2, 3 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3v));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3v)) != "{ b := true, ai3 := { 0, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3a));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3a)) != "{ b := true, ai3 := { 0, *, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3q));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3q)) != "{ b := true, ai3 := { ?, 1, 2 } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vl));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3vl)) != "{ b := true, ai3 := { 0, 1, (1, 2) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vl));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4vl)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3r));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3r)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mix));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3mix)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3c));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4v3c)) != "{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4field1));
+  if( ttcn2string(t_array_bai3(true,tspt_array_i3_mod4field1)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } }") {setverdict(fail)} else {setverdict(pass)} 
+}
+
+testcase tc_array_iifp_ModulePar_emb_ttcn2string() runs on MC {
+  log(t_array_bai3(true,tspt_array_i3_mod4aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4aifp)) != "{ b := true, ai3 := * ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4qifp)) != "{ b := true, ai3 := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v0ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v0ifp)) != "{ b := true, ai3 := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v1ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v1ifp)) != "{ b := true, ai3 := { 1 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v2ifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v2ifp)) != "{ b := true, ai3 := { 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3aifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3aifp)) != "{ b := true, ai3 := { 0, *, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3qifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3qifp)) != "{ b := true, ai3 := { ?, 1, 2 } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3vlifp)) != "{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4vlifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4vlifp)) != "{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3rifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3rifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true,tspt_array_i3_mod4v3mixifp));
+  if( log2str(t_array_bai3(true,tspt_array_i3_mod4v3mixifp)) != "{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+  log(t_array_bai3(true, tspt_array_i3_mod4field1ifp));
+  if( log2str(t_array_bai3(true, tspt_array_i3_mod4field1ifp)) != "{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }") {setverdict(fail)} else {setverdict(pass)}
+}
+
+
+
+
+//=========================
+// string2ttcn testcases: 
+//=========================
+
+//expected result: DTE
+testcase tc_array_string2ttcn_DTE_test() runs on MC {
+	var REC_BAI3 vl_result;
+	@try {
+		string2ttcn("{ b := true, ai3 := * }", vl_result);
+		setverdict(fail)
+	} @catch(e) {
+		setverdict(pass, "Expected D T E")
+	}
+}
+
+//template string-> template, template string-> value
+testcase tc_array_string2ttcn_i3_mod4a() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := * }", t_array_bai3(true,tspt_array_i3_mod4a))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := * }", t_array_bai3(true,tspt_array_i3_mod4a),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4q() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ? }", t_array_bai3(true,tspt_array_i3_mod4q))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ? }", t_array_bai3(true,tspt_array_i3_mod4q),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v0() runs on MC {
+  template REC_BAI3 tl_rec := { b:= true, ai3:= {-,-,-} };
+  var REC_BAI3 vl_rec := { b:= true, ai3:= {-,-,-} };
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { -, -, - } }", "{ b := true, ai3 := { <uninitialized template>, <uninitialized template>, <uninitialized template> } }" )
+  //f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { -, -, - } }", "{ b := true, ai3 := { <unbound>, <unbound>, <unbound> } }" , true)
+  // partial array values are currently deleted if the array is an optional field or a union alternative (see artf708493)
+  f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { -, -, - } }", "{ b := true, ai3 := <unbound> }" , true);
+  //TODO: Check if It is ok or not: log2str(tl_rec) gives back: "{ b := true, ai3 := <unbound> }"
+  log(tl_rec);
+  log(vl_rec);
+}
+
+testcase tc_array_string2ttcn_i3_mod4v1() runs on MC {
+  template REC_BAI3 tl_rec := { b:= true, ai3:= {1,-,-} };
+  var REC_BAI3 vl_rec := { b:= true, ai3:= {1,-,-} };
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { 1, -, - } }", "{ b := true, ai3 := { 1, <uninitialized template>, <uninitialized template> } }")
+  //f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, -, - } }", log2str(vl_rec),true)
+  // partial array values are currently deleted if the array is an optional field or a union alternative (see artf708493)
+  f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, -, - } }", "{ b := true, ai3 := { 1, <unbound>, <unbound> } }" , true);
+  log(tl_rec);
+  log(vl_rec);
+}
+
+testcase tc_array_string2ttcn_i3_mod4v2() runs on MC {
+  template REC_BAI3 tl_rec := { b:= true, ai3:= {1,2,-} };
+  var REC_BAI3 vl_rec := { b:= true, ai3:= {1,2,-} };
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { 1, 2, - } }", "{ b := true, ai3 := { 1, 2, <uninitialized template> } }")
+  //f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, 2, - } }", log2str(vl_rec), true);
+  // partial array values are currently deleted if the array is an optional field or a union alternative (see artf708493)
+  f_string2ttcn_REC_BAI3_v_str("{ b := true, ai3 := { 1, 2, - } }", "{ b := true, ai3 := { 1, 2, <unbound> } }" , true);
+  log(tl_rec);
+  log(vl_rec);
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3v() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3v))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3v),true)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3a() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, *, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3a))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, *, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3a),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3q() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { ?, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3q))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { ?, 1, 2 } }", t_array_bai3(true,tspt_array_i3_mod4v3q),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3vl() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1, 2) } }", t_array_bai3(true,tspt_array_i3_mod4v3vl))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1, 2) } }", t_array_bai3(true,tspt_array_i3_mod4v3vl),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4vl() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }", t_array_bai3(true,tspt_array_i3_mod4vl))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) }", t_array_bai3(true,tspt_array_i3_mod4vl),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3r() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3r))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3r),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3mix() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3mix))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3mix),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3c() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3c))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } }", t_array_bai3(true,tspt_array_i3_mod4v3c),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4field1() runs on MC {
+  f_string2ttcn_REC_BAI3_t_str("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", log2str(t_array_bai3(true,tspt_array_i3_mod4field1)));
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } }", t_array_bai3(true,tspt_array_i3_mod4field1),false)
+}
+
+//=== string2ttcn testcases with ifpresent: =====
+
+//template string-> template, template string-> value
+testcase tc_array_string2ttcn_i3_mod4aifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := * ifpresent }", t_array_bai3(true,tspt_array_i3_mod4aifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := * ifpresent }", t_array_bai3(true,tspt_array_i3_mod4aifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4qifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ? ifpresent }", t_array_bai3(true,tspt_array_i3_mod4qifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ? ifpresent }", t_array_bai3(true,tspt_array_i3_mod4qifp),false)
+}
+
+// ???? is it acceptable ?????
+testcase tc_array_string2ttcn_i3_mod4v0ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := omit ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v0ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := omit ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v0ifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v1ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 1 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v1ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 1 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v1ifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v2ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v2ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v2ifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3vifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3aifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, *, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3aifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, *, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3aifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3qifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { ?, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3qifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { ?, 1, 2 } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3qifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3vlifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vlifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1, 2) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3vlifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4vlifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }", t_array_bai3(true,tspt_array_i3_mod4vlifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := ({ 0, 1, 2 }, { 9, 10, 11 }) ifpresent }", t_array_bai3(true,tspt_array_i3_mod4vlifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3rifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3rifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3rifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3mixifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3mixifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3mixifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4v3cifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3cifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { (0, 1), 1, complement(2, 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4v3cifp),false)
+}
+
+testcase tc_array_string2ttcn_i3_mod4field1ifp() runs on MC {
+  f_string2ttcn_REC_BAI3_t("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4field1ifp))
+  f_string2ttcn_REC_BAI3_v("{ b := true, ai3 := { 0, 1, (1 .. 3) } ifpresent }", t_array_bai3(true,tspt_array_i3_mod4field1ifp),false)
+}
+
+testcase tc_array_allfrom_perm1() runs on MyComp_CT {
+  var template AI3 vl_tcAI3literal, vl_tcAI3allFrom;
+  log ("component var v_AI3literal: ", v_AI3literal);
+  log ("component var v_AI3allfrom: ", v_AI3allfrom);
+  vl_tcAI3literal := { permutation(1,*,3) };
+  log ("TC() local var vl_tcAI3literal: ", vl_tcAI3literal);
+
+  var RoAI3 vl_goodValues := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}, {1,5,3}, {5,3,1},
+    {1,5,3}, {0,1,3},{3,1,-99}}
+  var RoAI3 vl_badValues := { {1,2,4}, {1,5,6},{20,10,30},{3,5,6}, {5,3,6}}; 
+  f_checkMatchingValues_ai3(vl_tcAI3literal, vl_goodValues, vl_badValues);
+
+  vl_tcAI3allFrom := { permutation(all from tt) }
+  log ("TC() local var vl_tcAI3allFrom: ", vl_tcAI3allFrom);
+  vl_goodValues := { {1,2,3}, {1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}, {1,5,2}, {5,2,1},
+    {1,5,2}, {0,1,2},{2,1,-99}}
+  vl_badValues := { {1,3,4}, {1,5,6},{20,10,30},{2,5,6}, {5,2,6}}
+  f_checkMatchingValues_ai3(vl_tcAI3allFrom,vl_goodValues, vl_badValues);
+}
+
+testcase tc_array_allfrom_perm2() runs on MyComp_CT {
+  var template AI2x3  vl_t24 := { {permutation(all from tt1x3)}, {permutation(all from ttx45) } };
+  var RoAI2x3 vl_goodValues := { { {1,2,3},{4,4,5}}, {{1,3,2},{5,4,1}}}
+  var RoAI2x3 vl_badValues := {{ {1,2,2},{4,4,5}}, {{1,3,2},{5,5,1}} }
+  f_check_AI2x3( vl_t24, vl_goodValues,vl_badValues);
+}
+testcase tc_array_perm() runs on MyComp_CT {
+  var template AI2x3  vl_t24 := { {permutation(1,*,3)}, {permutation(*,4,5) } };
+  var RoAI2x3 vl_goodValues := { { {1,2,3},{4,4,5}}, {{1,3,2},{5,4,1}}}
+  var RoAI2x3 vl_badValues := {{ {1,2,2},{4,4,5}}, {{1,3,2},{5,5,1}} }
+  f_check_AI2x3( vl_t24, vl_goodValues,vl_badValues);
+}
+
+testcase tc_array_compl() runs on MyComp_CT {
+  var RoAI3 vl_goodValues := { {0,1,1}, {0,1,3},{0,1,5}, {0,1,-500}, {1,1,1}, {1,1,3},{1,1,5}, {1,1,-500} }
+  var RoAI3 vl_badValues :=  { {2,1,1}, {0,2,3},{0,1,2}, {0,1,4}, {2,1,1}, {1,2,3},{1,1,2}, {1,1,4} }
+  f_checkMatchingValues_ai3( t_array_i3_v3cr, vl_goodValues,vl_badValues);
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  //array
+  log("***array tests *******");
+  execute(tc_array_string2ttcn_DTE_test());
+  execute(tc_array_i_NoModulePar());
+  execute(tc_array_i_ModulePar());
+  execute(tc_array_i_v3p());
+  execute(tc_array_i_v3pa());
+  execute(tc_array_i_a());
+  execute(tc_array_i_q());
+  execute(tc_array_i_v3v());
+  execute(tc_array_i_v3a());
+  execute(tc_array_i_v3q());
+  execute(tc_array_i_v3vl());
+  execute(tc_array_i_vl());
+  execute(tc_array_i_v3r());
+  execute(tc_array_i_v3mix());
+  execute(tc_array_i_v3c());
+
+  execute(tc_array_i_mod4a());
+  execute(tc_array_i_mod4q());
+  execute(tc_array_i_mod4v0());
+  execute(tc_array_i_mod4v1());
+  execute(tc_array_i_mod4v2());
+  execute(tc_array_i_mod4v3v());
+  execute(tc_array_i_mod4v3a());
+  execute(tc_array_i_mod4v3q());
+  execute(tc_array_i_mod4v3vl());   
+  execute(tc_array_i_mod4vl());
+  execute(tc_array_i_mod4v3r());
+  execute(tc_array_i_mod4v3mix());
+  execute(tc_array_i_mod4v3c());
+  execute(tc_array_i_mod4field1());
+
+  execute(tc_array_i_mod4aifp_emb());
+  execute(tc_array_i_mod4qifp_emb());
+  execute(tc_array_i_mod4v0ifp_emb());
+  execute(tc_array_i_mod4v1ifp_emb());
+  execute(tc_array_i_mod4v2ifp_emb());
+  execute(tc_array_i_mod4v3vifp_emb());
+  execute(tc_array_i_mod4v3aifp_emb());
+  execute(tc_array_i_mod4v3qifp_emb());
+  execute(tc_array_i_mod4v3vlifp_emb());   
+  execute(tc_array_i_mod4vlifp_emb());
+  execute(tc_array_i_mod4v3rifp_emb());
+  execute(tc_array_i_mod4v3mixifp_emb());
+  execute(tc_array_i_mod4v3cifp_emb());
+  execute(tc_array_i_mod4field1ifp_emb());
+
+  execute(tc_array_i_emb());
+  execute(tc_array_i_ModulePar_emb());
+  execute(tc_array_iifp_ModulePar_emb());
+  execute(tc_array_i_ModulePar_emb_ttcn2string());
+  execute(tc_array_iifp_ModulePar_emb_ttcn2string());
+
+  execute(tc_array_string2ttcn_i3_mod4a());
+  execute(tc_array_string2ttcn_i3_mod4q());
+  execute(tc_array_string2ttcn_i3_mod4v0());
+  execute(tc_array_string2ttcn_i3_mod4v1());
+  execute(tc_array_string2ttcn_i3_mod4v2());
+  execute(tc_array_string2ttcn_i3_mod4v3v());
+  execute(tc_array_string2ttcn_i3_mod4v3a());
+  execute(tc_array_string2ttcn_i3_mod4v3q());
+  execute(tc_array_string2ttcn_i3_mod4v3vl());
+  execute(tc_array_string2ttcn_i3_mod4vl());
+  execute(tc_array_string2ttcn_i3_mod4v3r());
+  execute(tc_array_string2ttcn_i3_mod4v3mix());
+  execute(tc_array_string2ttcn_i3_mod4v3c());
+  execute(tc_array_string2ttcn_i3_mod4field1());
+
+  execute(tc_array_string2ttcn_i3_mod4aifp());
+  execute(tc_array_string2ttcn_i3_mod4qifp());
+  execute(tc_array_string2ttcn_i3_mod4v0ifp()); //TODO: check it!
+  execute(tc_array_string2ttcn_i3_mod4v1ifp());
+  execute(tc_array_string2ttcn_i3_mod4v2ifp());
+  execute(tc_array_string2ttcn_i3_mod4v3vifp());
+  execute(tc_array_string2ttcn_i3_mod4v3aifp());
+  execute(tc_array_string2ttcn_i3_mod4v3qifp());
+  execute(tc_array_string2ttcn_i3_mod4v3vlifp());
+  execute(tc_array_string2ttcn_i3_mod4vlifp());
+  execute(tc_array_string2ttcn_i3_mod4v3rifp());
+  execute(tc_array_string2ttcn_i3_mod4v3mixifp());
+  execute(tc_array_string2ttcn_i3_mod4v3cifp());
+  execute(tc_array_string2ttcn_i3_mod4field1ifp());
+
+  execute(tc_array_allfrom_perm1()); //TODO: temporarily commented out (java compilation error)
+  execute(tc_array_allfrom_perm2());
+  execute(tc_array_perm());
+  execute(tc_array_compl());
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/bitstring_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/bitstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..01bb53f3a4a60b85ba208ccffa630b69cb3ef6d6
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/bitstring_test.ttcn
@@ -0,0 +1,487 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module bitstring_test {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar template boolean tspt_b_t := true;
+
+modulepar {
+  //modulepar bitstrings not modified from cfg file
+  template bitstring tspt_bs_v := '01101'B;
+  template bitstring tspt_bs_o := omit;
+  template bitstring tspt_bs_a := *;
+  template bitstring tspt_bs_q := ?;
+  template bitstring tspt_bs_al1 := * length(2); //length restriction
+  template bitstring tspt_bs_al2 := * length(2..4);
+  template bitstring tspt_bs_ql1 := ? length(2);
+  template bitstring tspt_bs_ql2 := ? length(2..4);
+  template bitstring tspt_bs_vl1 := ('01101'B);
+  template bitstring tspt_bs_vl2 := ('01101'B,'1010'B);
+  template bitstring tspt_bs_vl3 := ('01101'B,'1010'B,'101'B);
+  template bitstring tspt_bs_c1 := complement('01101'B)
+  template bitstring tspt_bs_c2 := complement('01101'B,'1010'B);
+  template bitstring tspt_bs_c3 := complement('01101'B,'1010'B,'101'B);
+  //template bitstring tspt_bs_r1 := ('A'B..'B'B); //range not allowed
+  //template bitstring tspt_bs_r2 := ('a'B..'c'B);
+  template bitstring tspt_bs_pa := '000*111'B
+  template bitstring tspt_bs_pq := '000?111'B
+  
+  template bitstring tspt_bs_vifp := '01101'B ifpresent;
+  template bitstring tspt_bs_oifp := omit ifpresent;
+  template bitstring tspt_bs_aifp := * ifpresent;
+  template bitstring tspt_bs_qifp := ? ifpresent;
+  template bitstring tspt_bs_al1ifp := * length(2) ifpresent; //length restriction
+  template bitstring tspt_bs_al2ifp := * length(2..4) ifpresent;
+  template bitstring tspt_bs_ql1ifp := ? length(2) ifpresent;
+  template bitstring tspt_bs_ql2ifp := ? length(2..4) ifpresent;
+  template bitstring tspt_bs_vl1ifp := ('01101'B) ifpresent;
+  template bitstring tspt_bs_vl2ifp := ('01101'B,'1010'B) ifpresent;
+  template bitstring tspt_bs_vl3ifp := ('01101'B,'1010'B,'101'B) ifpresent;
+  template bitstring tspt_bs_c1ifp := complement('01101'B) ifpresent
+  template bitstring tspt_bs_c2ifp := complement('01101'B,'1010'B) ifpresent;
+  template bitstring tspt_bs_c3ifp := complement('01101'B,'1010'B,'101'B) ifpresent;
+  //template bitstring tspt_bs_r1ifp := ('A'B..'B'B) ifpresent; //range not allowed
+  //template bitstring tspt_bs_r2ifp := ('a'B..'c'B) ifpresent; //range not allowed
+  template bitstring tspt_bs_paifp := '000*111'B  ifpresent
+  template bitstring tspt_bs_pqifp := '000?111'B  ifpresent  
+  
+  //modulepar bitstrings modified from cfg file
+  template bitstring tspt_bs_mod4v := * //after mod:'01101';
+  template bitstring tspt_bs_mod4o := * //omit;
+  template bitstring tspt_bs_mod4a := '0'B //*;
+  template bitstring tspt_bs_mod4q := ''B //?;
+  template bitstring tspt_bs_mod4al1 := '1'B //* length(2); //length restriction
+  template bitstring tspt_bs_mod4al2 := '1010010001'B //mofified for: * length(2..4);
+  template bitstring tspt_bs_mod4ql1 := '1010010001'B //mofified for:? length(2);
+  template bitstring tspt_bs_mod4ql2 := '1010010001'B //mofified for:? length(2..4);
+  template bitstring tspt_bs_mod4vl1 := ('01101'B) //TODO: Adam //It should be mofified for: ('01101'B);
+  template bitstring tspt_bs_mod4vl2 := '1010010001'B //mofified for:('01101'B,'1010'B);
+  template bitstring tspt_bs_mod4vl3 := '1010010001'B //mofified for:('01101'B,'1010'B,'B12'B);
+  template bitstring tspt_bs_mod4c1 := '1010010001'B //mofified for:complement('01101')
+  template bitstring tspt_bs_mod4c2 := '1010010001'B //mofified for:complement('01101','1010');
+  template bitstring tspt_bs_mod4c3 := '1010010001'B //mofified for:complement('01101','1010','101');
+  template bitstring tspt_bs_mod4r1 := '1010010001'B //mofified for:('A'..'B'); //range
+  template bitstring tspt_bs_mod4r2 := '1010010001'B //mofified for:('a'..'c');
+  template bitstring tspt_bs_mod4pa := '1010010001'B //mofified for:pattern 'abc*123'
+  template bitstring tspt_bs_mod4pq := '1010010001'B //mofified for:pattern 'abc?123'
+  
+  template bitstring tspt_bs_mod4vifp := '1010010001'B //mofified for:'01101' ifpresent;
+  template bitstring tspt_bs_mod4oifp := '1010010001'B //mofified for:omit ifpresent;
+  template bitstring tspt_bs_mod4aifp := '1010010001'B //mofified for:* ifpresent;
+  template bitstring tspt_bs_mod4qifp := '1010010001'B //mofified for:? ifpresent;
+  template bitstring tspt_bs_mod4al1ifp := '1010010001'B //mofified for:* length(2) ifpresent; //length restriction
+  template bitstring tspt_bs_mod4al2ifp := '1010010001'B //mofified for:* length(2..4) ifpresent;
+  template bitstring tspt_bs_mod4ql1ifp := '1010010001'B //mofified for:? length(2) ifpresent;
+  template bitstring tspt_bs_mod4ql2ifp := '1010010001'B //mofified for:? length(2..4) ifpresent;
+  template bitstring tspt_bs_mod4vl1ifp :=  ('01101'B) ifpresent //TODO: Adam //It should be mofified for: ('01101'B);
+  template bitstring tspt_bs_mod4vl2ifp := '1010010001'B //mofified for:('01101','1010') ifpresent;
+  template bitstring tspt_bs_mod4vl3ifp := '1010010001'B //mofified for:('01101','1010','B12') ifpresent;
+  template bitstring tspt_bs_mod4c1ifp := '1010010001'B //mofified for:complement('01101') ifpresent
+  template bitstring tspt_bs_mod4c2ifp := '1010010001'B //mofified for:complement('01101','1010') ifpresent;
+  template bitstring tspt_bs_mod4c3ifp := '1010010001'B //mofified for:complement('01101','1010','101') ifpresent;
+  //template bitstring tspt_bs_mod4r1ifp := '1010010001'B //mofified for:('0'B..'1'B) ifpresent; //range
+  //template bitstring tspt_bs_mod4r2ifp := '1010010001'B //mofified for:('0'B..'1'B) ifpresent;
+  template bitstring tspt_bs_mod4paifp := '1010010001'B //mofified for:pattern 'abc*xyz'B  ifpresent
+  template bitstring tspt_bs_mod4pqifp := '1010010001'B //mofified for:pattern 'abc?xyz'B  ifpresent  
+  
+}
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+function f_string2ttcn_RBS_t(in charstring pl_rbs, in template RBS pl_expected_result) {
+	var template RBS vl_result;
+	@try {
+	 string2ttcn(pl_rbs,vl_result);
+	 setverdict(pass) 
+	}
+	@catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_RBS_t_str(in charstring pl_rec, in charstring pl_expected_result) {
+	var template RBS vl_result;
+	@try {
+	 string2ttcn(pl_rec,vl_result);
+	 setverdict(pass) 
+	}
+	@catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_RBS_v(in charstring pl_cs, in template RBS pl_expected_result, in boolean pl_ok_expected) {
+  var RBS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_RBS_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RBS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+
+testcase tc_bs_1() runs on MC {
+  var template BitStrings_1_2 vlt_bs := ?;
+  log(vlt_bs);
+}
+
+testcase tc_bs_ModulePar_emb() runs on MC {
+  log(t_rbs(tspt_bs_mod4v));
+  if(log2str(t_rbs(tspt_bs_mod4v)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4o));
+  if(log2str(t_rbs(tspt_bs_mod4o)) != "{ bs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4a));
+  if(log2str(t_rbs(tspt_bs_mod4a)) != "{ bs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4q));
+  if(log2str(t_rbs(tspt_bs_mod4q)) != "{ bs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1));
+  if(log2str(t_rbs(tspt_bs_mod4al1)) != "{ bs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2));
+  if(log2str(t_rbs(tspt_bs_mod4al2)) != "{ bs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1));
+  if(log2str(t_rbs(tspt_bs_mod4ql1)) != "{ bs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2));
+  if(log2str(t_rbs(tspt_bs_mod4ql2)) != "{ bs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rbs(tspt_bs_mod4vl1),"<");
+  if(log2str(t_rbs(tspt_bs_mod4vl1)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2));
+  if(log2str(t_rbs(tspt_bs_mod4vl2)) != "{ bs := (\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  
+  log(t_rbs(tspt_bs_mod4vl3));
+  if(log2str(t_rbs(tspt_bs_mod4vl3)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1));
+  if(log2str(t_rbs(tspt_bs_mod4c1)) != "{ bs := complement(\'01101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2));
+  if(log2str(t_rbs(tspt_bs_mod4c2)) != "{ bs := complement(\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3));
+  if(log2str(t_rbs(tspt_bs_mod4c3)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pa));
+  if(log2str(t_rbs(tspt_bs_mod4pa)) != "{ bs := \'000*111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pq));
+  if(log2str(t_rbs(tspt_bs_mod4pq)) != "{ bs := \'000?111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rbs(tspt_bs_mod4vifp));
+  if(log2str(t_rbs(tspt_bs_mod4vifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4oifp));
+  if(log2str(t_rbs(tspt_bs_mod4oifp)) != "{ bs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4aifp));
+  if(log2str(t_rbs(tspt_bs_mod4aifp)) != "{ bs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4qifp));
+  if(log2str(t_rbs(tspt_bs_mod4qifp)) != "{ bs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4al1ifp)) != "{ bs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4al2ifp)) != "{ bs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4ql1ifp)) != "{ bs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4ql2ifp)) != "{ bs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4vl1ifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4vl2ifp)) != "{ bs := (\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl3ifp));
+  if(log2str(t_rbs(tspt_bs_mod4vl3ifp)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1ifp));
+  if(log2str(t_rbs(tspt_bs_mod4c1ifp)) != "{ bs := complement(\'01101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2ifp));
+  if(log2str(t_rbs(tspt_bs_mod4c2ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3ifp));
+  if(log2str(t_rbs(tspt_bs_mod4c3ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4paifp));
+  if(log2str(t_rbs(tspt_bs_mod4paifp)) != "{ bs := \'000*111'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pqifp));
+  if(log2str(t_rbs(tspt_bs_mod4pqifp)) != "{ bs := \'000?111\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+testcase tc_bs_ttcn2string_emb() runs on MC {
+  log(t_rbs(tspt_bs_mod4v));
+  if(ttcn2string(t_rbs(tspt_bs_mod4v)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4o));
+  if(ttcn2string(t_rbs(tspt_bs_mod4o)) != "{ bs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4a));
+  if(ttcn2string(t_rbs(tspt_bs_mod4a)) != "{ bs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4q));
+  if(ttcn2string(t_rbs(tspt_bs_mod4q)) != "{ bs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al1)) != "{ bs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al2)) != "{ bs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql1)) != "{ bs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql2)) != "{ bs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rbs(tspt_bs_mod4vl1),"<");
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl1)) != "{ bs := \'01101\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl2)) != "{ bs := (\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  
+  log(t_rbs(tspt_bs_mod4vl3));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl3)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c1)) != "{ bs := complement(\'01101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c2)) != "{ bs := complement(\'01101\'B, \'1010\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c3)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pa));
+  if(ttcn2string(t_rbs(tspt_bs_mod4pa)) != "{ bs := \'000*111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pq));
+  if(ttcn2string(t_rbs(tspt_bs_mod4pq)) != "{ bs := \'000?111\'B }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rbs(tspt_bs_mod4vifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4oifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4oifp)) != "{ bs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4aifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4aifp)) != "{ bs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4qifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4qifp)) != "{ bs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al1ifp)) != "{ bs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4al2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4al2ifp)) != "{ bs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql1ifp)) != "{ bs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4ql2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4ql2ifp)) != "{ bs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl1ifp)) != "{ bs := \'01101\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl2ifp)) != "{ bs := (\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4vl3ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4vl3ifp)) != "{ bs := (\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c1ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c1ifp)) != "{ bs := complement(\'01101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c2ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c2ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4c3ifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4c3ifp)) != "{ bs := complement(\'01101\'B, \'1010\'B, \'101\'B) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4paifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4paifp)) != "{ bs := \'000*111'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rbs(tspt_bs_mod4pqifp));
+  if(ttcn2string(t_rbs(tspt_bs_mod4pqifp)) != "{ bs := \'000?111\'B ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+//=============== string2ttcn ==============================
+
+testcase tc_bs_string2ttcn_mod4v() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4v)),t_rbs(tspt_bs_mod4v))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4v)),t_rbs(tspt_bs_mod4v),true)  
+}
+
+testcase tc_bs_string2ttcn_mod4o() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4o)),t_rbs(tspt_bs_mod4o))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4o)),t_rbs(tspt_bs_mod4o),true) 
+}
+
+testcase tc_bs_string2ttcn_mod4a() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4a)),t_rbs(tspt_bs_mod4a))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4a)),t_rbs(tspt_bs_mod4a),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4q() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4q)),t_rbs(tspt_bs_mod4q))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4q)),t_rbs(tspt_bs_mod4q),false) 
+}
+
+testcase tc_bs_string2ttcn_mod4al1() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al1)),t_rbs(tspt_bs_mod4al1))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al1)),t_rbs(tspt_bs_mod4al1),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4al2() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al2)),t_rbs(tspt_bs_mod4al2))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al2)),t_rbs(tspt_bs_mod4al2),false)  
+}
+
+
+testcase tc_bs_string2ttcn_mod4ql1() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql1)),t_rbs(tspt_bs_mod4ql1))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql1)),t_rbs(tspt_bs_mod4ql1),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4ql2() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql2)),t_rbs(tspt_bs_mod4ql2))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql2)),t_rbs(tspt_bs_mod4ql2),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl1() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl1)),t_rbs(tspt_bs_mod4vl1))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl1)),t_rbs(tspt_bs_mod4vl1),true)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl2() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl2)),t_rbs(tspt_bs_mod4vl2))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl2)),t_rbs(tspt_bs_mod4vl2),false)  
+}
+
+
+testcase tc_bs_string2ttcn_mod4vifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vifp)),t_rbs(tspt_bs_mod4vifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vifp)),t_rbs(tspt_bs_mod4vifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4oifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4oifp)),t_rbs(tspt_bs_mod4oifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4oifp)),t_rbs(tspt_bs_mod4oifp),false) 
+}
+
+testcase tc_bs_string2ttcn_mod4aifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4aifp)),t_rbs(tspt_bs_mod4aifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4aifp)),t_rbs(tspt_bs_mod4aifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4qifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4qifp)),t_rbs(tspt_bs_mod4qifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4qifp)),t_rbs(tspt_bs_mod4qifp),false) 
+}
+
+testcase tc_bs_string2ttcn_mod4al1ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al1ifp)),t_rbs(tspt_bs_mod4al1ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al1ifp)),t_rbs(tspt_bs_mod4al1ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4al2ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4al2ifp)),t_rbs(tspt_bs_mod4al2ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4al2ifp)),t_rbs(tspt_bs_mod4al2ifp),false)  
+}
+
+
+testcase tc_bs_string2ttcn_mod4ql1ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql1ifp)),t_rbs(tspt_bs_mod4ql1ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql1ifp)),t_rbs(tspt_bs_mod4ql1ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4ql2ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4ql2ifp)),t_rbs(tspt_bs_mod4ql2ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4ql2ifp)),t_rbs(tspt_bs_mod4ql2ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl1ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl1ifp)),t_rbs(tspt_bs_mod4vl1ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl1ifp)),t_rbs(tspt_bs_mod4vl1ifp),false)  
+}
+
+testcase tc_bs_string2ttcn_mod4vl2ifp() runs on MC {
+  f_string2ttcn_RBS_t(ttcn2string(t_rbs(tspt_bs_mod4vl2ifp)),t_rbs(tspt_bs_mod4vl2ifp))
+  f_string2ttcn_RBS_v(ttcn2string(t_rbs(tspt_bs_mod4vl2ifp)),t_rbs(tspt_bs_mod4vl2ifp),false)  
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+
+control {
+  log("***bitstring tests****");
+  execute(tc_bs_ModulePar_emb());
+  execute(tc_bs_ttcn2string_emb());
+  execute(tc_bs_string2ttcn_mod4v());
+  execute(tc_bs_string2ttcn_mod4o());
+  execute(tc_bs_string2ttcn_mod4a());
+  execute(tc_bs_string2ttcn_mod4q());
+  execute(tc_bs_string2ttcn_mod4al1());
+  execute(tc_bs_string2ttcn_mod4al2());
+  execute(tc_bs_string2ttcn_mod4ql1());
+  execute(tc_bs_string2ttcn_mod4ql2());
+  execute(tc_bs_string2ttcn_mod4vl1());
+  execute(tc_bs_string2ttcn_mod4vl2());
+  //execute(tc_bs_string2ttcn_mod4vl3());  
+  
+  execute(tc_bs_string2ttcn_mod4vifp());
+  execute(tc_bs_string2ttcn_mod4oifp());
+  execute(tc_bs_string2ttcn_mod4aifp());
+  execute(tc_bs_string2ttcn_mod4qifp());
+  execute(tc_bs_string2ttcn_mod4al1ifp());
+  execute(tc_bs_string2ttcn_mod4al2ifp());
+  execute(tc_bs_string2ttcn_mod4ql1ifp());
+  execute(tc_bs_string2ttcn_mod4ql2ifp());
+  execute(tc_bs_string2ttcn_mod4vl1ifp());
+  execute(tc_bs_string2ttcn_mod4vl2ifp());
+}
+
+}
+
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/boolean_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/boolean_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..eb9087e2d3e7916c80d8d0de9fd7feaa01658be4
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/boolean_test.ttcn
@@ -0,0 +1,371 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module boolean_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  template boolean tspt_b_t := true;
+  template boolean tspt_b_f := false;
+  template boolean tspt_b_o := omit;
+  template boolean tspt_b_a := *;
+  template boolean tspt_b_q := ? ;
+  template boolean tspt_b_tifp := true ifpresent;
+  template boolean tspt_b_fifp := false ifpresent;
+  template boolean tspt_b_oifp := omit ifpresent;  // omit ifpresent is meaningless!!!! => Should be comp error!!! TODO: put into neg test!!!
+  template boolean tspt_b_aifp := * ifpresent;  // ?????? only "? ispresent" acceptable 
+  template boolean tspt_b_qifp := ? ifpresent;
+  template boolean tspt_b_c := complement(true); //complemented list
+  template boolean tspt_b_tl :=  (true,false); //template list
+  //template boolean tspt_b_n := not(true);
+ 
+  //boolean template modification tests:
+  template boolean tspt_b_a1 := *; //modified for true
+  template boolean tspt_b_a2 := *; //modified for false
+  template boolean tspt_b_a3 := *; //modified for omit
+  template boolean tspt_b_a4 := *; //modified for *
+  template boolean tspt_b_a5 := ?; //modified for ?
+  template boolean tspt_b_a6 := ?; //modified for true ifpresent
+  template boolean tspt_b_a7 := true; //modified for false ifpresent
+  template boolean tspt_b_a8 := false; //modified for * ifpresent
+  template boolean tspt_b_a9 := false; //modified for * ifpresent
+  template boolean tspt_b_a10:= false; //modified for * ifpresent
+  template boolean tspt_b_a11:= false; //modified for complement(true)
+  template boolean tspt_b_err:= *; //wrong mod in cfg file  
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+  template boolean t_b_t := true;
+  template boolean t_b_f := false;
+  template boolean t_b_o := omit;
+  template boolean t_b_a := *;
+  template boolean t_b_q := ? ;
+  template boolean t_b_tifp := true ifpresent;
+  template boolean t_b_fifp := false ifpresent;
+  template boolean t_b_oifp := omit ifpresent;  // omit ifpresent is meaningless!!!! => Should be comp error!!! TODO: put into neg test!!!
+  template boolean t_b_aifp := * ifpresent;  // ?????? only "? ispresent" acceptable 
+  template boolean t_b_qifp := ? ifpresent;
+  template boolean t_b_c := complement(true);
+
+  template REC_BOH t_rec_b(template boolean pl_b) := {
+    b:= pl_b,
+    o:= omit,
+    h:= omit
+  }
+  
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  //not modulepar template - template string check
+  testcase tc_boolean_NoModulePar() runs on MC {
+    log( t_rec_b(t_b_t) );
+    if( log2str( t_rec_b(t_b_t) )  != "{ b := true, o := omit, h := omit }" ) { setverdict(fail) } else {setverdict(pass) }
+    if( log2str( t_rec_b(t_b_f) )  != "{ b := false, o := omit, h := omit }") { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_o) )  != "{ b := omit, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_a) )  != "{ b := *, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_q) )  != "{ b := ?, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_tifp) )  != "{ b := true ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_fifp) )  != "{ b := false ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_oifp) )  != "{ b := omit ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_aifp) )  != "{ b := * ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    if( log2str( t_rec_b(t_b_qifp) )  != "{ b := ? ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    //log(t_rec_b(t_b_c));
+    if( log2str( t_rec_b(t_b_c) )  != "{ b := complement(true), o := omit, h := omit }" ) { setverdict(fail) };
+  }
+
+  //modulepar template - template string check
+  testcase tc_boolean_Embedded() runs on MC {
+    log(tspt_b_t);
+    //embedded in record:
+    log( "template value:", t_rec_b(tspt_b_t) );
+    if( log2str( t_rec_b(tspt_b_t) ) != "{ b := true, o := omit, h := omit }" ) { setverdict(fail) } else {setverdict(pass) }    
+    log( "template value:", t_rec_b(tspt_b_f) );
+    if( log2str( t_rec_b(tspt_b_f) )  != "{ b := false, o := omit, h := omit }") { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_o) );
+    if( log2str( t_rec_b(tspt_b_o) )  != "{ b := omit, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_a) );
+    if( log2str( t_rec_b(tspt_b_a) )  != "{ b := *, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_q) );
+    if( log2str( t_rec_b(tspt_b_q) )  != "{ b := ?, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_tifp) );
+    if( log2str( t_rec_b(tspt_b_tifp) )  != "{ b := true ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_fifp) );
+    if( log2str( t_rec_b(tspt_b_fifp) )  != "{ b := false ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_aifp) );
+    if( log2str( t_rec_b(tspt_b_aifp) )  != "{ b := * ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_qifp) );
+    if( log2str( t_rec_b(tspt_b_qifp) )  != "{ b := ? ifpresent, o := omit, h := omit }" ) { setverdict(fail) };
+    log( "template value:", t_rec_b(tspt_b_c) );
+    if( log2str( t_rec_b(tspt_b_c) )  != "{ b := complement(true), o := omit, h := omit }" ) { setverdict(fail) };
+  }
+
+  //true
+  testcase tc_boolean_t() runs on MC {
+    log(tspt_b_t);
+    if( log2str( tspt_b_t)  != "true" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true}
+    var RoB vl_wrong_values := {false}
+    f_checkMatchingValues_bool(tspt_b_t,vl_good_values,vl_wrong_values);
+  }
+
+  //false
+  testcase tc_boolean_f() runs on MC {
+    log(tspt_b_f);
+    if( log2str( tspt_b_f)  != "false" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_f,vl_good_values,vl_wrong_values);    
+    }
+
+  //omit
+  testcase tc_boolean_o() runs on MC {
+    log(tspt_b_o);
+    if( log2str( tspt_b_o)  != "omit" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {};
+    var RoB vl_wrong_values := {true,false};
+    f_checkMatchingValues_bool(tspt_b_o,vl_good_values,vl_wrong_values);
+  }
+
+  //asterix
+  testcase tc_boolean_a() runs on MC {
+    log(tspt_b_a);
+    if( log2str( tspt_b_a)  != "*" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a,vl_good_values,vl_wrong_values);
+  }
+
+  //question mark
+  testcase tc_boolean_q() runs on MC {
+    log(tspt_b_q);
+    if( log2str( tspt_b_q)  != "?" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};//omit cannot be checked here
+    f_checkMatchingValues_bool(tspt_b_q,vl_good_values,vl_wrong_values);
+  }
+
+  //true ifpresent
+  testcase tc_boolean_tifp() runs on MC {
+    log(tspt_b_tifp);
+    if( log2str( tspt_b_tifp)  != "true ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true}
+    var RoB vl_wrong_values := {false}; //omit cannot be checked here
+    f_checkMatchingValues_bool(tspt_b_tifp,vl_good_values,vl_wrong_values);
+  }
+
+  //false ifpresent
+  testcase tc_boolean_fifp() runs on MC {
+    log(tspt_b_fifp);
+    if( log2str( tspt_b_fifp)  != "false ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_fifp,vl_good_values,vl_wrong_values);
+  }
+  //* ifpresent
+  testcase tc_boolean_aifp() runs on MC {
+    log(tspt_b_aifp);
+    if( log2str( tspt_b_aifp)  != "* ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false}
+    var RoB vl_wrong_values := {}; //omit cannot be checked here
+    f_checkMatchingValues_bool(tspt_b_aifp,vl_good_values,vl_wrong_values);
+  }
+
+  //? ifpresent
+  testcase tc_boolean_qifp() runs on MC {
+    log(tspt_b_qifp);
+    if( log2str( tspt_b_qifp)  != "? ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_qifp,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_c() runs on MC {
+    log(tspt_b_c);
+    if( log2str( tspt_b_c)  != "complement(true)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_c,vl_good_values,vl_wrong_values);
+  } 
+
+  testcase tc_boolean_tl() runs on MC {
+    log(tspt_b_tl);
+    if( log2str( tspt_b_tl)  != "(true, false)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_tl,vl_good_values,vl_wrong_values);
+  } 
+
+  //modulepar modified in cfg file
+  testcase tc_boolean_modified4t() runs on MC {
+    log(tspt_b_a1);
+    if( log2str( tspt_b_a1)  != "true" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true}
+    var RoB vl_wrong_values := {false}
+    f_checkMatchingValues_bool(tspt_b_a1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4f() runs on MC {
+    log(tspt_b_a2);
+    if( log2str( tspt_b_a2)  != "false" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_a2,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_boolean_modified4o() runs on MC {
+    log(tspt_b_a3);
+    if( log2str( tspt_b_a3)  != "omit" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {};
+    var RoB vl_wrong_values := {true,false};
+    f_checkMatchingValues_bool(tspt_b_a3,vl_good_values, vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4a() runs on MC {
+    log(tspt_b_a4);
+    if( log2str( tspt_b_a4)  != "*" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a4,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4q() runs on MC {
+    log(tspt_b_a5);
+    if( log2str( tspt_b_a5)  != "?" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a5,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4tifp() runs on MC {
+    log(tspt_b_a6);
+    if( log2str( tspt_b_a6)  != "true ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true};
+    var RoB vl_wrong_values := {false};
+    f_checkMatchingValues_bool(tspt_b_a6,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4fifp() runs on MC {
+    log(tspt_b_a7);
+    if( log2str( tspt_b_a7)  != "false ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_a7,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4aifp() runs on MC {
+    log(tspt_b_a8);
+    if( log2str( tspt_b_a8)  != "* ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a8,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4qifp() runs on MC {
+    log(tspt_b_a9);
+    if( log2str( tspt_b_a9)  != "? ifpresent" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a9,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_boolean_modified4tf() runs on MC {
+    log(tspt_b_a10);
+    if( log2str( tspt_b_a10)  != "(true, false)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {true,false};
+    var RoB vl_wrong_values := {};
+    f_checkMatchingValues_bool(tspt_b_a10,vl_good_values,vl_wrong_values);
+  }
+
+  //modified for complement(true)
+  testcase tc_boolean_modified4ct() runs on MC {
+    log(tspt_b_a11);
+    if( log2str( tspt_b_a11)  != "complement(true)" ) { setverdict(fail) } else {setverdict(pass) } 
+    var RoB vl_good_values := {false};
+    var RoB vl_wrong_values := {true};
+    f_checkMatchingValues_bool(tspt_b_a11,vl_good_values,vl_wrong_values);
+  }
+
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("****Boolean tests****")
+  execute(tc_boolean_NoModulePar());
+  execute(tc_boolean_Embedded());
+  execute(tc_boolean_t());
+  execute(tc_boolean_f());
+  execute(tc_boolean_o());
+  execute(tc_boolean_a());
+  execute(tc_boolean_tifp());
+  execute(tc_boolean_fifp());
+  execute(tc_boolean_aifp());
+  execute(tc_boolean_qifp());
+  execute(tc_boolean_c());
+  execute(tc_boolean_tl());
+  //boolean template, modified from cfg file:
+  execute(tc_boolean_modified4t());
+  execute(tc_boolean_modified4f());
+  execute(tc_boolean_modified4o());
+  execute(tc_boolean_modified4a());
+  execute(tc_boolean_modified4q());
+  execute(tc_boolean_modified4tifp());
+  execute(tc_boolean_modified4fifp());
+  execute(tc_boolean_modified4aifp());
+  execute(tc_boolean_modified4qifp());
+  execute(tc_boolean_modified4tf());
+  execute(tc_boolean_modified4ct());	  
+}
+
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/charstring_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/charstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..87d50f6aae9e43ee8842a826075abbc03c9fc108
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/charstring_test.ttcn
@@ -0,0 +1,1417 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module charstring_test {
+
+//=========================================================================
+// Import Part
+//=========================================================================
+
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //modulepar charstrings not modified from cfg file
+  template charstring tspt_cs_v := "ABBA";
+  template charstring tspt_cs_o := omit;
+  template charstring tspt_cs_a := *;
+  template charstring tspt_cs_q := ?;
+  template charstring tspt_cs_al1 := * length(2); //length restriction
+  template charstring tspt_cs_al2 := * length(2..4);
+  template charstring tspt_cs_ql1 := ? length(2);
+  template charstring tspt_cs_ql2 := ? length(2..4);
+  template charstring tspt_cs_vl1 := ("ABBA");
+  template charstring tspt_cs_vl2 := ("ABBA","baba");
+  template charstring tspt_cs_vl3 := ("ABBA","baba","Bye");
+  template charstring tspt_cs_c1 := complement("ABBA")
+  template charstring tspt_cs_c2 := complement("ABBA","baba");
+  template charstring tspt_cs_c3 := complement("ABBA","baba","Bye");
+  template charstring tspt_cs_r1 := ("A".."B"); //range
+  template charstring tspt_cs_r2 := ("a".."c");
+  template charstring tspt_cs_pa := pattern "abc*xyz"
+  template charstring tspt_cs_pq := pattern "abc?xyz"
+  
+  template charstring tspt_cs_vifp := "ABBA" ifpresent;
+  template charstring tspt_cs_oifp := omit ifpresent;
+  template charstring tspt_cs_aifp := * ifpresent;
+  template charstring tspt_cs_qifp := ? ifpresent;
+  template charstring tspt_cs_al1ifp := * length(2) ifpresent; //length restriction
+  template charstring tspt_cs_al2ifp := * length(2..4) ifpresent;
+  template charstring tspt_cs_ql1ifp := ? length(2) ifpresent;
+  template charstring tspt_cs_ql2ifp := ? length(2..4) ifpresent;
+  template charstring tspt_cs_vl1ifp := ("ABBA") ifpresent;
+  template charstring tspt_cs_vl2ifp := ("ABBA","baba") ifpresent;
+  template charstring tspt_cs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_c1ifp := complement("ABBA") ifpresent
+  template charstring tspt_cs_c2ifp := complement("ABBA","baba") ifpresent;
+  template charstring tspt_cs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_r1ifp := ("A".."B") ifpresent; //range
+  template charstring tspt_cs_r2ifp := ("a".."c") ifpresent;
+  template charstring tspt_cs_paifp := pattern "abc*xyz"  ifpresent
+  template charstring tspt_cs_pqifp := pattern "abc?xyz"  ifpresent  
+  
+  //modulepar charstrings modified from cfg file
+  template charstring tspt_cs_mod4v := * //after mod:"ABBA";
+  template charstring tspt_cs_mod4o := * //omit;
+  template charstring tspt_cs_mod4ol := * //omit;
+  template charstring tspt_cs_mod4a := "A" //*;
+  template charstring tspt_cs_mod4q := "" //?;
+  template charstring tspt_cs_mod4al1 := "A" //* length(2); //length restriction
+  template charstring tspt_cs_mod4al2 := "Original" //mofified for: * length(2..4);
+  template charstring tspt_cs_mod4ql1 := "Original" //mofified for:? length(2);
+  template charstring tspt_cs_mod4ql2 := "Original" //mofified for:? length(2..4);
+  template charstring tspt_cs_mod4vl1 := ("ABBA") //TODO: Adam //It should be mofified for: ("ABBA");
+  template charstring tspt_cs_mod4vl2 := "Original" //mofified for:("ABBA","baba");
+  template charstring tspt_cs_mod4vl3 := "Original" //mofified for:("ABBA","baba","Bye");
+  template charstring tspt_cs_mod4c1 := "Original" //mofified for:complement("ABBA")
+  template charstring tspt_cs_mod4c2 := "Original" //mofified for:complement("ABBA","baba");
+  template charstring tspt_cs_mod4c3 := "Original" //mofified for:complement("ABBA","baba","Bye");
+  template charstring tspt_cs_mod4r1 := "Original" //mofified for:("A".."B"); //range
+  template charstring tspt_cs_mod4r2 := "Original" //mofified for:("a".."c");
+  template charstring tspt_cs_mod4pa := "Original" //mofified for:pattern "abc*xyz"
+  template charstring tspt_cs_mod4pq := "Original" //mofified for:pattern "abc?xyz"
+  
+  template charstring tspt_cs_mod4vifp := "Original" //mofified for:"ABBA" ifpresent;
+  template charstring tspt_cs_mod4oifp := "Original" //mofified for:omit ifpresent;
+  template charstring tspt_cs_mod4aifp := "Original" //mofified for:* ifpresent;
+  template charstring tspt_cs_mod4qifp := "Original" //mofified for:? ifpresent;
+  template charstring tspt_cs_mod4al1ifp := "Original" //mofified for:* length(2) ifpresent; //length restriction
+  template charstring tspt_cs_mod4al2ifp := "Original" //mofified for:* length(2..4) ifpresent;
+  template charstring tspt_cs_mod4ql1ifp := "Original" //mofified for:? length(2) ifpresent;
+  template charstring tspt_cs_mod4ql2ifp := "Original" //mofified for:? length(2..4) ifpresent;
+  template charstring tspt_cs_mod4vl1ifp :=  ("ABBA") ifpresent //TODO: Adam //It should be mofified for: ("ABBA");
+  template charstring tspt_cs_mod4vl2ifp := "Original" //mofified for:("ABBA","baba") ifpresent;
+  template charstring tspt_cs_mod4vl3ifp := "Original" //mofified for:("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_mod4c1ifp := "Original" //mofified for:complement("ABBA") ifpresent
+  template charstring tspt_cs_mod4c2ifp := "Original" //mofified for:complement("ABBA","baba") ifpresent;
+  template charstring tspt_cs_mod4c3ifp := "Original" //mofified for:complement("ABBA","baba","Bye") ifpresent;
+  template charstring tspt_cs_mod4r1ifp := "Original" //mofified for:("A".."B") ifpresent; //range
+  template charstring tspt_cs_mod4r2ifp := "Original" //mofified for:("a".."c") ifpresent;
+  template charstring tspt_cs_mod4paifp := "Original" //mofified for:pattern "abc*xyz"  ifpresent
+  template charstring tspt_cs_mod4pqifp := "Original" //mofified for:pattern "abc?xyz"  ifpresent  
+  
+}
+
+//=========================================================================
+// Templates
+//=========================================================================
+// not modulepars
+template charstring t_cs_v := "ABBA";
+template charstring t_cs_o := omit;
+template charstring t_cs_a := *;
+template charstring t_cs_q := ?;
+template charstring t_cs_al1 := * length(2); //length restriction
+template charstring t_cs_al2 := * length(2..4);
+template charstring t_cs_ql1 := ? length(2);
+template charstring t_cs_ql2 := ? length(2..4);
+template charstring t_cs_vl1 := ("ABBA");
+template charstring t_cs_vl2 := ("ABBA","baba");
+template charstring t_cs_vl3 := ("ABBA","baba","Bye");
+template charstring t_cs_c1 := complement("ABBA")
+template charstring t_cs_c2 := complement("ABBA","baba");
+template charstring t_cs_c3 := complement("ABBA","baba","Bye");
+template charstring t_cs_r1 := ("A".."B"); //range
+template charstring t_cs_r2 := ("a".."c");
+template charstring t_cs_pa := pattern "abc*xyz"
+template charstring t_cs_pq := pattern "abc?xyz"
+
+template charstring t_cs_vifp := "ABBA" ifpresent;
+template charstring t_cs_oifp := omit ifpresent;
+template charstring t_cs_aifp := * ifpresent;
+template charstring t_cs_qifp := ? ifpresent;
+template charstring t_cs_al1ifp := * length(2) ifpresent; //length restriction
+template charstring t_cs_al2ifp := * length(2..4) ifpresent;
+template charstring t_cs_ql1ifp := ? length(2) ifpresent;
+template charstring t_cs_ql2ifp := ? length(2..4) ifpresent;
+template charstring t_cs_vl1ifp := ("ABBA") ifpresent;
+template charstring t_cs_vl2ifp := ("ABBA","baba") ifpresent;
+template charstring t_cs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+template charstring t_cs_c1ifp := complement("ABBA") ifpresent
+template charstring t_cs_c2ifp := complement("ABBA","baba") ifpresent;
+template charstring t_cs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+template charstring t_cs_r1ifp := ("A".."B") ifpresent; //range
+template charstring t_cs_r2ifp := ("a".."c") ifpresent;
+template charstring t_cs_paifp := pattern "abc*xyz"  ifpresent
+template charstring t_cs_pqifp := pattern "abc?xyz"  ifpresent
+
+//=========================================================================
+// Functions
+//=========================================================================
+function f_string2ttcn_cs_t(in charstring pl_cs, in template charstring pl_expected_result) {
+  var template charstring vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_cs_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template charstring vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_cs_v(in charstring pl_cs, in template charstring pl_expected_result, in boolean pl_ok_expected) {
+  var charstring vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_cs_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var charstring vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//rrec
+
+function f_string2ttcn_rcs_t(in charstring pl_rcs, in template RCS pl_expected_result) {
+  var template RCS vl_result;
+  @try {
+    string2ttcn(pl_rcs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_rcs_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template RCS vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_rcs_v(in charstring pl_cs, in template RCS pl_expected_result, in boolean pl_ok_expected) {
+  var RCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_rcs_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_cs_v() runs on MC {
+  var RoCS vl_good_values := {"ABBA"}
+  var RoCS vl_wrong_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  f_checkMatchingValues_cs(t_cs_v, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_o() runs on MC {
+  var RoCS vl_good_values := {}
+  var RoCS vl_wrong_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  f_checkMatchingValues_cs(t_cs_o, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_a() runs on MC {
+  var RoCS vl_good_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  var RoCS vl_wrong_values := {}
+  f_checkMatchingValues_cs(t_cs_a, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_q() runs on MC {
+  var RoCS vl_good_values := {"","A","AB","ABB","ABBAB","abba","anything","XXXX","ABCDE"}
+  var RoCS vl_wrong_values := {}
+  f_checkMatchingValues_cs(t_cs_q, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := * length(2); //length restriction
+testcase tc_cs_al1() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  "}
+  var RoCS vl_wrong_values := {"","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_al1, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := * length(2..4); //length restriction
+testcase tc_cs_al2() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ","123", "ABC","abc","ABBA"}
+  var RoCS vl_wrong_values := {"","A", "ABBAB","anything","XXXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_al2, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := ? length(2); //length restriction
+testcase tc_cs_ql1() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  "}
+  var RoCS vl_wrong_values := {"","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_ql1, vl_good_values,vl_wrong_values);
+}
+
+// t_cs_al1 := ? length(2..4); //length restriction
+testcase tc_cs_ql2() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ","123", "ABC","abc","ABBA"}
+  var RoCS vl_wrong_values := {"","A", "ABBAB","anything","XXXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_ql2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_vl1() runs on MC {
+  var RoCS vl_good_values := {"ABBA"}
+  var RoCS vl_wrong_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_vl1, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_vl2() runs on MC {
+  var RoCS vl_good_values := {"ABBA","baba"}
+  var RoCS vl_wrong_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_vl2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_vl3() runs on MC {
+  var RoCS vl_good_values := {"ABBA","baba","Bye"}
+  var RoCS vl_wrong_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_vl3, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_c1() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  var RoCS vl_wrong_values := {"ABBA"}
+  f_checkMatchingValues_cs(t_cs_c1, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_c2() runs on MC {
+  var RoCS vl_good_values :={"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  var RoCS vl_wrong_values :=  {"ABBA","baba"}
+  f_checkMatchingValues_cs(t_cs_c2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_c3() runs on MC {
+  var RoCS vl_good_values := {"AB", "ab","ba","12","A1","  ""","A","ABB","ABBAB","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  var RoCS vl_wrong_values := {"ABBA","baba","Bye"}
+  f_checkMatchingValues_cs(t_cs_c3, vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_r1() runs on MC {
+  var RoCS vl_good_values := {"A","B","ABBA","AB","AAAAAA","BBBBB","ABBABABA"}
+  var RoCS vl_wrong_values := { "ab","ba","Bye","12","A1","  ","abba","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_r1, vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_r2() runs on MC {
+  var RoCS vl_good_values := {"","a","b","c","ab","cba","abbac","abbababa","cabacccc"}
+  var RoCS vl_wrong_values := {"A","B","ABBA","AB","AAAAAAc","BBBBB","ABBABABAc", "Bye","12","abcA1","  ","anything","XXXX","ABCDE","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
+  f_checkMatchingValues_cs(t_cs_r2, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_pa() runs on MC {
+  var RoCS vl_good_values := { "abcxyz","abcAxyz","abc45xyz" }
+  var RoCS vl_wrong_values := { "ab","ba","Bye", "abcyz"}
+  f_checkMatchingValues_cs(t_cs_pa, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_pq() runs on MC {
+  var RoCS vl_good_values := {"abcAxyz","abc4xyz" }
+  var RoCS vl_wrong_values := { "ab","ba","Bye", "abcxyz","abc45xyz"}
+  f_checkMatchingValues_cs(t_cs_pq, vl_good_values,vl_wrong_values);
+}
+
+//=== charstring embedded in record ====
+
+testcase tc_cs_v_emb() runs on MC {
+  var RoRCS vl_good_values := {{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_v), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_o_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_o), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_a_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_a), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_q_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{omit}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_q), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2); //length restriction
+testcase tc_cs_al1_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2..4); //length restriction
+testcase tc_cs_al2_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al2), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := ? length(2); //length restriction
+testcase tc_cs_ql1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := ? length(2..4); //length restriction
+testcase tc_cs_ql2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql2), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+testcase tc_cs_vl1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl1), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba")
+testcase tc_cs_vl2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl2), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_vl3_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl3), vl_good_values,vl_wrong_values);
+}
+
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA")
+testcase tc_cs_c1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{omit},{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c1), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba");
+testcase tc_cs_c2_emb() runs on MC {
+  var RoRCS vl_good_values :={{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{omit},{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c2), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba","Bye");
+testcase tc_cs_c3_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{omit},{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c3), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_r1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{omit},{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r1),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_r2_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r2), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_pa_emb() runs on MC {
+  var RoRCS vl_good_values := {{ "abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_pa), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_pq_emb() runs on MC {
+  var RoRCS vl_good_values := {{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{ "ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_pq), vl_good_values,vl_wrong_values);
+}
+
+//=========== Charstring Tests without Module Params and with "ifpresent" clause
+//=== charstring embedded in record ====
+
+testcase tc_cs_vifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_oifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_oifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_aifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_aifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_qifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_qifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2); //length restriction
+testcase tc_cs_al1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := * length(2..4); //length restriction
+testcase tc_cs_al2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_al2ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1 := ? length(2); //length restriction
+testcase tc_cs_ql1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(t_cs_al1ifp := ? length(2..4); //length restriction
+testcase tc_cs_ql2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_ql2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+testcase tc_cs_vl1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl1ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba")
+testcase tc_cs_vl2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_vl3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_vl3ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA")
+testcase tc_cs_c1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c1ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba");
+testcase tc_cs_c2ifp_emb() runs on MC {
+  var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c2ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba","Bye");
+testcase tc_cs_c3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_c3ifp), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_r1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r1ifp),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_r2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_r2ifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_paifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_paifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_pqifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(t_cs_pqifp), vl_good_values,vl_wrong_values);
+}
+
+
+//=========== Charstring Tests with Module Parameters ======
+testcase tc_cs_ModulePar_emb() runs on MC {
+  log(t_rcs(tspt_cs_mod4v));
+  if(log2str(t_rcs(tspt_cs_mod4v)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4o));
+  if(log2str(t_rcs(tspt_cs_mod4o)) != "{ cs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4a));
+  if(log2str(t_rcs(tspt_cs_mod4a)) != "{ cs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4q));
+  if(log2str(t_rcs(tspt_cs_mod4q)) != "{ cs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1));
+  if(log2str(t_rcs(tspt_cs_mod4al1)) != "{ cs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2));
+  if(log2str(t_rcs(tspt_cs_mod4al2)) != "{ cs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1));
+  if(log2str(t_rcs(tspt_cs_mod4ql1)) != "{ cs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2));
+  if(log2str(t_rcs(tspt_cs_mod4ql2)) != "{ cs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rcs(tspt_cs_mod4vl1),"<");
+  if(log2str(t_rcs(tspt_cs_mod4vl1)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2));
+  if(log2str(t_rcs(tspt_cs_mod4vl2)) != "{ cs := (\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3));
+  if(log2str(t_rcs(tspt_cs_mod4vl3)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1));
+  if(log2str(t_rcs(tspt_cs_mod4c1)) != "{ cs := complement(\"ABBA\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2));
+  if(log2str(t_rcs(tspt_cs_mod4c2)) != "{ cs := complement(\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3));
+  if(log2str(t_rcs(tspt_cs_mod4c3)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1));
+  if(log2str(t_rcs(tspt_cs_mod4r1)) != "{ cs := (\"A\" .. \"B\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2));
+  if(log2str(t_rcs(tspt_cs_mod4r2)) != "{ cs := (\"a\" .. \"c\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pa));
+  if(log2str(t_rcs(tspt_cs_mod4pa)) != "{ cs := pattern \"abc*xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pq));
+  if(log2str(t_rcs(tspt_cs_mod4pq)) != "{ cs := pattern \"abc?xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rcs(tspt_cs_mod4vifp));
+  if(log2str(t_rcs(tspt_cs_mod4vifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4oifp));
+  if(log2str(t_rcs(tspt_cs_mod4oifp)) != "{ cs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4aifp));
+  if(log2str(t_rcs(tspt_cs_mod4aifp)) != "{ cs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4qifp));
+  if(log2str(t_rcs(tspt_cs_mod4qifp)) != "{ cs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4al1ifp)) != "{ cs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4al2ifp)) != "{ cs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4ql1ifp)) != "{ cs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4ql2ifp)) != "{ cs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4vl1ifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4vl2ifp)) != "{ cs := (\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3ifp));
+  if(log2str(t_rcs(tspt_cs_mod4vl3ifp)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4c1ifp)) != "{ cs := complement(\"ABBA\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4c2ifp)) != "{ cs := complement(\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3ifp));
+  if(log2str(t_rcs(tspt_cs_mod4c3ifp)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1ifp));
+  if(log2str(t_rcs(tspt_cs_mod4r1ifp)) != "{ cs := (\"A\" .. \"B\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2ifp));
+  if(log2str(t_rcs(tspt_cs_mod4r2ifp)) != "{ cs := (\"a\" .. \"c\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4paifp));
+  if(log2str(t_rcs(tspt_cs_mod4paifp)) != "{ cs := pattern \"abc*xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pqifp));
+  if(log2str(t_rcs(tspt_cs_mod4pqifp)) != "{ cs := pattern \"abc?xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+
+testcase tc_cs_mod4v_emb() runs on MC {
+  var RoRCS vl_good_values := {{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4v), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4o_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4o), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4a_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4a), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4q_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{omit}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4q), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := * length(2); //length restriction
+testcase tc_cs_mod4al1_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al2 := * length(2..4); //length restriction
+testcase tc_cs_mod4al2_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al2), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4ql1 := ? length(2); //length restriction
+testcase tc_cs_mod4ql1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql1), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4ql2 := ? length(2..4); //length restriction
+testcase tc_cs_mod4ql2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql2), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+/* TODO:Adam*/
+testcase tc_cs_mod4vl1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl1), vl_good_values,vl_wrong_values);
+}
+
+//("ABBA", "baba")
+testcase tc_cs_mod4vl2_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl2), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_mod4vl3_emb() runs on MC {
+  var RoRCS vl_good_values := {{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl3), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA")
+testcase tc_cs_mod4c1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{omit},{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c1), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba");
+testcase tc_cs_mod4c2_emb() runs on MC {
+  var RoRCS vl_good_values :={{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{omit},{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c2), vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//complement("ABBA","baba","Bye");
+testcase tc_cs_mod4c3_emb() runs on MC {
+  var RoRCS vl_good_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{omit},{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c3), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_mod4r1_emb() runs on MC {
+  var RoRCS vl_good_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{omit},{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r1),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_mod4r2_emb() runs on MC {
+  var RoRCS vl_good_values := {{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r2), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_mod4pa_emb() runs on MC {
+  var RoRCS vl_good_values := {{ "abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4pa), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_mod4pq_emb() runs on MC {
+  var RoRCS vl_good_values := {{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{omit},{ "ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4pq), vl_good_values,vl_wrong_values);
+}
+
+//===
+testcase tc_cs_mod4vifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:="ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4oifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{cs:=omit}};
+  var RoRCS vl_wrong_values := {{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4oifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4aifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {{}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4aifp), vl_good_values,vl_wrong_values);
+}
+
+testcase tc_cs_mod4qifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"A"},{"AB"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"}}
+  var RoRCS vl_wrong_values := {}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4qifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := * length(2); //length restriction
+testcase tc_cs_mod4al1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := * length(2..4); //length restriction
+testcase tc_cs_mod4al2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4al2ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1 := ? length(2); //length restriction
+testcase tc_cs_mod4ql1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql1ifp), vl_good_values,vl_wrong_values);
+}
+
+// t_rcs(tspt_cs_mod4al1ifp := ? length(2..4); //length restriction
+testcase tc_cs_mod4ql2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{"123"},{ "ABC"},{"abc"},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{""},{"A"},{ "ABBAB"},{"anything"},{"XXXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4ql2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA")
+/* TODO:Adam*/
+testcase tc_cs_mod4vl1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"}}
+  var RoRCS vl_wrong_values := {{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl1ifp), vl_good_values,vl_wrong_values);
+}
+
+//("ABBA","baba") //TR: HR98602, 'Matching fault in case of template ("A","B") ifpresent'
+testcase tc_cs_mod4vl2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl2ifp), vl_good_values,vl_wrong_values);
+}
+//("ABBA","baba","Bye")
+testcase tc_cs_mod4vl3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"ABBA"},{"baba"},{"Bye"}}
+  var RoRCS vl_wrong_values := {{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4vl3ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA")
+testcase tc_cs_mod4c1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  """},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c1ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba");
+testcase tc_cs_mod4c2ifp_emb() runs on MC {
+  var RoRCS vl_good_values :={{omit},{"AB"},{"ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values :=  {{"ABBA"},{"baba"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c2ifp), vl_good_values,vl_wrong_values);
+}
+//complement("ABBA","baba","Bye");
+testcase tc_cs_mod4c3ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"AB"},{ "ab"},{"ba"},{"12"},{"A1"},{"  "},{""},{"A"},{"ABB"},{"ABBAB"},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  var RoRCS vl_wrong_values := {{"ABBA"},{"baba"},{"Bye"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4c3ifp), vl_good_values,vl_wrong_values);
+}
+
+//("A".."B")
+testcase tc_cs_mod4r1ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAA"},{"BBBBB"},{"ABBABABA"}}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{"12"},{"A1"},{"  "},{"abba"},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r1ifp),vl_good_values,vl_wrong_values);
+}
+//"a".."c"
+testcase tc_cs_mod4r2ifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{""},{"a"},{"b"},{"c"},{"ab"},{"cba"},{"abbac"},{"abbababa"},{"cabacccc"}}
+  var RoRCS vl_wrong_values := {{"A"},{"B"},{"ABBA"},{"AB"},{"AAAAAAc"},{"BBBBB"},{"ABBABABAc"},{ "Bye"},{"12"},{"abcA1"},{"  "},{"anything"},{"XXXX"},{"ABCDE"},{"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4r2ifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc*xyz"
+testcase tc_cs_mod4paifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcxyz"},{"abcAxyz"},{"abc45xyz" }}
+  var RoRCS vl_wrong_values := {{""},{"ab"},{"ba"},{"Bye"},{"abcyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4paifp), vl_good_values,vl_wrong_values);
+}
+//pattern "abc?xyz"
+testcase tc_cs_mod4pqifp_emb() runs on MC {
+  var RoRCS vl_good_values := {{omit},{"abcAxyz"},{"abc4xyz" }}
+  var RoRCS vl_wrong_values := {{"ab"},{"ba"},{"Bye"},{ "abcxyz"},{"abc45xyz"}}
+  f_checkMatchingValues_rcs(t_rcs(tspt_cs_mod4pqifp), vl_good_values,vl_wrong_values);
+}
+
+//=
+testcase tc_cs_ttcn2string_emb() runs on MC {
+  log(t_rcs(tspt_cs_mod4v));
+  if(ttcn2string(t_rcs(tspt_cs_mod4v)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4o));
+  if(ttcn2string(t_rcs(tspt_cs_mod4o)) != "{ cs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4a));
+  if(ttcn2string(t_rcs(tspt_cs_mod4a)) != "{ cs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4q));
+  if(ttcn2string(t_rcs(tspt_cs_mod4q)) != "{ cs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al1)) != "{ cs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al2)) != "{ cs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql1)) != "{ cs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql2)) != "{ cs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rcs(tspt_cs_mod4vl1),"<");
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl1)) != "{ cs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl2)) != "{ cs := (\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl3)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c1)) != "{ cs := complement(\"ABBA\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c2)) != "{ cs := complement(\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c3)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r1)) != "{ cs := (\"A\" .. \"B\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r2)) != "{ cs := (\"a\" .. \"c\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pa));
+  if(ttcn2string(t_rcs(tspt_cs_mod4pa)) != "{ cs := pattern \"abc*xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pq));
+  if(ttcn2string(t_rcs(tspt_cs_mod4pq)) != "{ cs := pattern \"abc?xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rcs(tspt_cs_mod4vifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4oifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4oifp)) != "{ cs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4aifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4aifp)) != "{ cs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4qifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4qifp)) != "{ cs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al1ifp)) != "{ cs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4al2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4al2ifp)) != "{ cs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql1ifp)) != "{ cs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4ql2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4ql2ifp)) != "{ cs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl1ifp)) != "{ cs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl2ifp)) != "{ cs := (\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4vl3ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4vl3ifp)) != "{ cs := (\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c1ifp)) != "{ cs := complement(\"ABBA\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c2ifp)) != "{ cs := complement(\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4c3ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4c3ifp)) != "{ cs := complement(\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r1ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r1ifp)) != "{ cs := (\"A\" .. \"B\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4r2ifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4r2ifp)) != "{ cs := (\"a\" .. \"c\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4paifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4paifp)) != "{ cs := pattern \"abc*xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rcs(tspt_cs_mod4pqifp));
+  if(ttcn2string(t_rcs(tspt_cs_mod4pqifp)) != "{ cs := pattern \"abc?xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+//==== string2ttcn testcases ===============================================================
+//These testcases tests if
+// 1. string2ttcn can generate the expected template
+// 2. string2ttcn can generate the expected value, if possible/required (=true the third arg)
+//===========================================================================================
+testcase tc_cs_string2ttcn_mod4v() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4v)),t_rcs(tspt_cs_mod4v));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4v)),t_rcs(tspt_cs_mod4v),true);
+}
+
+testcase tc_cs_string2ttcn_mod4o() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4o)),t_rcs(tspt_cs_mod4o));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4o)),t_rcs(tspt_cs_mod4o),true);
+}
+
+//omit length
+testcase tc_cs_string2ttcn_mod4ol() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ol)),t_rcs(tspt_cs_mod4ol));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ol)),t_rcs(tspt_cs_mod4ol),false);
+}
+
+testcase tc_cs_string2ttcn_mod4a() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4a)),t_rcs(tspt_cs_mod4a));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4a)),t_rcs(tspt_cs_mod4a),false);
+}
+
+testcase tc_cs_string2ttcn_mod4q() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4q)),t_rcs(tspt_cs_mod4q));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4q)),t_rcs(tspt_cs_mod4q),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al1)),t_rcs(tspt_cs_mod4al1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al1)),t_rcs(tspt_cs_mod4al1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al2)),t_rcs(tspt_cs_mod4al2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al2)),t_rcs(tspt_cs_mod4al2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql1)),t_rcs(tspt_cs_mod4ql1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql1)),t_rcs(tspt_cs_mod4ql1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql2)),t_rcs(tspt_cs_mod4ql2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql2)),t_rcs(tspt_cs_mod4ql2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl1)),t_rcs(tspt_cs_mod4vl1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl1)),t_rcs(tspt_cs_mod4vl1),true);
+}
+
+testcase tc_cs_string2ttcn_mod4vl2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl2)),t_rcs(tspt_cs_mod4vl2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl2)),t_rcs(tspt_cs_mod4vl2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl3() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl3)),t_rcs(tspt_cs_mod4vl3));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl3)),t_rcs(tspt_cs_mod4vl3),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c1)),t_rcs(tspt_cs_mod4c1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c1)),t_rcs(tspt_cs_mod4c1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c2)),t_rcs(tspt_cs_mod4c2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c2)),t_rcs(tspt_cs_mod4c2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c3() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c3)),t_rcs(tspt_cs_mod4c3));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c3)),t_rcs(tspt_cs_mod4c3),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r1() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r1)),t_rcs(tspt_cs_mod4r1));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r1)),t_rcs(tspt_cs_mod4r1),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r2() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r2)),t_rcs(tspt_cs_mod4r2));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r2)),t_rcs(tspt_cs_mod4r2),false);
+}
+
+testcase tc_cs_string2ttcn_mod4pa() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4pa)),t_rcs(tspt_cs_mod4pa));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4pa)),t_rcs(tspt_cs_mod4pa),false);
+}
+
+testcase tc_cs_string2ttcn_mod4pq() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4pq)),t_rcs(tspt_cs_mod4pq));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4pq)),t_rcs(tspt_cs_mod4pq),false);
+}
+
+// ifp
+
+testcase tc_cs_string2ttcn_mod4vifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vifp)),t_rcs(tspt_cs_mod4vifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vifp)),t_rcs(tspt_cs_mod4vifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4oifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4oifp)),t_rcs(tspt_cs_mod4oifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4oifp)),t_rcs(tspt_cs_mod4oifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4aifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4aifp)),t_rcs(tspt_cs_mod4aifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4aifp)),t_rcs(tspt_cs_mod4aifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4qifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4qifp)),t_rcs(tspt_cs_mod4qifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4qifp)),t_rcs(tspt_cs_mod4qifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al1ifp)),t_rcs(tspt_cs_mod4al1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al1ifp)),t_rcs(tspt_cs_mod4al1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4al2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4al2ifp)),t_rcs(tspt_cs_mod4al2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4al2ifp)),t_rcs(tspt_cs_mod4al2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql1ifp)),t_rcs(tspt_cs_mod4ql1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql1ifp)),t_rcs(tspt_cs_mod4ql1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4ql2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4ql2ifp)),t_rcs(tspt_cs_mod4ql2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4ql2ifp)),t_rcs(tspt_cs_mod4ql2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl1ifp)),t_rcs(tspt_cs_mod4vl1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl1ifp)),t_rcs(tspt_cs_mod4vl1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl2ifp)),t_rcs(tspt_cs_mod4vl2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl2ifp)),t_rcs(tspt_cs_mod4vl2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4vl3ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4vl3ifp)),t_rcs(tspt_cs_mod4vl3ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4vl3ifp)),t_rcs(tspt_cs_mod4vl3ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c1ifp)),t_rcs(tspt_cs_mod4c1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c1ifp)),t_rcs(tspt_cs_mod4c1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c2ifp)),t_rcs(tspt_cs_mod4c2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c2ifp)),t_rcs(tspt_cs_mod4c2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4c3ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4c3ifp)),t_rcs(tspt_cs_mod4c3ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4c3ifp)),t_rcs(tspt_cs_mod4c3ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r1ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r1ifp)),t_rcs(tspt_cs_mod4r1ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r1ifp)),t_rcs(tspt_cs_mod4r1ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4r2ifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4r2ifp)),t_rcs(tspt_cs_mod4r2ifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4r2ifp)),t_rcs(tspt_cs_mod4r2ifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4paifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4paifp)),t_rcs(tspt_cs_mod4paifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4paifp)),t_rcs(tspt_cs_mod4paifp),false);
+}
+
+testcase tc_cs_string2ttcn_mod4pqifp() runs on MC {
+  f_string2ttcn_rcs_t(ttcn2string(t_rcs(tspt_cs_mod4pqifp)),t_rcs(tspt_cs_mod4pqifp));
+  f_string2ttcn_rcs_v(ttcn2string(t_rcs(tspt_cs_mod4pqifp)),t_rcs(tspt_cs_mod4pqifp),false);
+}
+
+control { 
+  
+  log("***charstring tests****");
+  execute(tc_cs_v());
+  execute(tc_cs_o());
+  execute(tc_cs_a());
+  execute(tc_cs_q());
+  execute(tc_cs_al1());
+  execute(tc_cs_al2());  
+  execute(tc_cs_ql1());
+  execute(tc_cs_ql2());
+  //execute(tc_cs_c());
+  execute(tc_cs_vl1());
+  execute(tc_cs_vl2());
+  execute(tc_cs_vl3());
+  execute(tc_cs_c1());
+  execute(tc_cs_c2());
+  execute(tc_cs_c3());
+  execute(tc_cs_r1());
+  execute(tc_cs_r2());
+  execute(tc_cs_pa());
+  execute(tc_cs_pq());
+  //=== charstring embedded in record ====
+  execute(tc_cs_v_emb());
+  execute(tc_cs_o_emb());
+  execute(tc_cs_a_emb());
+  execute(tc_cs_q_emb());
+  execute(tc_cs_al1_emb());
+  execute(tc_cs_al2_emb());  
+  execute(tc_cs_ql1_emb());
+  execute(tc_cs_ql2_emb());
+  //execute(tc_cs_c_emb());
+  execute(tc_cs_vl1_emb());
+  execute(tc_cs_vl2_emb());
+  execute(tc_cs_vl3_emb());
+  execute(tc_cs_c1_emb());
+  execute(tc_cs_c2_emb());
+  execute(tc_cs_c3_emb());
+  execute(tc_cs_r1_emb());
+  execute(tc_cs_r2_emb());
+  execute(tc_cs_pa_emb());
+  execute(tc_cs_pq_emb());
+  //embedded + ifpresent
+  execute(tc_cs_vifp_emb());
+  execute(tc_cs_oifp_emb());
+  execute(tc_cs_aifp_emb());
+  execute(tc_cs_qifp_emb());
+  execute(tc_cs_al1ifp_emb());
+  execute(tc_cs_al2ifp_emb());  
+  execute(tc_cs_ql1ifp_emb());
+  execute(tc_cs_ql2ifp_emb());
+  execute(tc_cs_vl1ifp_emb());
+  //execute(tc_cs_vl2ifp_emb());
+  execute(tc_cs_vl3ifp_emb());
+  execute(tc_cs_c1ifp_emb());
+  execute(tc_cs_c2ifp_emb());
+  execute(tc_cs_c3ifp_emb());
+  execute(tc_cs_r1ifp_emb());
+  execute(tc_cs_r2ifp_emb());
+  execute(tc_cs_paifp_emb());
+  execute(tc_cs_pqifp_emb());
+  
+  //======modified modulepar template wth type of charstring====
+  execute(tc_cs_ModulePar_emb());
+  execute(tc_cs_mod4v_emb());
+  execute(tc_cs_mod4o_emb());
+  execute(tc_cs_mod4a_emb());
+  execute(tc_cs_mod4q_emb());
+  execute(tc_cs_mod4al1_emb());
+  execute(tc_cs_mod4al2_emb());  
+  execute(tc_cs_mod4ql1_emb());
+  execute(tc_cs_mod4ql2_emb());
+  execute(tc_cs_mod4vl1_emb());
+  execute(tc_cs_mod4vl2_emb());
+  execute(tc_cs_mod4vl3_emb());
+  execute(tc_cs_mod4c1_emb());
+  execute(tc_cs_mod4c2_emb());
+  execute(tc_cs_mod4c3_emb());
+  execute(tc_cs_mod4r1_emb());
+  execute(tc_cs_mod4r2_emb());
+  execute(tc_cs_mod4pa_emb());
+  execute(tc_cs_mod4pq_emb());
+  //embedded + ifpresent
+  execute(tc_cs_mod4vifp_emb());
+  execute(tc_cs_mod4oifp_emb());
+  execute(tc_cs_mod4aifp_emb());
+  execute(tc_cs_mod4qifp_emb());
+  execute(tc_cs_mod4al1ifp_emb());
+  execute(tc_cs_mod4al2ifp_emb());  
+  execute(tc_cs_mod4ql1ifp_emb());
+  execute(tc_cs_mod4ql2ifp_emb());
+  execute(tc_cs_mod4vl1ifp_emb()); //Adam solved
+  execute(tc_cs_mod4vl2ifp_emb()); //Fixed: TR: HR98602, 'Matching fault in case of template ("A","B") ifpresent'
+  execute(tc_cs_mod4vl3ifp_emb());
+  execute(tc_cs_mod4c1ifp_emb());
+  execute(tc_cs_mod4c2ifp_emb());
+  execute(tc_cs_mod4c3ifp_emb());
+  execute(tc_cs_mod4r1ifp_emb());
+  execute(tc_cs_mod4r2ifp_emb());
+  execute(tc_cs_mod4paifp_emb());
+  execute(tc_cs_mod4pqifp_emb());
+  
+  //ttcn2string:
+  execute(tc_cs_ttcn2string_emb());
+  execute(tc_cs_string2ttcn_mod4v());
+  execute(tc_cs_string2ttcn_mod4o());
+  execute(tc_cs_string2ttcn_mod4ol());
+  execute(tc_cs_string2ttcn_mod4a());
+  execute(tc_cs_string2ttcn_mod4q());
+  execute(tc_cs_string2ttcn_mod4al1());
+  execute(tc_cs_string2ttcn_mod4al2());
+  execute(tc_cs_string2ttcn_mod4ql1());
+  execute(tc_cs_string2ttcn_mod4ql2());
+  execute(tc_cs_string2ttcn_mod4vl1());
+  execute(tc_cs_string2ttcn_mod4vl2());
+  execute(tc_cs_string2ttcn_mod4vl3());
+  execute(tc_cs_string2ttcn_mod4c1());
+  execute(tc_cs_string2ttcn_mod4c2());
+  execute(tc_cs_string2ttcn_mod4c3());
+  execute(tc_cs_string2ttcn_mod4r1());
+  execute(tc_cs_string2ttcn_mod4r2());
+  execute(tc_cs_string2ttcn_mod4pa());
+  execute(tc_cs_string2ttcn_mod4pq());
+  //ttcn2string with ifpresent
+  execute(tc_cs_string2ttcn_mod4vifp());
+  execute(tc_cs_string2ttcn_mod4oifp());
+  execute(tc_cs_string2ttcn_mod4aifp());
+  execute(tc_cs_string2ttcn_mod4qifp());
+  execute(tc_cs_string2ttcn_mod4al1ifp());
+  execute(tc_cs_string2ttcn_mod4al2ifp());
+  execute(tc_cs_string2ttcn_mod4ql1ifp());
+  execute(tc_cs_string2ttcn_mod4ql2ifp());
+  execute(tc_cs_string2ttcn_mod4vl1ifp());
+  execute(tc_cs_string2ttcn_mod4vl2ifp());
+  execute(tc_cs_string2ttcn_mod4vl3ifp());
+  execute(tc_cs_string2ttcn_mod4c1ifp());
+  execute(tc_cs_string2ttcn_mod4c2ifp());
+  execute(tc_cs_string2ttcn_mod4c3ifp());
+  execute(tc_cs_string2ttcn_mod4r1ifp());
+  execute(tc_cs_string2ttcn_mod4r2ifp());
+  execute(tc_cs_string2ttcn_mod4paifp());
+  execute(tc_cs_string2ttcn_mod4pqifp()); 
+  
+}
+
+}
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/component_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/component_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..3c6b1a5d02025478cee9555e932af4f7efbbd3d7
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/component_test.ttcn
@@ -0,0 +1,46 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module component_test 
+{
+
+type component CT {}
+
+function f_test() runs on CT {
+  timer tt1:=2.0
+  tt1.start
+  tt1.timeout
+}
+
+testcase tc_component() runs on CT {
+  var CT a := CT.create("a b.c\t!@#$%^&*(1)[]{};'""\\/,|`~");
+  var CT b;
+  @try {
+    string2ttcn(ttcn2string(a), b);
+    if (a != b) {
+      setverdict(fail, "string2ttcn() result: ", b, ", expected: ", a);
+    }
+    b.start(f_test());
+    b.done;
+    setverdict(pass);
+  }
+  @catch (err_msg) {
+    setverdict(fail, "string2ttcn() failed: ", err_msg);
+  }
+}
+
+control {
+  log("*** component tests ***");
+  execute(tc_component())
+}
+
+}
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/enum_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/enum_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..682d54987270b91c089b518744e4d64a81f978b9
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/enum_test.ttcn
@@ -0,0 +1,182 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module enum_test
+// [.objid{ itu_t(0) identified_organization(4) etsi(0)
+// identified_organization(127) ericsson(5) testing(0)
+// <put further nodes here if needed>}]
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  template MyEnum tspt_enum_mod4v := omit
+  template MyEnum tspt_enum_mod4a := first
+  template MyEnum tspt_enum_mod4q := first
+  template MyEnum tspt_enum_mod4o := first
+  template MyEnum tspt_enum_mod4c0 := first
+  template MyEnum tspt_enum_mod4c1 := first
+  template MyEnum tspt_enum_mod4c2 := first
+  template MyEnum tspt_enum_mod4vl1 := omit
+  template MyEnum tspt_enum_mod4vl2 := omit  
+  //ifpresent version ( in cfg file):
+  template MyEnum tspt_enum_mod4vifp := omit
+  template MyEnum tspt_enum_mod4aifp := first
+  template MyEnum tspt_enum_mod4qifp := first
+  template MyEnum tspt_enum_mod4oifp := first
+  template MyEnum tspt_enum_mod4c0ifp := first
+  template MyEnum tspt_enum_mod4c1ifp := first
+  template MyEnum tspt_enum_mod4c2ifp := first
+  template MyEnum tspt_enum_mod4vl1ifp := omit
+  template MyEnum tspt_enum_mod4vl2ifp := omit   
+}
+
+//=========================================================================
+// Testcases
+//=========================================================================
+testcase tc_enum_ModulePar() runs on MC {
+   log(log2str(tspt_enum_mod4v));
+   if(log2str(tspt_enum_mod4v) == "first (0)" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4a));
+   if(log2str(tspt_enum_mod4a) == "*" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4q));
+   if(log2str(tspt_enum_mod4q) == "?" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4o));
+   if(log2str(tspt_enum_mod4o) == "omit" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c0));
+   if(log2str(tspt_enum_mod4c0) == "?" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c1));
+   if(log2str(tspt_enum_mod4c1) == "complement(first (0))" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c2));
+   if(log2str(tspt_enum_mod4c2) == "complement(first (0), second (1))" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl1));
+   if(log2str(tspt_enum_mod4vl1) == "first (0)" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl2));
+   if(log2str(tspt_enum_mod4vl2) == "(first (0), second (1))" ) {setverdict(pass)} else {setverdict(fail)}
+   
+   log(log2str(tspt_enum_mod4vifp));
+   if(log2str(tspt_enum_mod4vifp) == "first (0) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4aifp));
+   if(log2str(tspt_enum_mod4aifp) == "* ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4qifp));
+   if(log2str(tspt_enum_mod4qifp) == "? ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4oifp));
+   if(log2str(tspt_enum_mod4oifp) == "omit ifpresent") {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c0ifp));
+   if(log2str(tspt_enum_mod4c0ifp) == "complement(omit) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c1ifp));
+   if(log2str(tspt_enum_mod4c1ifp) == "complement(first (0)) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4c2ifp));
+   if(log2str(tspt_enum_mod4c2ifp) == "complement(first (0), second (1)) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl1ifp));
+   if(log2str(tspt_enum_mod4vl1ifp) == "first (0) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(tspt_enum_mod4vl2ifp));
+   if(log2str(tspt_enum_mod4vl2ifp) == "(first (0), second (1)) ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+}
+
+testcase tc_enum_ModulePar_emb() runs on MC {
+   log(log2str(t_renum(tspt_enum_mod4v)));
+   if(log2str(t_renum(tspt_enum_mod4v)) == "{ e := first (0) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4a)));
+   if(log2str(t_renum(tspt_enum_mod4a)) == "{ e := * }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4q)));
+   if(log2str(t_renum(tspt_enum_mod4q)) == "{ e := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4o)));
+   if(log2str(t_renum(tspt_enum_mod4o)) == "{ e := omit }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c0)));
+   if(log2str(t_renum(tspt_enum_mod4c0)) == "{ e := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c1)));
+   if(log2str(t_renum(tspt_enum_mod4c1)) == "{ e := complement(first (0)) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c2)));
+   if(log2str(t_renum(tspt_enum_mod4c2)) == "{ e := complement(first (0), second (1)) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl1)));
+   if(log2str(t_renum(tspt_enum_mod4vl1)) == "{ e := first (0) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl2)));
+   if(log2str(t_renum(tspt_enum_mod4vl2)) == "{ e := (first (0), second (1)) }" ) {setverdict(pass)} else {setverdict(fail)}
+   
+   log(log2str(t_renum(tspt_enum_mod4vifp)));
+   if(log2str(t_renum(tspt_enum_mod4vifp)) == "{ e := first (0) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4aifp)));
+   if(log2str(t_renum(tspt_enum_mod4aifp)) == "{ e := * ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4qifp)));
+   if(log2str(t_renum(tspt_enum_mod4qifp)) == "{ e := ? ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4oifp)));
+   if(log2str(t_renum(tspt_enum_mod4oifp)) == "{ e := omit ifpresent }") {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c0ifp)));
+   if(log2str(t_renum(tspt_enum_mod4c0ifp)) == "{ e := complement(omit) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c1ifp)));
+   if(log2str(t_renum(tspt_enum_mod4c1ifp)) == "{ e := complement(first (0)) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4c2ifp)));
+   if(log2str(t_renum(tspt_enum_mod4c2ifp)) == "{ e := complement(first (0), second (1)) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl1ifp)));
+   if(log2str(t_renum(tspt_enum_mod4vl1ifp)) == "{ e := first (0) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(log2str(t_renum(tspt_enum_mod4vl2ifp)));
+   if(log2str(t_renum(tspt_enum_mod4vl2ifp)) == "{ e := (first (0), second (1)) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+}
+
+
+testcase tc_enum_ttcn2str_emb() runs on MC {
+   log(ttcn2string(t_renum(tspt_enum_mod4v)));
+   if(ttcn2string(t_renum(tspt_enum_mod4v)) == "{ e := first }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4a)));
+   if(ttcn2string(t_renum(tspt_enum_mod4a)) == "{ e := * }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4q)));
+   if(ttcn2string(t_renum(tspt_enum_mod4q)) == "{ e := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4o)));
+   if(ttcn2string(t_renum(tspt_enum_mod4o)) == "{ e := omit }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c0))); //DTE
+   if(ttcn2string(t_renum(tspt_enum_mod4c0)) == "{ e := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c1)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c1)) == "{ e := complement(first) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c2)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c2)) == "{ e := complement(first, second) }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl1)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl1)) == "{ e := first }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl2)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl2)) == "{ e := (first, second) }" ) {setverdict(pass)} else {setverdict(fail)}
+   
+   log(ttcn2string(t_renum(tspt_enum_mod4vifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vifp)) == "{ e := first ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4aifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4aifp)) == "{ e := * ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4qifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4qifp)) == "{ e := ? ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4oifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4oifp)) == "{ e := omit ifpresent }") {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c0ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c0ifp)) == "{ e := complement(omit) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c1ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c1ifp)) == "{ e := complement(first) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4c2ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4c2ifp)) == "{ e := complement(first, second) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl1ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl1ifp)) == "{ e := first ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+   log(ttcn2string(t_renum(tspt_enum_mod4vl2ifp)));
+   if(ttcn2string(t_renum(tspt_enum_mod4vl2ifp)) == "{ e := (first, second) ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+}
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("***enum tests ********");
+  execute(tc_enum_ModulePar());
+  execute(tc_enum_ModulePar_emb());
+  execute(tc_enum_ttcn2str_emb());
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/float_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/float_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..eff0b4b67f690e28df24655842b7118ea7d4b6d6
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/float_test.ttcn
@@ -0,0 +1,369 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: ethbaat
+//DATE: 2013-12-11
+//VERSION: 1.0
+*/
+module float_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  template float tspt_f_v := 9.0;
+  template float tspt_f_o := omit;
+  template float tspt_f_a := *;
+  template float tspt_f_q :=  ?;
+  template float tspt_f_vl1 := (0.0)
+  template float tspt_f_vl2 := (0.0,1.2)
+  template float tspt_f_vl3 := (0.0,1.2,-1.9)
+  template float tspt_f_c1 := complement(0.0);
+  template float tspt_f_c3 := complement(0.0,1.2,-1.9);
+  template float tspt_f_r := (-1.9..3.1);
+
+  template float tspt_f1 := *; //overwritten by cfg for value 9.0
+  template float tspt_f2 := 4.0; //overwritten by cfg for omit
+  template float tspt_f3 := 5.0; //overwritten by cfg for *
+  template float tspt_f4 := *; //overwritten by cfg for ?
+  template float tspt_f_mod4vl1 := ?; //overwritten by cfg for value list (0.0)
+  template float tspt_f_mod4vl3 := ?; //overwritten by cfg for value list (0.0,1.2,-1.9)
+  template float tspt_f6 := *; //overwritten by cfg for 9.0 ifpresent
+  template float tspt_f7 := *; //overwritten by cfg for omit ifpresent
+  template float tspt_f8 := *; //overwritten by cfg for * ifpresent
+  template float tspt_f9 := 9.0; //overwritten by cfg for ? ifpresent
+  template float tspt_f10 := *; //overwritten by cfg for value list (0.0,1.2,-1.9) ifpresent
+  template float tspt_f11 := *; //overwritten by cfg for complement 
+  template float tspt_f12 := *; //overwritten by cfg for complement(9.0) ifpresent
+  template float tspt_f13 := *;
+  template float tspt_f14 := *;
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+//=========================================================================
+// Templates
+//=========================================================================
+  template float t_f_v := 9.0;
+  template float t_f_o := omit;
+  template float t_f_a := *;
+  template float t_f_q :=  ?;
+  template float t_f_vl := (0.0,1.2,-1.9)
+  template float t_f_c := complement(0.0,1.2,-1.9);
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_float_NoModulePar() runs on MC {
+    log(t_f_v);
+    if( log2str(t_f_v) != "9.000000") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(t_f_o) != "omit") { setverdict(fail)};
+    if( log2str(t_f_a) != "*") { setverdict(fail)};
+    if( log2str(t_f_q) != "?") { setverdict(fail)};
+    if( log2str(t_f_vl) != "(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+    if( log2str(t_f_c) != "complement(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+  }
+
+  testcase tc_float_ModulePar() runs on MC {
+    if( log2str(tspt_f_v) != "9.000000") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(tspt_f_o) != "omit") { setverdict(fail)};
+    if( log2str(tspt_f_a) != "*") { setverdict(fail)};
+    if( log2str(tspt_f_q) != "?") { setverdict(fail)};
+    log(tspt_f_vl3);
+    if( log2str(tspt_f_vl1) != "0.000000") { setverdict(fail) };
+    if( log2str(tspt_f_vl2) != "(0.000000, 1.200000)") { setverdict(fail) };
+    if( log2str(tspt_f_vl3) != "(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+    if( log2str(tspt_f_c1) != "complement(0.000000)") { setverdict(fail) };
+    if( log2str(tspt_f_c3) != "complement(0.000000, 1.200000, -1.900000)") { setverdict(fail) };
+    //log(tspt_f_r);
+    if( log2str(tspt_f_r) != "(-1.900000 .. 3.100000)") { setverdict(fail) };
+  }
+
+  testcase tc_float_Embedded() runs on MC {
+    log(t_rec(1,tspt_f_v,omit,omit));
+    if( log2str(t_rec(1,tspt_f_v,omit,omit)) != "{ i := 1, f := 9.000000, cs := omit, bs := omit }") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(t_rec(1,tspt_f_o,omit,omit)) != "{ i := 1, f := omit, cs := omit, bs := omit }") { setverdict(fail)};
+    if( log2str(t_rec(1,tspt_f_a,omit,omit)) != "{ i := 1, f := *, cs := omit, bs := omit }") { setverdict(fail)};
+    if( log2str(t_rec(1,tspt_f_q,omit,omit)) !=  "{ i := 1, f := ?, cs := omit, bs := omit }"){ setverdict(fail)};
+    //log(tspt_f_vl3);
+    if( log2str(t_rec(1,tspt_f_vl1,omit,omit)) != "{ i := 1, f := 0.000000, cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_vl2,omit,omit)) != "{ i := 1, f := (0.000000, 1.200000), cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_vl3,omit,omit)) != "{ i := 1, f := (0.000000, 1.200000, -1.900000), cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_c1,omit,omit)) != "{ i := 1, f := complement(0.000000), cs := omit, bs := omit }") { setverdict(fail) };
+    if( log2str(t_rec(1,tspt_f_c3,omit,omit)) != "{ i := 1, f := complement(0.000000, 1.200000, -1.900000), cs := omit, bs := omit }") { setverdict(fail) };
+    //log(tspt_f_r);
+    if( log2str(t_rec(1,tspt_f_r,omit,omit)) != "{ i := 1, f := (-1.900000 .. 3.100000), cs := omit, bs := omit }" ) { setverdict(fail) };
+  }
+
+  //value
+  testcase tc_float_value() runs on MC {
+    log( tspt_f_v );
+    if( log2str(tspt_f_v) != "9.000000" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoF vl_good_values := {9.0}
+    var RoF vl_wrong_values := {-1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_v, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_omit() runs on MC {
+    log( tspt_f_o );
+    if( log2str(tspt_f_o) != "omit" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {}
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_o, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_a() runs on MC {
+    log( tspt_f_a );
+    if( log2str(tspt_f_a) != "*" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f_a, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_q() runs on MC {
+    log( tspt_f_q );
+    if( log2str(tspt_f_q) != "?")  { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f_a, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_vl() runs on MC {
+    log( tspt_f_vl3 );
+    if( log2str(tspt_f_vl3) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_vl3, vl_good_values, vl_wrong_values );
+  }
+
+  //range
+  testcase tc_float_r() runs on MC {
+    log( tspt_f_r );
+    if( log2str(tspt_f_r) != "(-1.900000 .. 3.100000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { -1.900000, -1.8999999, -1.0, 0.0, 1.2, -1.9, 3.1 }
+    var RoF vl_wrong_values := {3.10001, 9.0, -1000000.0, -1.91, 8.99999, 9.0,  9.0001, -2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_r, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_right_value() runs on MC {
+    var template float vlt := tspt_f_vl3;
+    log( vlt );
+    if( log2str(vlt) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  //
+  //value
+  testcase tc_float_modified4v() runs on MC {
+    log( tspt_f1 );
+    if( log2str(tspt_f1) != "9.000000" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0}
+    var RoF vl_wrong_values := {-1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f1, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4o() runs on MC {
+    log( tspt_f2 );
+    if( log2str(tspt_f2) != "omit" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {}
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f2, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4a() runs on MC {
+    log( tspt_f3 );
+    if( log2str(tspt_f3) != "*" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f3, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4q() runs on MC {
+    log( tspt_f4 );
+    if( log2str(tspt_f4) != "?")  { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f4, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vl1() runs on MC {
+    log( tspt_f_mod4vl1 );
+    if( log2str(tspt_f_mod4vl1) != "0.000000" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0 }
+    var RoF vl_wrong_values := {1.2, -1.9, 9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_mod4vl1, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vl3() runs on MC {
+    log( tspt_f_mod4vl3 );
+    if( log2str(tspt_f_mod4vl3) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f_mod4vl3, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4c() runs on MC {
+    var template float vlt := tspt_f11;
+    log( vlt );
+    if( log2str(vlt) != "complement(9.000000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values :=  { -1000000.0, 0.01, -1.91, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := { 9.0 }
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  // modified 4 range from cfg file
+  testcase tc_float_modified4r() runs on MC {
+    log( tspt_f13 );
+    if( log2str(tspt_f13) != "(-1.900000 .. 3.100000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { -1.900000, -1.8999999, -1.0, 0.0, 1.2, -1.9, 3.1 }
+    var RoF vl_wrong_values := {3.10001, 9.0, -1000000.0, -1.91, 8.99999, 9.0,  9.0001, -2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f13, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vl_right_value() runs on MC {
+    var template float vlt := tspt_f_mod4vl3;
+    log( vlt );
+    if( log2str(vlt) != "(0.000000, 1.200000, -1.900000)" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }  
+
+  //value
+  testcase tc_float_modified4vifp() runs on MC {
+    log( tspt_f6 );
+    if( log2str(tspt_f6) != "9.000000 ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0}
+    var RoF vl_wrong_values := {-1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f6, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4oifp() runs on MC {
+    log( tspt_f7 );
+    if( log2str(tspt_f7) != "omit ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {}
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f7, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4aifp() runs on MC {
+    log( tspt_f8 );
+    if( log2str(tspt_f8) != "* ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f8, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4qifp() runs on MC {
+    log( tspt_f4 );
+    if( log2str(tspt_f9) != "? ifpresent")  { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := {9.0, -1000000.0, 0.0, -1.0, 8.99999, 9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := {}
+    f_checkMatchingValues_float( tspt_f9, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4vlifp() runs on MC {
+    log( tspt_f10 );
+    if( log2str(tspt_f10) != "(0.000000, 1.200000, -1.900000) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { 0.0, 1.2, -1.9 }
+    var RoF vl_wrong_values := {9.0, -1000000.0, 0.01, -1.91, 8.99999, 9.0,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f10, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_float_modified4cifp() runs on MC {
+    var template float vlt := tspt_f12;
+    log( vlt );
+    if( log2str(vlt) != "complement(9.000000) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values :=  { -1000000.0, 0.01, -1.91, 8.99999,  9.0001, 2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    var RoF vl_wrong_values := { 9.0 }
+    f_checkMatchingValues_float( vlt, vl_good_values, vl_wrong_values );
+  }  
+
+  // modified 4 range from cfg file
+  testcase tc_float_modified4rifp() runs on MC {
+    log( tspt_f14 );
+    if( log2str(tspt_f14) != "(-1.900000 .. 3.100000) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoF vl_good_values := { -1.900000, -1.8999999, -1.0, 0.0, 1.2, -1.9, 3.1 }
+    var RoF vl_wrong_values := {3.10001, 9.0, -1000000.0, -1.91, 8.99999, 9.0,  9.0001, -2.0, 20001.0e9, 4294967296.0, 4294967296.0+1.0}
+    f_checkMatchingValues_float( tspt_f14, vl_good_values, vl_wrong_values );
+  }
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {  
+  log("****float tests****");
+  execute(tc_float_NoModulePar());
+  execute(tc_float_ModulePar());
+  execute(tc_float_Embedded());
+  execute(tc_float_value());
+  execute(tc_float_omit());
+  execute(tc_float_a());
+  execute(tc_float_q());
+  execute(tc_float_vl());
+  execute(tc_float_r());
+  execute(tc_float_right_value());
+  execute(tc_float_modified4v());
+  execute(tc_float_modified4o());
+  execute(tc_float_modified4a());
+  execute(tc_float_modified4q());
+  execute(tc_float_modified4vl1());
+  execute(tc_float_modified4vl3());
+  execute(tc_float_modified4c());
+  execute(tc_float_modified4r());
+  execute(tc_float_modified4vl_right_value());
+  execute(tc_float_modified4vifp());
+  execute(tc_float_modified4oifp());
+  execute(tc_float_modified4aifp());
+  execute(tc_float_modified4qifp());
+  execute(tc_float_modified4vlifp());
+  execute(tc_float_modified4cifp());
+  execute(tc_float_modified4rifp()); 
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/functions2.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/functions2.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..339c88adf7bb42278a1d3016bebae019f6fb533d
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/functions2.ttcn
@@ -0,0 +1,575 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module functions2 {
+
+import from types2 all;
+
+
+group g_boolean {
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_bool(template boolean pl_b, in RoB pl_rob) {
+    var integer s:=lengthof(pl_rob)
+    log("Template: ", pl_b, " values to be matched:", pl_rob)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rob[i],pl_b )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rob[i],pl_b ));
+      } else {
+        setverdict(fail, int2str(i)&". nok"); log( match(pl_rob[i],pl_b ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_bool(template boolean pl_b, in RoB pl_rob) {
+    var integer s:=lengthof(pl_rob)
+    log("Template: ", pl_b, " values not to be matched:", pl_rob)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rob[i],pl_b )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rob[i],pl_b ));
+      } else {
+        setverdict(pass, int2str(i)&". ok"); log( match(pl_rob[i],pl_b ));
+      }
+    }
+  } with { extension "transparent" }
+
+
+  function f_checkMatchingValues_bool(template boolean pl_b, in RoB pl_good_values, in RoB pl_wrong_values) {
+    f_checkMatchingGoodValues_bool(pl_b,pl_good_values);
+    f_checkMatchingWrongValues_bool(pl_b,pl_wrong_values);
+  }
+
+}
+
+group g_integer {
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_int(template integer pl_i, in RoI pl_roi) {
+    var integer s:=lengthof(pl_roi)
+    log("Template: ", pl_i, " values to be matched:", pl_roi)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roi[i],pl_i )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_roi[i],pl_i ));
+      } else {
+        setverdict(fail, int2str(i)&". nok"); log( match(pl_roi[i],pl_i ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_int(template integer pl_i, in RoI pl_roi) {
+    var integer s:=lengthof(pl_roi)
+    log("Template: ", pl_i, " values not to be matched:", pl_roi)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roi[i],pl_i )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_roi[i],pl_i ));
+      } else {
+        setverdict(pass, int2str(i)&". ok"); log( match(pl_roi[i],pl_i ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_int(template integer pl_i, in RoI pl_good_values, in RoI pl_wrong_values) {
+    f_checkMatchingGoodValues_int( pl_i, pl_good_values);
+    f_checkMatchingWrongValues_int( pl_i, pl_wrong_values);
+  }
+
+}//g_integer
+
+group g_float{
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_float(template float pl_f, in RoF pl_rof) {
+    var integer s:=lengthof(pl_rof)
+    log("Template: ", pl_f, " values to be matched:", pl_rof)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rof[i],pl_f )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rof[i],pl_f ));
+      } else {
+        setverdict(fail, int2str(i)&". nok"); log( match(pl_rof[i],pl_f ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_float(template float pl_f, in RoF pl_rof) {
+    var integer s:=lengthof(pl_rof)
+    log("Template: ", pl_f, " values not to be matched:", pl_rof)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rof[i],pl_f )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rof[i],pl_f ));
+      } else {
+        setverdict(pass, int2str(i)&". ok"); log( match(pl_rof[i],pl_f ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_float(template float pl_f, in RoF pl_good_values, in RoF pl_wrong_values) {
+    f_checkMatchingGoodValues_float( pl_f, pl_good_values);
+    f_checkMatchingWrongValues_float( pl_f, pl_wrong_values);
+  }
+} //g_float
+
+group g_bitstring {
+
+}//g_bitstring
+
+group g_octetstring {
+
+
+}//g_octetstring
+
+group g_hexstring {
+
+
+}//g_hexstring
+
+group g_charstring {
+
+  function f_checkMatchingGoodValues_cs(template charstring pl_cs,in RoCS pl_rocs) {
+    var integer s:=lengthof(pl_rocs);
+    log("Template: ", pl_cs, " values to be matched:", pl_rocs);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rocs[i],pl_cs )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rocs[i],pl_cs ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rocs[i],pl_cs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_cs(template charstring pl_cs, in RoCS pl_rocs) {
+    var integer s:=lengthof(pl_rocs)
+    log("Template: ", pl_cs, " values not to be matched:", pl_rocs)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rocs[i], pl_cs )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rocs[i],pl_cs ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rocs[i],pl_cs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_cs(template charstring pl_cs,in RoCS pl_good_values, in RoCS pl_wrong_values) {
+    f_checkMatchingGoodValues_cs( pl_cs,  pl_good_values);
+    f_checkMatchingWrongValues_cs( pl_cs, pl_wrong_values);
+  }
+
+  function f_checkMatchingGoodValues_rcs(template RCS pl_rcs,in RoRCS pl_rorcs) {
+    var integer s:=lengthof(pl_rorcs);
+    log("Template: ", pl_rcs, " values to be matched:", pl_rorcs);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorcs[i],pl_rcs )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorcs[i],pl_rcs ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorcs[i],pl_rcs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rcs(template RCS pl_rcs, in RoRCS pl_rorcs) {
+    var integer s:=lengthof(pl_rorcs)
+    log("Template: ", pl_rcs, " values not to be matched:", pl_rorcs)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorcs[i], pl_rcs )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorcs[i],pl_rcs ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorcs[i],pl_rcs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rcs(template RCS pl_rcs,in RoRCS pl_good_values, in RoRCS pl_wrong_values) {
+    f_checkMatchingGoodValues_rcs( pl_rcs,  pl_good_values);
+    f_checkMatchingWrongValues_rcs( pl_rcs, pl_wrong_values);
+  }
+}//g_charstring
+
+group g_record {
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rec(template REC pl_rec,in RoREC pl_rorec) {
+    var integer s:=lengthof(pl_rorec);
+    log("Template: ", pl_rec, " values to be matched:", pl_rorec);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i],pl_rec )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rec(template REC pl_rec, in RoREC pl_rorec) {
+    var integer s:=lengthof(pl_rorec)
+    log("Template: ", pl_rec, " values not to be matched:", pl_rorec)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i], pl_rec )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingValues_rec(template REC pl_rec,in RoREC pl_good_values, in RoREC pl_wrong_values) {
+    f_checkMatchingGoodValues_rec( pl_rec,  pl_good_values);
+    f_checkMatchingWrongValues_rec( pl_rec, pl_wrong_values);
+  }
+
+  function f_checkMatchingGoodValues_rec2(template REC2 pl_rec,in RoREC2 pl_rorec) {
+    var integer s:=lengthof(pl_rorec);
+    log("Template: ", pl_rec, " values to be matched:", pl_rorec);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i],pl_rec )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rec2(template REC2 pl_rec, in RoREC2 pl_rorec) {
+    var integer s:=lengthof(pl_rorec)
+    log("Template: ", pl_rec, " values not to be matched:", pl_rorec)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorec[i], pl_rec )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorec[i],pl_rec ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorec[i],pl_rec ));
+      }
+    }
+  } with { extension "transparent" }
+
+}//g_record
+
+group g_recordof {
+
+  // ====record of integer:======
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_roi(template RoI pl_roi,in RoRoI pl_roroi) {
+    var integer s:=lengthof(pl_roroi);
+    log("Template: ", pl_roi, " values to be matched:", pl_roroi);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roroi[i],pl_roi )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_roroi[i],pl_roi ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_roroi[i],pl_roi ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_roi(template RoI pl_roi, in RoRoI pl_roroi) {
+    var integer s:=lengthof(pl_roroi)
+    log("Template: ", pl_roi, " values not to be matched:", pl_roroi)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roroi[i], pl_roi )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_roroi[i],pl_roi ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_roroi[i],pl_roi ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_roi(template RoI pl_roi,in RoRoI pl_good_values, in RoRoI pl_wrong_values) {
+    f_checkMatchingGoodValues_roi( pl_roi,  pl_good_values);
+    f_checkMatchingWrongValues_roi( pl_roi, pl_wrong_values);
+  }
+
+  // ====record of float:======
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rof(template RoF pl_rof,in RoRoF pl_rorof) {
+    var integer s:=lengthof(pl_rorof);
+    log("Template: ", pl_rof, " values to be matched:", pl_rorof);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorof[i],pl_rof )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorof[i],pl_rof ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorof[i],pl_rof ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rof(template RoF pl_rof, in RoRoF pl_rorof) {
+    var integer s:=lengthof(pl_rorof)
+    log("Template: ", pl_rof, " values not to be matched:", pl_rorof)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorof[i], pl_rof )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorof[i],pl_rof ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorof[i],pl_rof ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rof(template RoF pl_rof,in RoRoF pl_good_values, in RoRoF pl_wrong_values) {
+    f_checkMatchingGoodValues_rof( pl_rof,  pl_good_values);
+    f_checkMatchingWrongValues_rof( pl_rof, pl_wrong_values);
+  }
+}//g_recordof
+
+group g_array {
+
+  //============ AI3 =============================
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_ai3(template AI3 pl_ai3,in RoAI3 pl_rofai3, in boolean pl_successExpected:=true) {
+    var integer s:=lengthof(pl_rofai3);
+    log("Template: ", pl_ai3, " values to be matched:", pl_rofai3);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if(pl_successExpected) {
+        if( match(pl_rofai3[i],pl_ai3 )) {
+          setverdict(pass); log(int2str(i)&". ok");log( match(pl_rofai3[i],pl_ai3 ));
+        } else {
+          setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rofai3[i],pl_ai3 ));
+        }
+      }else //not pl_successExpected
+      {
+        @try {
+          log(match(pl_rofai3[i], pl_ai3 ))
+          setverdict(fail);
+        }
+        @catch(err_str) {
+          log( "Expected error: ", err_str);
+          setverdict(pass) 
+        }       
+      }
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_ai3(template AI3 pl_ai3, in RoAI3 pl_rofai3, in boolean pl_successExpected:=true) {
+    var integer s:=lengthof(pl_rofai3)
+    log("Template: ", pl_ai3, " values not to be matched:", pl_rofai3)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if(pl_successExpected) {
+        if( match(pl_rofai3[i], pl_ai3 )) {
+          setverdict(fail); log(int2str(i)&". nok");log( match(pl_rofai3[i],pl_ai3 ));
+        } else {
+          setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rofai3[i],pl_ai3 ));
+        } 
+      } else //not pl_successExpected
+      {
+        @try {
+          log(match(pl_rofai3[i], pl_ai3 ));
+          setverdict(fail);
+        }
+        @catch(err_str) {
+          log( "Expected error: ", err_str);
+          setverdict(pass) 
+        }
+      } 
+    }
+  } //with { extension "transparent" }
+
+  function f_checkMatchingValues_ai3( template AI3 pl_ai3,in RoAI3 pl_good_values, in RoAI3 pl_wrong_values, in boolean pl_successExpected := true) {
+    f_checkMatchingGoodValues_ai3( pl_ai3,  pl_good_values, pl_successExpected);
+    f_checkMatchingWrongValues_ai3( pl_ai3, pl_wrong_values, pl_successExpected);
+  }
+
+  //=== AI2x3 ====
+
+function f_check_AI2x3( template AI2x3 pl_t, RoAI2x3 pl_goodV, RoAI2x3 pl_badV) {
+  var integer NG := lengthof(pl_goodV);
+  var integer NB := lengthof(pl_badV);
+  for(var integer i:=0;i< NG;i:=i+1) {
+    if( match(pl_goodV[i],pl_t)) { 
+      setverdict(pass) 
+    } else { 
+      setverdict(fail, pl_goodV[i], " should match with ", pl_t );
+    }
+  }
+
+  for(var integer i:=0;i< NB;i:=i+1) {
+    if( not match(pl_badV[i],pl_t)) { 
+      setverdict(pass);
+    } else { 
+      setverdict(fail, pl_badV[i], " must not match with ", pl_t );
+    }
+  }
+} with { extension "transparent" }
+
+  //======= RAI3 ========
+
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rai3(template RAI3 pl_rai3,in RoRAI3 pl_rorai3) {
+    var integer s:=lengthof(pl_rorai3);
+    log("Template: ", pl_rai3, " values to be matched:", pl_rorai3);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorai3[i],pl_rai3 )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorai3[i],pl_rai3 ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorai3[i],pl_rai3 ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rai3(template RAI3 pl_rai3, in RoRAI3 pl_rorai3) {
+    var integer s:=lengthof(pl_rorai3)
+    log("Template: ", pl_rai3, " values not to be matched:", pl_rorai3)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorai3[i], pl_rai3 )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorai3[i],pl_rai3 ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorai3[i],pl_rai3 ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rai3(template RAI3 pl_rai3,in RoRAI3 pl_good_values, in RoRAI3 pl_wrong_values) {
+    f_checkMatchingGoodValues_rai3( pl_rai3,  pl_good_values);
+    f_checkMatchingWrongValues_rai3( pl_rai3, pl_wrong_values);
+  }
+
+  //   //============= REC_BAI3 ====================
+  //     // setverdict is pass if every value is matching
+  //   function f_checkMatchingGoodValues_bai3(template AI3 pl_ai3,in RoAI3 pl_rofai3) {
+  //     var integer s:=lengthof(pl_rofai3);
+  //     log("Template: ", pl_ai3, " values to be matched:", pl_rofai3);
+  //     for( var integer i :=0; i<s;i:=i+1) {
+  //       if( match(pl_rofai3[i],pl_ai3 )) {
+  //         setverdict(pass); log(int2str(i)&". ok");log( match(pl_rofai3[i],pl_ai3 ));
+  //       } else {
+  //         setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rofai3[i],pl_ai3 ));
+  //       }
+  //     }
+  //   } with { extension "transparent" }
+  // 
+  //   function f_checkMatchingWrongValues_bai3(template AI3 pl_ai3, in RoAI3 pl_rofai3) {
+  //     var integer s:=lengthof(pl_rofai3)
+  //     log("Template: ", pl_ai3, " values not to be matched:", pl_rofai3)
+  //     for( var integer i :=0; i<s;i:=i+1) {
+  //       if( match(pl_rofai3[i], pl_ai3 )) {
+  //         setverdict(fail); log(int2str(i)&". nok");log( match(pl_rofai3[i],pl_ai3 ));
+  //       } else {
+  //         setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rofai3[i],pl_ai3 ));
+  //       }
+  //     }
+  //   } with { extension "transparent" }
+  // 
+  //   function f_checkMatchingValues_bai3(template AI3 pl_ai3,in RoAI3 pl_good_values, in RoAI3 pl_wrong_values) {
+  //     f_checkMatchingGoodValues_ai3( pl_ai3,  pl_good_values);
+  //     f_checkMatchingWrongValues_ai3( pl_ai3, pl_wrong_values);
+  //   }
+
+}//g_array
+
+
+group g_set {
+
+  //SET
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_set(template SET pl_set,in RoSET pl_roset) {
+    var integer s:=lengthof(pl_roset);
+    log("Template: ", pl_set, " values to be matched:", pl_roset);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roset[i],pl_set )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_roset[i],pl_set ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_roset[i],pl_set ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_set(template SET pl_set, in RoSET pl_roset) {
+    var integer s:=lengthof(pl_roset)
+    log("Template: ", pl_set, " values not to be matched:", pl_roset)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_roset[i], pl_set )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_roset[i],pl_set ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_roset[i],pl_set ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_set(template SET pl_set,in RoSET pl_good_values, in RoSET pl_wrong_values) {
+    f_checkMatchingGoodValues_set( pl_set,  pl_good_values);
+    f_checkMatchingWrongValues_set( pl_set, pl_wrong_values);
+  }
+
+  //RSET
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rset(template RSET pl_rset,in RoRSET pl_rorset) {
+    var integer s:=lengthof(pl_rorset);
+    log("Template: ", pl_rset, " values to be matched:", pl_rorset);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorset[i],pl_rset )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorset[i],pl_rset ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorset[i],pl_rset ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rset(template RSET pl_rset, in RoRSET pl_rorset) {
+    var integer s:=lengthof(pl_rorset)
+    log("Template: ", pl_rset, " values not to be matched:", pl_rorset)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorset[i], pl_rset )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorset[i],pl_rset ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorset[i],pl_rset ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rset(template RSET pl_rset,in RoRSET pl_good_values, in RoRSET pl_wrong_values) {
+    f_checkMatchingGoodValues_rset( pl_rset,  pl_good_values);
+    f_checkMatchingWrongValues_rset( pl_rset, pl_wrong_values);
+  }
+
+}//g_set
+
+group g_setof {
+  //RSoCS = record of charstring
+  // setverdict is pass if every value is matching
+  function f_checkMatchingGoodValues_rsocs(template RSoCS pl_rsocs,in RoRSoCS pl_rorsocs) {
+    var integer s:=lengthof(pl_rorsocs);
+    log("Template: ", pl_rsocs, " values to be matched:", pl_rorsocs);
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorsocs[i],pl_rsocs )) {
+        setverdict(pass); log(int2str(i)&". ok");log( match(pl_rorsocs[i],pl_rsocs ));
+      } else {
+        setverdict(fail); log(int2str(i)&". nok"); log( match(pl_rorsocs[i],pl_rsocs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingWrongValues_rsocs(template RSoCS pl_rsocs, in RoRSoCS pl_rorsocs) {
+    var integer s:=lengthof(pl_rorsocs)
+    log("Template: ", pl_rsocs, " values not to be matched:", pl_rorsocs)
+    for( var integer i :=0; i<s;i:=i+1) {
+      if( match(pl_rorsocs[i], pl_rsocs )) {
+        setverdict(fail); log(int2str(i)&". nok");log( match(pl_rorsocs[i],pl_rsocs ));
+      } else {
+        setverdict(pass); log(int2str(i)&". ok"); log( match(pl_rorsocs[i],pl_rsocs ));
+      }
+    }
+  } with { extension "transparent" }
+
+  function f_checkMatchingValues_rsocs(template RSoCS pl_rsocs,in RoRSoCS pl_good_values, in RoRSoCS pl_wrong_values) {
+    f_checkMatchingGoodValues_rsocs( pl_rsocs,  pl_good_values);
+    f_checkMatchingWrongValues_rsocs( pl_rsocs, pl_wrong_values);
+  }
+
+}//g_setof
+
+group g_enumerated {
+
+}//g_enumerated
+
+group g_union {
+
+}//g_union
+
+group g_anytype {
+
+}//g_anytype
+
+}
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/hexstring_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/hexstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d0039923699313e0fcf7c8ed850474d6a348de28
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/hexstring_test.ttcn
@@ -0,0 +1,257 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module hexstring_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+	
+
+  //hexstring 
+  //============================================================
+  //================ Type: hexstring ==========================
+  //============================================================
+
+  //modulepar hexstrings not modified from cfg file
+  template hexstring tspt_hs_v := 'ABBA'H;
+  template hexstring tspt_hs_o := omit;
+  template hexstring tspt_hs_a := *;
+  template hexstring tspt_hs_q := ?;
+  template hexstring tspt_hs_al1 := * length(2); //length restriction
+  template hexstring tspt_hs_al2 := * length(2..4);
+  template hexstring tspt_hs_ql1 := ? length(2);
+  template hexstring tspt_hs_ql2 := ? length(2..4);
+  template hexstring tspt_hs_vl1 := ('ABBA'H);
+  template hexstring tspt_hs_vl2 := ('ABBA'H,'baba'H);
+  template hexstring tspt_hs_vl3 := ('ABBA'H,'baba'H,'B12'H);
+  template hexstring tspt_hs_c1 := complement('ABBA'H)
+  template hexstring tspt_hs_c2 := complement('ABBA'H,'baba'H);
+  template hexstring tspt_hs_c3 := complement('ABBA'H,'baba'H,'B12'H);
+  //template hexstring tspt_hs_r1 := ('A'H..'B'H); //range not allowed
+  //template hexstring tspt_hs_r2 := ('a'H..'c'H);
+  template hexstring tspt_hs_pa := 'abc*123'H
+  template hexstring tspt_hs_pq := 'abc?123'H
+
+  template hexstring tspt_hs_vifp := 'ABBA'H ifpresent;
+  template hexstring tspt_hs_oifp := omit ifpresent;
+  template hexstring tspt_hs_aifp := * ifpresent;
+  template hexstring tspt_hs_qifp := ? ifpresent;
+  template hexstring tspt_hs_al1ifp := * length(2) ifpresent; //length restriction
+  template hexstring tspt_hs_al2ifp := * length(2..4) ifpresent;
+  template hexstring tspt_hs_ql1ifp := ? length(2) ifpresent;
+  template hexstring tspt_hs_ql2ifp := ? length(2..4) ifpresent;
+  template hexstring tspt_hs_vl1ifp := ('ABBA'H) ifpresent;
+  template hexstring tspt_hs_vl2ifp := ('ABBA'H,'baba'H) ifpresent;
+  template hexstring tspt_hs_vl3ifp := ('ABBA'H,'baba'H,'B12'H) ifpresent;
+  template hexstring tspt_hs_c1ifp := complement('ABBA'H) ifpresent
+  template hexstring tspt_hs_c2ifp := complement('ABBA'H,'baba'H) ifpresent;
+  template hexstring tspt_hs_c3ifp := complement('ABBA'H,'baba'H,'B12'H) ifpresent;
+  //template hexstring tspt_hs_r1ifp := ('A'H..'B'H) ifpresent; //range not allowed
+  //template hexstring tspt_hs_r2ifp := ('a'H..'c'H) ifpresent; //range not allowed
+  template hexstring tspt_hs_paifp := 'abc*123'H  ifpresent
+  template hexstring tspt_hs_pqifp := 'abc?123'H  ifpresent  
+
+  //modulepar hexstrings modified from cfg file
+  template hexstring tspt_hs_mod4v := * //after mod:'ABBA';
+  template hexstring tspt_hs_mod4o := * //omit;
+  template hexstring tspt_hs_mod4a := 'A'H //*;
+  template hexstring tspt_hs_mod4q := ''H //?;
+  template hexstring tspt_hs_mod4al1 := 'A'H //* length(2); //length restriction
+  template hexstring tspt_hs_mod4al2 := '12345'H //mofified for: * length(2..4);
+  template hexstring tspt_hs_mod4ql1 := '12345'H //mofified for:? length(2);
+  template hexstring tspt_hs_mod4ql2 := '12345'H //mofified for:? length(2..4);
+  template hexstring tspt_hs_mod4vl1 := ('ABBA'H) //TODO: Adam //It should be mofified for: ('ABBA'H);
+  template hexstring tspt_hs_mod4vl2 := '12345'H //mofified for:('ABBA'H,'baba'H);
+  template hexstring tspt_hs_mod4vl3 := '12345'H //mofified for:('ABBA'H,'baba'H,'B12'H);
+  template hexstring tspt_hs_mod4c1 := '12345'H //mofified for:complement('ABBA')
+  template hexstring tspt_hs_mod4c2 := '12345'H //mofified for:complement('ABBA','baba');
+  template hexstring tspt_hs_mod4c3 := '12345'H //mofified for:complement('ABBA','baba','Bye');
+  template hexstring tspt_hs_mod4r1 := '12345'H //mofified for:('A'..'B'); //range
+  template hexstring tspt_hs_mod4r2 := '12345'H //mofified for:('a'..'c');
+  template hexstring tspt_hs_mod4pa := '12345'H //mofified for:pattern 'abc*123'
+  template hexstring tspt_hs_mod4pq := '12345'H //mofified for:pattern 'abc?123'
+
+  template hexstring tspt_hs_mod4vifp := '12345'H //mofified for:'ABBA' ifpresent;
+  template hexstring tspt_hs_mod4oifp := '12345'H //mofified for:omit ifpresent;
+  template hexstring tspt_hs_mod4aifp := '12345'H //mofified for:* ifpresent;
+  template hexstring tspt_hs_mod4qifp := '12345'H //mofified for:? ifpresent;
+  template hexstring tspt_hs_mod4al1ifp := '12345'H //mofified for:* length(2) ifpresent; //length restriction
+  template hexstring tspt_hs_mod4al2ifp := '12345'H //mofified for:* length(2..4) ifpresent;
+  template hexstring tspt_hs_mod4ql1ifp := '12345'H //mofified for:? length(2) ifpresent;
+  template hexstring tspt_hs_mod4ql2ifp := '12345'H //mofified for:? length(2..4) ifpresent;
+  template hexstring tspt_hs_mod4vl1ifp :=  ('ABBA'H) ifpresent //TODO: Adam //It should be mofified for: ('ABBA'H);
+  template hexstring tspt_hs_mod4vl2ifp := '12345'H //mofified for:('ABBA','baba') ifpresent;
+  template hexstring tspt_hs_mod4vl3ifp := '12345'H //mofified for:('ABBA','baba','B12') ifpresent;
+  template hexstring tspt_hs_mod4c1ifp := '12345'H //mofified for:complement('ABBA') ifpresent
+  template hexstring tspt_hs_mod4c2ifp := '12345'H //mofified for:complement('ABBA','baba') ifpresent;
+  template hexstring tspt_hs_mod4c3ifp := '12345'H //mofified for:complement('ABBA','baba','Bye') ifpresent;
+  //template hexstring tspt_hs_mod4r1ifp := '12345'H //mofified for:('A'H..'B'H) ifpresent; //range
+  //template hexstring tspt_hs_mod4r2ifp := '12345'H //mofified for:('a'H..'c'H) ifpresent;
+  template hexstring tspt_hs_mod4paifp := '12345'H //mofified for:pattern 'abc*xyz'H  ifpresent
+  template hexstring tspt_hs_mod4pqifp := '12345'H //mofified for:pattern 'abc?xyz'H  ifpresent  
+   
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_hs_ModulePar_emb() runs on MC {
+    log(t_rhs(tspt_hs_mod4v));
+    if(log2str(t_rhs(tspt_hs_mod4v)) != "{ hs := \'ABBA\'H }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4o));
+    if(log2str(t_rhs(tspt_hs_mod4o)) != "{ hs := omit }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4a));
+    if(log2str(t_rhs(tspt_hs_mod4a)) != "{ hs := * }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4q));
+    if(log2str(t_rhs(tspt_hs_mod4q)) != "{ hs := ? }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al1));
+    if(log2str(t_rhs(tspt_hs_mod4al1)) != "{ hs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al2));
+    if(log2str(t_rhs(tspt_hs_mod4al2)) != "{ hs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql1));
+    if(log2str(t_rhs(tspt_hs_mod4ql1)) != "{ hs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql2));
+    if(log2str(t_rhs(tspt_hs_mod4ql2)) != "{ hs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">",t_rhs(tspt_hs_mod4vl1),"<");
+    if(log2str(t_rhs(tspt_hs_mod4vl1)) != "{ hs := \'ABBA\'H }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl2));
+    if(log2str(t_rhs(tspt_hs_mod4vl2)) != "{ hs := (\'ABBA\'H, \'BABA\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">{ hs := (\'ABBA\'H, \'BABA\'H) }<");
+    log(t_rhs(tspt_hs_mod4vl3));
+    if(log2str(t_rhs(tspt_hs_mod4vl3)) != "{ hs := (\'ABBA\'H, \'BABA\'H, \'B12\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c1));
+    if(log2str(t_rhs(tspt_hs_mod4c1)) != "{ hs := complement(\'ABBA\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c2));
+    if(log2str(t_rhs(tspt_hs_mod4c2)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c3));
+    if(log2str(t_rhs(tspt_hs_mod4c3)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H, \'B12\'H) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4pa));
+    if(log2str(t_rhs(tspt_hs_mod4pa)) != "{ hs := \'ABC*123\'H }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4pq));
+    if(log2str(t_rhs(tspt_hs_mod4pq)) != "{ hs := \'ABC?123\'H }") {setverdict(fail)} else {setverdict(pass)};
+    //==
+    log(t_rhs(tspt_hs_mod4vifp));
+    if(log2str(t_rhs(tspt_hs_mod4vifp)) != "{ hs := \'ABBA\'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4oifp));
+    if(log2str(t_rhs(tspt_hs_mod4oifp)) != "{ hs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4aifp));
+    if(log2str(t_rhs(tspt_hs_mod4aifp)) != "{ hs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4qifp));
+    if(log2str(t_rhs(tspt_hs_mod4qifp)) != "{ hs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4al1ifp)) != "{ hs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4al2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4al2ifp)) != "{ hs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4ql1ifp)) != "{ hs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4ql2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4ql2ifp)) != "{ hs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4vl1ifp)) != "{ hs := \'ABBA\'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4vl2ifp)) != "{ hs := (\'ABBA\'H, \'BABA\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4vl3ifp));
+    if(log2str(t_rhs(tspt_hs_mod4vl3ifp)) != "{ hs := (\'ABBA\'H, \'BABA\'H, \'B12\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c1ifp));
+    if(log2str(t_rhs(tspt_hs_mod4c1ifp)) != "{ hs := complement(\'ABBA\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c2ifp));
+    if(log2str(t_rhs(tspt_hs_mod4c2ifp)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4c3ifp));
+    if(log2str(t_rhs(tspt_hs_mod4c3ifp)) != "{ hs := complement(\'ABBA\'H, \'BABA\'H, \'B12\'H) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4paifp));
+    if(log2str(t_rhs(tspt_hs_mod4paifp)) != "{ hs := \'ABC*123'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_rhs(tspt_hs_mod4pqifp));
+    if(log2str(t_rhs(tspt_hs_mod4pqifp)) != "{ hs := \'ABC?123\'H ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  }
+
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("***hexstring tests****");
+  execute(tc_hs_ModulePar_emb());
+}
+
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/integer_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/integer_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..7f501259ec5f4f1c03fc92e63b574cadbd2eddb1
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/integer_test.ttcn
@@ -0,0 +1,371 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: ethbaat
+//DATE: 2013-12-11
+//VERSION: 1.0
+*/
+module integer_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  //integer
+  integer tsp_j := 0;
+  template integer tspt_i_v := 9;
+  template integer tspt_i_o := omit;
+  template integer tspt_i_a := *;
+  template integer tspt_i_q :=  ?;
+  template integer tspt_i_vl1 := (1);
+  template integer tspt_i_vl2 := (0,1);
+  template integer tspt_i_vl3 := (0,1,-1);
+  template integer tspt_i_c := complement(0,1,-1);
+  template integer tspt_i_r := (1..4); //range
+
+  //templates overwritten:
+  template integer tspt_i1 := *; //overwritten by cfg for value 9
+  template integer tspt_i2 := 4; //overwritten by cfg for omit
+  template integer tspt_i3 := 5; //overwritten by cfg for *
+  template integer tspt_i4 := *; //overwritten by cfg for ?
+  template integer tspt_i5 := ?; //overwritten by cfg for value list (0,1,-1)
+  template integer tspt_i6 := *; //overwritten by cfg for 9 ifpresent
+  template integer tspt_i7 := *; //overwritten by cfg for omit
+  template integer tspt_i8 := *; //overwritten by cfg for *
+  template integer tspt_i9 := *; //overwritten by cfg for ?
+  template integer tspt_i10 := *; //overwritten by cfg for value list (0,1,-1)
+  template integer tspt_i11 := *; //overwritten by cfg for complement
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+  template REC t_rec(template integer pl_i, template float pl_f, template charstring pl_cs, template bitstring pl_bs) := {
+    i:= pl_i,
+    f:= pl_f,
+    cs:=pl_cs,
+    bs:=pl_bs
+  }
+
+  template integer t_i_v := 9;
+  template integer t_i_o := omit;
+  template integer t_i_a := *;
+  template integer t_i_q :=  ?;
+  template integer t_i_vl := (0,1,-1)
+  template integer t_i_c := complement(0,1,-1);
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  //Goal: simple integer template is  accepted as modulepar and it can be used
+  testcase tc_integer_NoModulePar() runs on MC {
+    if( log2str(t_i_v) != "9") { setverdict(fail)} else { setverdict(pass) }
+    if( log2str(t_i_o) != "omit") { setverdict(fail)};
+    if( log2str(t_i_a) != "*") { setverdict(fail)};
+    if( log2str(t_i_q) != "?") { setverdict(fail)};
+    //log(t_i_vl);
+    if( log2str(t_i_vl) != "(0, 1, -1)") { setverdict(fail) };
+    if( log2str(t_i_c) != "complement(0, 1, -1)") { setverdict(fail) };
+  }
+
+  testcase tc_integer_NoModulePar_Embedded() runs on MC {
+    log(t_rec(t_i_v,omit,omit,omit));
+    if( log2str(t_rec(t_i_v,omit,omit,omit)) != "{ i := 9, f := omit, cs := omit, bs := omit }") { setverdict(fail)} else { setverdict(pass) }
+    log(t_rec(t_i_o,omit,omit,omit));
+    if( log2str(t_rec(t_i_o,omit,omit,omit)) != "{ i := omit, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(t_i_a,omit,omit,omit));
+    if( log2str(t_rec(t_i_a,omit,omit,omit)) != "{ i := *, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(t_i_q,omit,omit,omit));
+    if( log2str(t_rec(t_i_q,omit,omit,omit)) != "{ i := ?, f := omit, cs := omit, bs := omit }") { setverdict(fail)};
+    log( t_rec(t_i_vl,omit,omit,omit));
+    if( log2str(t_rec(t_i_vl,omit,omit,omit)) !=  "{ i := (0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(t_i_c,omit,omit,omit));
+    if( log2str(t_rec(t_i_c,omit,omit,omit)) != "{ i := complement(0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+  }
+
+  testcase tc_integer_Embedded() runs on MC {
+    log(t_rec(tspt_i_v,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_v,omit,omit,omit)) != "{ i := 9, f := omit, cs := omit, bs := omit }") { setverdict(fail)} else { setverdict(pass) }
+    log(t_rec(tspt_i_o,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_o,omit,omit,omit)) != "{ i := omit, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(tspt_i_a,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_a,omit,omit,omit)) != "{ i := *, f := omit, cs := omit, bs := omit }" ) { setverdict(fail)};
+    log(t_rec(tspt_i_q,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_q,omit,omit,omit)) != "{ i := ?, f := omit, cs := omit, bs := omit }") { setverdict(fail)};
+    log( t_rec(tspt_i_vl1,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_vl1,omit,omit,omit)) !=  "{ i := 1, f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(tspt_i_vl2,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_vl2,omit,omit,omit)) !=  "{ i := (0, 1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(tspt_i_vl3,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_vl3,omit,omit,omit)) !=  "{ i := (0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+    log( t_rec(tspt_i_c,omit,omit,omit));
+    if( log2str(t_rec(tspt_i_c,omit,omit,omit)) != "{ i := complement(0, 1, -1), f := omit, cs := omit, bs := omit }") { setverdict(fail) };
+  }
+
+  testcase tc_integer_Embedded_value() runs on MC {
+    template REC vlt:=t_rec(tspt_i_v,omit,omit,omit);
+    var RoREC vl_good_values :=  {{ 9,omit,omit,omit}};
+    var RoREC vl_wrong_values := { { 10,omit,omit,omit}, { 9,1.0,omit,omit},{ 9,1.0,"lambada",'01'B}, { 10000,1.0,"lambada",'01'B} };
+    f_checkMatchingValues_rec( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_integer_Embedded_complement() runs on MC {
+    template REC vlt:=t_rec(tspt_i_c,omit,omit,omit);
+    var RoREC vl_good_values :=  { {2,omit,omit,omit},{3,omit,omit,omit},{4,omit,omit,omit},{-2,omit,omit,omit}};
+    var RoREC vl_wrong_values := { {1,omit,omit,omit},{-1,omit,omit,omit},{0,omit,omit,omit},{ 9,1.0,omit,omit},{ 9,1.0,"lambada",'01'B}, { 10000,1.0,"lambada",'01'B} };
+    f_checkMatchingValues_rec( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  testcase tc_integer_Embedded_range() runs on MC {
+    template REC vlt:=t_rec(tspt_i_r,omit,omit,omit);
+    var RoREC vl_good_values :=  {{1,omit,omit,omit},{2,omit,omit,omit},{3,omit,omit,omit},{4,omit,omit,omit}};
+    var RoREC vl_wrong_values := { {-1,omit,omit,omit},{5,omit,omit,omit},{9,omit,omit,omit},{ 10,omit,omit,omit}, { 9,1.0,omit,omit},{ 9,1.0,"lambada",'01'B}, { 10000,1.0,"lambada",'01'B} };
+    f_checkMatchingValues_rec( vlt, vl_good_values, vl_wrong_values );
+  }
+
+  //value
+  testcase tc_integer_value() runs on MC {
+    log( tspt_i_v );
+    if( log2str(tspt_i_v) != "9" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoI vl_good_values := {9}
+    var RoI vl_wrong_values := {-1000000, 0, -1,2,20001, 4294967296, 4294967296+1}
+    f_checkMatchingValues_int( tspt_i_v, vl_good_values, vl_wrong_values );
+  }
+
+  //omit
+  testcase tc_integer_omit() runs on MC {
+    log( tspt_i_o );
+    if( log2str(tspt_i_o) != "omit" ) { setverdict(fail) } else { setverdict(pass) }  
+    var RoI vl_good_values := {}
+    var RoI vl_wrong_values := { -100000, -1, 0,1,9, 4294967296, 4294967296+1} 
+    f_checkMatchingValues_int( tspt_i_o, vl_good_values, vl_wrong_values );
+  }
+
+  //asterix
+  testcase tc_integer_a() runs on MC {
+    log( tspt_i_a );
+    if( log2str(tspt_i_a) != "*" ) { setverdict(fail) } else { setverdict(pass) } 
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i_a, vl_good_values, vl_wrong_values );
+  }  
+
+  testcase tc_integer_q() runs on MC {
+    log( tspt_i_q );
+    if( log2str(tspt_i_q) != "?" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i_q, vl_good_values, vl_wrong_values );
+  }
+  //Goal: to test if integer template is modified from cfg file:
+  //value list
+  testcase tc_integer_vl() runs on MC {
+    log( tspt_i_vl3 );
+    if( log2str(tspt_i_vl3) != "(0, 1, -1)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,9,20001}
+    f_checkMatchingValues_int(tspt_i_vl3, vl_good_values,vl_wrong_values);
+  }
+
+  //goal: to test if template modulepar can be a right value
+  testcase tc_integer_vl_right_value() runs on MC {
+    var template integer vlt := tspt_i_vl3;
+    log( tspt_i_vl3 );    
+    if( log2str(vlt) != "(0, 1, -1)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,20001}
+    f_checkMatchingValues_int(vlt, vl_good_values,vl_wrong_values);
+  }  
+
+  //integer modulepar templates modified from cfg file:
+
+  // for value
+  testcase tc_integer_modified4v() runs on MC {
+    log( tspt_i1 );
+    if( log2str(tspt_i1) != "9" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoI vl_good_values := {9}
+    var RoI vl_wrong_values := {-1000000, 0, -1,2,20001, 4294967296, 4294967296+1}
+    f_checkMatchingValues_int( tspt_i1, vl_good_values, vl_wrong_values );
+  }
+
+  //for omit
+  testcase tc_integer_modified4o() runs on MC {
+    log( tspt_i2 );
+    if( log2str(tspt_i2) != "omit" ) { setverdict(fail) } else { setverdict(pass) }  
+    var RoI vl_good_values := {}
+    var RoI vl_wrong_values := { -100000, -1, 0,1,9, 4294967296, 4294967296+1} 
+    f_checkMatchingValues_int( tspt_i2, vl_good_values, vl_wrong_values );
+  }
+
+  //asterix
+  testcase tc_integer_modified4a() runs on MC {
+    log( tspt_i3 );
+    if( log2str(tspt_i3) != "*" ) { setverdict(fail) } else { setverdict(pass) } 
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i3, vl_good_values, vl_wrong_values );
+  }  
+
+  testcase tc_integer_modified4q() runs on MC {
+    log( tspt_i4 );
+    if( log2str(tspt_i4) != "?" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i4, vl_good_values, vl_wrong_values );
+  }
+
+  //value list
+  testcase tc_integer_modified4vl() runs on MC {
+    log( tspt_i5 );
+    if( log2str(tspt_i5) != "(0, 1, -1)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,20001}
+    f_checkMatchingValues_int(tspt_i5, vl_good_values,vl_wrong_values);
+  }
+
+  // for value
+  testcase tc_integer_modified4vifp() runs on MC {
+    log( tspt_i6 );
+    if( log2str(tspt_i6) != "9 ifpresent" ) { setverdict(fail) } else { setverdict(pass) }      
+    var RoI vl_good_values := {9}
+    var RoI vl_wrong_values := {-1000000, 0, -1,2,20001, 4294967296, 4294967296+1}
+    f_checkMatchingValues_int( tspt_i6, vl_good_values, vl_wrong_values );
+  }
+  //for omit
+  testcase tc_integer_modified4oifp() runs on MC {
+    log( tspt_i7 );
+    if( log2str(tspt_i7) != "omit ifpresent" ) { setverdict(fail) } else { setverdict(pass) }  
+    var RoI vl_good_values := {}
+    var RoI vl_wrong_values := { -100000, -1, 0,1,9, 4294967296, 4294967296+1} 
+    f_checkMatchingValues_int( tspt_i7, vl_good_values, vl_wrong_values );
+  }
+
+  //asterix
+  testcase tc_integer_modified4aifp() runs on MC {
+    log( tspt_i8 );
+    if( log2str(tspt_i8) != "* ifpresent" ) { setverdict(fail) } else { setverdict(pass) } 
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i8, vl_good_values, vl_wrong_values );
+  }  
+
+  testcase tc_integer_modified4qifp() runs on MC {
+    log( tspt_i9 );
+    if( log2str(tspt_i9) != "? ifpresent" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1,9, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {} 
+    f_checkMatchingValues_int( tspt_i9, vl_good_values, vl_wrong_values );
+  }
+
+  //value list
+  testcase tc_integer_modified4vlifp() runs on MC {
+    log( tspt_i10 );
+    if( log2str(tspt_i10) != "(0, 1, -1) ifpresent" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-1,0,1}
+    var RoI vl_wrong_values := {-1000000,2,20001}
+    f_checkMatchingValues_int(tspt_i10, vl_good_values,vl_wrong_values);
+  }
+
+  //complement
+  testcase tc_integer_modified4c() runs on MC {
+    log( tspt_i11);
+    if( log2str(tspt_i11) != "complement(9)" ) { setverdict(fail) } else { setverdict(pass) }
+    var RoI vl_good_values := {-100000, -1, 0,1, 4294967296, 4294967296+1}
+    var RoI vl_wrong_values := {9} 
+    f_checkMatchingValues_int( tspt_i11, vl_good_values, vl_wrong_values );
+  }
+
+
+
+//=========================================================================
+// Control
+//=========================================================================
+control {
+   log("****Integer tests****")
+  execute(tc_integer_NoModulePar());
+  execute(tc_integer_NoModulePar_Embedded()); //with template record containing template argument
+  execute(tc_integer_Embedded());
+  execute(tc_integer_Embedded_value());
+  execute(tc_integer_Embedded_complement());
+  execute(tc_integer_Embedded_range());
+  execute(tc_integer_value());
+  execute(tc_integer_omit());
+  execute(tc_integer_a());
+  execute(tc_integer_q());
+  execute(tc_integer_vl());
+  execute(tc_integer_vl_right_value());
+  //integer templates modified from cfg file"
+  execute(tc_integer_modified4v());
+  execute(tc_integer_modified4o());
+  execute(tc_integer_modified4a());
+  execute(tc_integer_modified4q());
+  execute(tc_integer_modified4vl());
+  execute(tc_integer_modified4vifp());
+  execute(tc_integer_modified4oifp());
+  execute(tc_integer_modified4aifp());
+  execute(tc_integer_modified4qifp());
+  execute(tc_integer_modified4vlifp());
+  execute(tc_integer_modified4c()); 
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/objid_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/objid_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..39c0856e5863f20ca9cbe9b3df9770d01f1996ae
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/objid_test.ttcn
@@ -0,0 +1,38 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+module objid_test 
+{
+
+type component CT {}
+
+testcase tc_objid() runs on CT {
+  const objid a := objid { itu_t(0) identified_organization(4) etsi(0) };
+  var objid b;
+  @try {
+    string2ttcn(ttcn2string(a), b);
+    if (a != b) {
+      setverdict(fail, "string2ttcn() result: ", b, ", expected: ", a);
+    }
+    setverdict(pass);
+  }
+  @catch (err_msg) {
+    setverdict(fail, "string2ttcn() failed: ", err_msg);
+  }
+}
+
+control {
+  log("*** objid tests ***");
+  execute(tc_objid())
+}
+
+}
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/octetstring_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/octetstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..4eb14793ccb46de4a0bdd78b9a6fc4ca07f629c0
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/octetstring_test.ttcn
@@ -0,0 +1,247 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module octetstring_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  //modulepar octetstrings not modified from cfg file
+  template octetstring tspt_os_v := 'ABBA'O;
+  template octetstring tspt_os_o := omit;
+  template octetstring tspt_os_a := *;
+  template octetstring tspt_os_q := ?;
+  template octetstring tspt_os_al1 := * length(2); //length restriction
+  template octetstring tspt_os_al2 := * length(2..4);
+  template octetstring tspt_os_ql1 := ? length(2);
+  template octetstring tspt_os_ql2 := ? length(2..4);
+  template octetstring tspt_os_vl1 := ('ABBA'O);
+  template octetstring tspt_os_vl2 := ('ABBA'O,'baba'O);
+  template octetstring tspt_os_vl3 := ('ABBA'O,'baba'O,'B120'O);
+  template octetstring tspt_os_c1 := complement('ABBA'O)
+  template octetstring tspt_os_c2 := complement('ABBA'O,'baba'O);
+  template octetstring tspt_os_c3 := complement('ABBA'O,'baba'O,'B120'O);
+  //template octetstring tspt_os_r1 := ('A'O..'B'O); //range not allowed
+  //template octetstring tspt_os_r2 := ('a'O..'c'O);
+  template octetstring tspt_os_pa := 'abcd*1234'O
+  template octetstring tspt_os_pq := 'abcd?1234'O
+  
+  template octetstring tspt_os_vifp := 'ABBA'O ifpresent;
+  template octetstring tspt_os_oifp := omit ifpresent;
+  template octetstring tspt_os_aifp := * ifpresent;
+  template octetstring tspt_os_qifp := ? ifpresent;
+  template octetstring tspt_os_al1ifp := * length(2) ifpresent; //length restriction
+  template octetstring tspt_os_al2ifp := * length(2..4) ifpresent;
+  template octetstring tspt_os_ql1ifp := ? length(2) ifpresent;
+  template octetstring tspt_os_ql2ifp := ? length(2..4) ifpresent;
+  template octetstring tspt_os_vl1ifp := ('ABBA'O) ifpresent;
+  template octetstring tspt_os_vl2ifp := ('ABBA'O,'baba'O) ifpresent;
+  template octetstring tspt_os_vl3ifp := ('ABBA'O,'baba'O,'B120'O) ifpresent;
+  template octetstring tspt_os_c1ifp := complement('ABBA'O) ifpresent
+  template octetstring tspt_os_c2ifp := complement('ABBA'O,'baba'O) ifpresent;
+  template octetstring tspt_os_c3ifp := complement('ABBA'O,'baba'O,'B120'O) ifpresent;
+  //template octetstring tspt_os_r1ifp := ('A'O..'B'O) ifpresent; //range not allowed
+  //template octetstring tspt_os_r2ifp := ('a'O..'c'O) ifpresent; //range not allowed
+  template octetstring tspt_os_paifp := 'abcd*1234'O  ifpresent
+  template octetstring tspt_os_pqifp := 'abcd?1234'O  ifpresent  
+  
+  //modulepar octetstrings modified from cfg file
+  template octetstring tspt_os_mod4v := * //after mod:'ABBA';
+  template octetstring tspt_os_mod4o := * //omit;
+  template octetstring tspt_os_mod4a := 'AB'O //*;
+  template octetstring tspt_os_mod4q := ''O //?;
+  template octetstring tspt_os_mod4al1 := 'AB'O //* length(2); //length restriction
+  template octetstring tspt_os_mod4al2 := '1234'O //mofified for: * length(2..4);
+  template octetstring tspt_os_mod4ql1 := '1234'O //mofified for:? length(2);
+  template octetstring tspt_os_mod4ql2 := '1234'O //mofified for:? length(2..4);
+  template octetstring tspt_os_mod4vl1 := ('ABBA'O) //TODO: Adam //It should be mofified for: ('ABBA'O);
+  template octetstring tspt_os_mod4vl2 := '1234'O //mofified for:('ABBA'O,'baba'O);
+  template octetstring tspt_os_mod4vl3 := '1234'O //mofified for:('ABBA'O,'baba'O,'B12'O);
+  template octetstring tspt_os_mod4c1 := '1234'O //mofified for:complement('ABBA')
+  template octetstring tspt_os_mod4c2 := '1234'O //mofified for:complement('ABBA','baba');
+  template octetstring tspt_os_mod4c3 := '1234'O //mofified for:complement('ABBA','baba','Bye');
+  template octetstring tspt_os_mod4r1 := '1234'O //mofified for:('A'..'B'); //range
+  template octetstring tspt_os_mod4r2 := '1234'O //mofified for:('a'..'c');
+  template octetstring tspt_os_mod4pa := '1234'O //mofified for:pattern 'abc*123'
+  template octetstring tspt_os_mod4pq := '1234'O //mofified for:pattern 'abc?123'
+  
+  template octetstring tspt_os_mod4vifp := '1234'O //mofified for:'ABBA' ifpresent;
+  template octetstring tspt_os_mod4oifp := '1234'O //mofified for:omit ifpresent;
+  template octetstring tspt_os_mod4aifp := '1234'O //mofified for:* ifpresent;
+  template octetstring tspt_os_mod4qifp := '1234'O //mofified for:? ifpresent;
+  template octetstring tspt_os_mod4al1ifp := '1234'O //mofified for:* length(2) ifpresent; //length restriction
+  template octetstring tspt_os_mod4al2ifp := '1234'O //mofified for:* length(2..4) ifpresent;
+  template octetstring tspt_os_mod4ql1ifp := '1234'O //mofified for:? length(2) ifpresent;
+  template octetstring tspt_os_mod4ql2ifp := '1234'O //mofified for:? length(2..4) ifpresent;
+  template octetstring tspt_os_mod4vl1ifp :=  ('ABBA'O) ifpresent //TODO: Adam //It should be mofified for: ('ABBA'O);
+  template octetstring tspt_os_mod4vl2ifp := '1234'O //mofified for:('ABBA','baba') ifpresent;
+  template octetstring tspt_os_mod4vl3ifp := '1234'O //mofified for:('ABBA','baba','B12') ifpresent;
+  template octetstring tspt_os_mod4c1ifp := '1234'O //mofified for:complement('ABBA') ifpresent
+  template octetstring tspt_os_mod4c2ifp := '1234'O //mofified for:complement('ABBA','baba') ifpresent;
+  template octetstring tspt_os_mod4c3ifp := '1234'O //mofified for:complement('ABBA','baba','Bye') ifpresent;
+  //template octetstring tspt_os_mod4r1ifp := '1234'O //mofified for:('A'O..'B'O) ifpresent; //range
+  //template octetstring tspt_os_mod4r2ifp := '1234'O //mofified for:('a'O..'c'O) ifpresent;
+  template octetstring tspt_os_mod4paifp := '1234'O //mofified for:pattern 'abc*xyz'O  ifpresent
+  template octetstring tspt_os_mod4pqifp := '1234'O //mofified for:pattern 'abc?xyz'O  ifpresent  
+  
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_os_ModulePar_emb() runs on MC {
+    log(t_ros(tspt_os_mod4v));
+    if(log2str(t_ros(tspt_os_mod4v)) != "{ os := \'ABBA\'O }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4o));
+    if(log2str(t_ros(tspt_os_mod4o)) != "{ os := omit }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4a));
+    if(log2str(t_ros(tspt_os_mod4a)) != "{ os := * }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4q));
+    if(log2str(t_ros(tspt_os_mod4q)) != "{ os := ? }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al1));
+    if(log2str(t_ros(tspt_os_mod4al1)) != "{ os := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al2));
+    if(log2str(t_ros(tspt_os_mod4al2)) != "{ os := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql1));
+    if(log2str(t_ros(tspt_os_mod4ql1)) != "{ os := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql2));
+    if(log2str(t_ros(tspt_os_mod4ql2)) != "{ os := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">",t_ros(tspt_os_mod4vl1),"<");
+    if(log2str(t_ros(tspt_os_mod4vl1)) != "{ os := \'ABBA\'O }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl2));
+    if(log2str(t_ros(tspt_os_mod4vl2)) != "{ os := (\'ABBA\'O, \'BABA\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(">{ os := (\'ABBA\'O, \'BABA\'O) }<");
+    log(t_ros(tspt_os_mod4vl3));
+    if(log2str(t_ros(tspt_os_mod4vl3)) != "{ os := (\'ABBA\'O, \'BABA\'O, \'B120\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c1));
+    if(log2str(t_ros(tspt_os_mod4c1)) != "{ os := complement(\'ABBA\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c2));
+    if(log2str(t_ros(tspt_os_mod4c2)) != "{ os := complement(\'ABBA\'O, \'BABA\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c3));
+    if(log2str(t_ros(tspt_os_mod4c3)) != "{ os := complement(\'ABBA\'O, \'BABA\'O, \'B120\'O) }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4pa));
+    if(log2str(t_ros(tspt_os_mod4pa)) != "{ os := \'ABCD*1234\'O }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4pq));
+    if(log2str(t_ros(tspt_os_mod4pq)) != "{ os := \'ABCD?1234\'O }") {setverdict(fail)} else {setverdict(pass)};
+    //==
+    log(t_ros(tspt_os_mod4vifp));
+    if(log2str(t_ros(tspt_os_mod4vifp)) != "{ os := \'ABBA\'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4oifp));
+    if(log2str(t_ros(tspt_os_mod4oifp)) != "{ os := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4aifp));
+    if(log2str(t_ros(tspt_os_mod4aifp)) != "{ os := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4qifp));
+    if(log2str(t_ros(tspt_os_mod4qifp)) != "{ os := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al1ifp));
+    if(log2str(t_ros(tspt_os_mod4al1ifp)) != "{ os := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4al2ifp));
+    if(log2str(t_ros(tspt_os_mod4al2ifp)) != "{ os := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql1ifp));
+    if(log2str(t_ros(tspt_os_mod4ql1ifp)) != "{ os := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4ql2ifp));
+    if(log2str(t_ros(tspt_os_mod4ql2ifp)) != "{ os := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl1ifp));
+    if(log2str(t_ros(tspt_os_mod4vl1ifp)) != "{ os := \'ABBA\'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl2ifp));
+    if(log2str(t_ros(tspt_os_mod4vl2ifp)) != "{ os := (\'ABBA\'O, \'BABA\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4vl3ifp));
+    if(log2str(t_ros(tspt_os_mod4vl3ifp)) != "{ os := (\'ABBA\'O, \'BABA\'O, \'B120\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c1ifp));
+    if(log2str(t_ros(tspt_os_mod4c1ifp)) != "{ os := complement(\'ABBA\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c2ifp));
+    if(log2str(t_ros(tspt_os_mod4c2ifp)) != "{ os := complement(\'ABBA\'O, \'BABA\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4c3ifp));
+    if(log2str(t_ros(tspt_os_mod4c3ifp)) != "{ os := complement(\'ABBA\'O, \'BABA\'O, \'B120\'O) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4paifp));
+    if(log2str(t_ros(tspt_os_mod4paifp)) != "{ os := \'ABCD*1234'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+    log(t_ros(tspt_os_mod4pqifp));
+    if(log2str(t_ros(tspt_os_mod4pqifp)) != "{ os := \'ABCD?1234\'O ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  }
+  
+  //=========================================================================
+  // Control
+  //=========================================================================
+  control {
+    log("***octetstring tests****");
+    execute(tc_os_ModulePar_emb());
+  }
+  
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/record_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/record_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..d5bfcc60d75bf39b04324af5771445b10f296772
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/record_test.ttcn
@@ -0,0 +1,1270 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module record_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //============= Type: REC =========================================
+  //
+  template REC tspt_rec_mod4empty := {}
+  template RREC tspt_rrec_mod4empty := { rec:={} }
+  template REC tspt_rec_v := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_a := *;
+  template REC tspt_rec_q := ?;
+  template REC tspt_rec_o := omit;
+  template REC tspt_rec_v_omitx4 :=  {omit,omit,omit,omit} ;
+  template REC tspt_rec_r := ({1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B})
+  template REC tspt_rec_vr := {1,1.0,("ABBA","baba"),'0100'B}
+  template REC tspt_rec_c := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+  
+  template REC tspt_rec_mod4v := {-,-,-,omit}
+  template REC tspt_rec_mod4a := {-,-,-,omit}
+  template REC tspt_rec_mod4q := {-,-,-,omit}
+  template REC tspt_rec_mod4o := {-,-,-,omit}
+  template REC tspt_rec_mod4vl2x2 := omit
+  template REC tspt_rec_mod4omitx4 := *;
+  template REC tspt_rec_mod4r := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4vr := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4c := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+  
+  template REC tspt_rec_mod4vl := {9,1.0,"NABBA",'0100'B}; //overwritten by cfg
+  template REC tspt_rec_mod4vq:= { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '01'B } // not overwritten by cfg
+  
+  template REC tspt_rec_mod4cspattern:= { i := 2, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbs:= { i := ?, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbs2:= { i := ?, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg 
+  template REC tspt_mod4pattern_mixed_order:= { i := ?, f := 1.0, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  
+  //===
+  template REC tspt_rec_mod4emptyifp := {} ifpresent
+  template RREC tspt_rrec_mod4emptyifp := { rec:= {} ifpresent }
+  template REC tspt_rec_mod4vifp := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4aifp := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_mod4qifp := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_mod4oifp := {1,1.0,"ABBA",'0100'B}
+  template REC tspt_rec_mod4vl2x2ifp := omit
+  template REC tspt_rec_mod4omitx4ifp := *;
+  template REC tspt_rec_mod4rifp := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4vrifp := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4vrifp2 := {omit,omit,omit,omit} ;
+  template REC tspt_rec_mod4cifp := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+  
+  template REC tspt_rec_mod4vlifp := {9,1.0 ifpresent,"NABBA",'0100'B ifpresent}; //overwritten by cfg
+  template REC tspt_rec_mod4vqifp := { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '01'B } // not overwritten by cfg
+  
+  template REC tspt_rec_mod4cspatternifp  := { i := 2, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbsifp:= { i := ?, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  template REC tspt_rec_mod4cspatternbs2ifp:= { i := ?, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg 
+  template REC tspt_mod4pattern_mixed_orderifp:= { i := ?, f := 1.0 ifpresent, cs:= "ABBA",bs:= '01'B} //overwritten by cfg
+  
+  template REC tspt_rec_empty := { }
+  template REC tspt_rec_emptyifp := { } ifpresent
+  //template REC tspt_rec_a := *
+  
+  template RREC tspt_rrec_empty := { rec := {} }
+  template RREC tspt_rrec_emptyifp := { rec:= {} ifpresent }
+  template RREC tspt_rrec_a := { rec := * }
+  //===
+  //not accepted:
+  /*     template REC tspt_rec_mod4vq(in template integer pl_i1) := {
+  i := pl_i1,
+  f := 1.0,
+  cs:= pattern "abc*xyz"
+  bs:= '01'B
+  } // cannot be overwritten by cfg
+  */
+  //Type:REC2
+  template REC2 tspt_REC2_1 := { b  := true ifpresent, cs := omit, i:= omit } //not overwritten by cfg
+  template REC2 tspt_REC2_2 := { b  := true ifpresent, cs := omit, i:= 2 ifpresent } //overwritten by cfg, but not really
+  template REC2 tspt_REC2_3 := { b  := true ifpresent, cs := omit, i:= omit } //overwritten by cfg, b:= *
+  template REC2 tspt_REC2_4 := { b  := true ifpresent, cs := omit, i:= omit } //overwritten by cfg, b:= * 
+  template REC2 tspt_REC2_5 := { b  := true ifpresent, cs := omit, i:= omit } //overwritten by cfg,  
+}
+
+
+//=========================================================================
+// Templates
+//=========================================================================
+template REC t_rec_v_par( template integer pl_i1) := {
+  i := pl_i1,
+  f := 1.0,
+  cs:= pattern "abc*xyz",
+  bs:= '0100'B
+} // not overwritten by cfg
+
+template REC tspt_rec_mod4vq_BUG(template integer pl_i1) := {
+  i := pl_i1,
+  f := 1.0,
+  cs:= pattern "abc*xyz",
+  bs:= '01'B
+} ; // not overwritten by cfg
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+function f_string2ttcn_REC_t(in charstring pl_rec, in template REC pl_expected_result, in boolean pl_ok_expected := true) {
+  var template REC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_rec,vl_result);
+      setverdict(pass) 
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    
+    log(pl_expected_result);
+    log(vl_result);
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_rec, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+}
+
+function f_string2ttcn_REC_t_str(in charstring pl_rec, in charstring pl_expected_result) {
+  var template REC vl_result;
+  @try {
+    string2ttcn(pl_rec,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_REC_v(in charstring pl_cs, in template REC pl_expected_result, in boolean pl_ok_expected) {
+  var REC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_REC_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var REC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//rrec
+
+function f_string2ttcn_RREC_t(in charstring pl_rrec, in template RREC pl_expected_result, in boolean pl_ok_expected := true) {
+  var template RREC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_rrec,vl_result);
+      setverdict(pass) 
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else
+  {
+    @try {
+      string2ttcn(pl_rrec, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+  }
+  log(pl_expected_result);
+  log(vl_result); 
+}
+
+function f_cs_transparent_in(in charstring pl_rrec) return charstring {
+  return pl_rrec;
+}
+
+function f_cs_transparent_inout(in charstring pl_rrec) return charstring {
+  return pl_rrec;
+}
+
+function f_cs_transparent_inout_t(in template charstring pl_rrec) return template charstring {
+  return pl_rrec;
+}
+
+function f_rrec_transparent_in_t(in template RREC pl_rrec) return template RREC {
+  return pl_rrec;
+}
+
+function f_rrec_transparent_inout_t(inout template RREC pl_rrec) return template RREC {
+  return pl_rrec;
+}
+
+//with input argumentum of string2ttcn is a reurn value of a function
+function f_string2ttcn_RREC_t_retval_in(in charstring pl_rrec, in template RREC pl_expected_result) {
+  var template RREC vl_result;
+  @try {
+    string2ttcn(f_cs_transparent_in(pl_rrec),vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_RREC_t_retval_inout(in charstring pl_rrec, in template RREC pl_expected_result) {
+  var template RREC vl_result;
+  @try {
+    string2ttcn(f_cs_transparent_inout(pl_rrec),vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_RREC_t_str(in charstring pl_rec, in charstring pl_expected_result) {
+  var template RREC vl_result;
+  @try {
+    string2ttcn(pl_rec,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_RREC_v(in charstring pl_cs, in template RREC pl_expected_result, in boolean pl_ok_expected) {
+  var RREC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_RREC_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RREC vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_rec_v() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B} }
+  var RoREC vl_wrong_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0101'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingValues_rec(tspt_rec_v, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_rec_a() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_a, vl_good_values);
+}
+
+testcase tc_rec_q() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_q, vl_good_values);
+}
+
+testcase tc_rec_o() runs on MC {
+  var RoREC vl_good_values := {};
+  var RoREC vl_wrong_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_o, vl_good_values, vl_wrong_values);
+}
+
+
+testcase tc_rec_v_omitx4() runs on MC {
+  var RoREC vl_good_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit} };
+  var RoREC vl_wrong_values := {{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_v_omitx4, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_r() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B}}
+  var RoREC vl_wrong_values := {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_r, vl_good_values, vl_wrong_values);
+}
+
+
+
+testcase tc_rec_vr() runs on MC {
+  var RoREC vl_good_values :=  {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}}
+  var RoREC vl_wrong_values := {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_vr, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_v_par() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {1,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {3,1.0,"abcAxyz",'0100'B}, {1,2.0,"abdXxyz",'0100'B}}
+  f_checkMatchingValues_rec(t_rec_v_par(1), vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_c() runs on MC {
+  var RoREC vl_good_values :=  {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}} 
+  f_checkMatchingValues_rec(tspt_rec_c, vl_good_values, vl_wrong_values);
+}
+
+//==========================
+//=== modified templates ===
+//==========================
+//==== Goal: to test if record template is modified from cfg file:===
+// tc_rec_mod4*
+
+testcase tc_rec_mod4v() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B} }
+  var RoREC vl_wrong_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0101'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4v, vl_good_values,vl_wrong_values);
+}
+
+testcase tc_rec_mod4a() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4a, vl_good_values);
+}
+
+testcase tc_rec_mod4q() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4q, vl_good_values);
+}
+
+testcase tc_rec_mod4o() runs on MC {
+  var RoREC vl_good_values := {};
+  var RoREC vl_wrong_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4o, vl_good_values, vl_wrong_values);
+}
+
+//goal: to test if template modulepar can be a right value + all fields are omit
+testcase tc_rec_mod4omitx4() runs on MC {
+  var template REC vlt := tspt_rec_mod4omitx4;
+  var RoREC vl_good_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}};
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}};
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+testcase tc_rec_mod4r() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B}}
+  var RoREC vl_wrong_values := {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_mod4r, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vr() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}}
+  var RoREC vl_wrong_values :={
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4vr, vl_good_values);
+  
+}
+
+testcase tc_rec_mod4c() runs on MC {
+  var RoREC vl_good_values :=  {
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B}} 
+  f_checkMatchingValues_rec(tspt_rec_mod4c, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vl2x2() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B}, {1,1.0,"ABBA",'01001'B},{1,1.0,"baba",'0100'B},{1,1.0,"baba",'01001'B} }
+  var RoREC vl_wrong_values := {{3,1.0,"ABBA",'0100'B},{1,2.0,"baba",'0100'B}, {1,1.0,"wrong",'0100'B},{1,1.0,"ABBA",'010010'B},{9,9.9,"wrong",'010010'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4vl2x2, vl_good_values, vl_wrong_values);
+}
+
+//modified template: {1,1.0,("ABBA","baba"),'0100'B}
+testcase tc_rec_mod4vl() runs on MC {
+  var template REC vlt := tspt_rec_mod4vl;
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B},{1,1.0,"baba",'0100'B} }
+  var RoREC vl_wrong_values := {{2,1.1,"ABBA",'0100'B}, {2,1.0,"ABBA",'01001'B}, {2,1.0,"blabla",'01001'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+//modified for { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '0100'B }
+testcase tc_rec_mod4vq() runs on MC {
+  var template REC vlt := tspt_rec_mod4vq;
+  var RoREC vl_good_values := {{1,1.0,"abc xyz",'0100'B},{112345678,1.0,"abcXxyz",'0100'B} }
+  var RoREC vl_wrong_values := {{2,1.0,"ABBA",'01'B}, {2,1.0,"ABBA",'0100'B},{3,4.0,"abcxyzz",'011'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+
+//goal: to test modification like this: { ?, -,pattern "abc*xyz", '0100'B}
+testcase tc_rec_mod4cspattern() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {omit,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspattern, vl_good_values, vl_wrong_values);
+}
+
+//template as argument of altstep
+
+altstep as_rec(template REC pl_rec, in RoREC pl_good_values, in RoREC pl_wrong_values, timer t) {
+  
+  [] t.timeout {
+    f_checkMatchingValues_rec(pl_rec, pl_good_values, pl_wrong_values);      
+  }
+}
+
+//test if altstep is cooperate with modulepar
+testcase tc_rec_mod4cspattern_as() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {omit,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}};
+  timer t:=0.1; t.start;
+  as_rec(tspt_rec_mod4cspattern, vl_good_values,vl_wrong_values, t);
+  if( log2str(tspt_rec_mod4cspattern) != "{ i := *, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+}
+
+//modify template field:
+testcase tc_rec_mod4cspatternbs() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbs, vl_good_values, vl_wrong_values);   
+  if( log2str(tspt_rec_mod4cspatternbs) != "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+}
+
+//value list notation test:
+//tspt_rec_mod4cspatternbs2: { i := ?, f := 1.0,cs:= "ABBA", bs:= '01'B} -> { i := ?, f := 1.0,cs:= pattern "abc*xyz", bs:= '01'B} 
+testcase tc_rec_mod4cspatternbs2() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbs2, vl_good_values,vl_wrong_values );
+  if( log2str(tspt_rec_mod4cspatternbs2) != "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+}
+
+//mixed fields in cfg file:
+testcase tc_mod4pattern_mixed_order() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingGoodValues_rec(tspt_mod4pattern_mixed_order, vl_good_values);
+  f_checkMatchingWrongValues_rec(tspt_mod4pattern_mixed_order, vl_wrong_values);
+  if( log2str(tspt_mod4pattern_mixed_order) != "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(fail) }
+  log(tspt_mod4pattern_mixed_order);
+}
+
+//===
+
+testcase tc_rec_mod4vifp() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B}, {omit,1.0,"ABBA",'0100'B},{omit,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0101'B}, {2,-99.9,"ABBA",'0100'B} }    
+  f_checkMatchingValues_rec(tspt_rec_mod4vifp, vl_good_values,vl_wrong_values);
+  if(log2str(tspt_rec_mod4vifp)!="{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }") {setverdict(fail);}
+}
+
+testcase tc_rec_mod4aifp() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4aifp, vl_good_values);
+}
+
+testcase tc_rec_mod4qifp() runs on MC {
+  var RoREC vl_good_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}, {1,1.0,"ABBA",'0100'B}, {2,-99.9,"ABBA",'0100'B} }
+  f_checkMatchingGoodValues_rec(tspt_rec_mod4qifp, vl_good_values);
+}
+
+testcase tc_rec_mod4oifp() runs on MC {
+  var RoREC vl_good_values := {};
+  var RoREC vl_wrong_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4oifp, vl_good_values, vl_wrong_values);
+}
+
+//goal: to test if template modulepar can be a right value + all fields are omit
+testcase tc_rec_mod4omitx4ifp() runs on MC {
+  var template REC vlt := tspt_rec_mod4omitx4ifp;
+  var RoREC vl_good_values := {{omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit}};
+  var RoREC vl_wrong_values := {{1,1.0,"ABBA",'0100'B}};
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+testcase tc_rec_mod4rifp() runs on MC {
+  var RoREC vl_good_values := {
+    {1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B}, {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{omit,1.0,omit,omit}}
+  var RoREC vl_wrong_values := {
+    {2,2.0,"ABBA",'0100'B},{3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,omit,"anything",omit},{omit,omit,omit,'01'B} 
+  }
+  f_checkMatchingValues_rec(tspt_rec_mod4rifp, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vrifp() runs on MC {
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B}, {2,1.0,"ABBA",'0100'B}, {2,-9.0,"ABBA",'0100'B},{2,2.0,"ABBA",'0100'B},
+    {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},{omit,1.0,omit,omit},{omit,omit,omit,'0100'B},{omit,omit,"ABBA",'0100'B}
+  }
+  var RoREC vl_wrong_values :={    
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},
+    {omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4vrifp, vl_good_values,vl_wrong_values );
+  
+}
+
+testcase tc_rec_mod4cifp() runs on MC {
+  var RoREC vl_good_values :=  {     
+    {3,1.0,"ABBA",'0100'B},{3,omit,omit,omit},{omit,1.1,omit,omit},{omit,omit,"anything",omit},{omit,omit,omit,'01'B} }
+  var RoREC vl_wrong_values := { {omit,omit,omit,omit},{i:=omit,f:=omit,cs:=omit, bs:=omit},
+    {1,1.0,"ABBA",'0100'B}, {1,1.0,"baba",'0100'B},{1,omit,omit,omit},{omit,1.0,omit,omit},{omit,omit,"ABBA",omit},{omit,omit,"baba",omit},{omit,omit,omit,'0100'B}} 
+  f_checkMatchingValues_rec(tspt_rec_mod4cifp, vl_good_values, vl_wrong_values);
+}
+
+testcase tc_rec_mod4vl2x2ifp() runs on MC {
+  var RoREC vl_good_values := { {1,1.0,"ABBA",'0100'B}, {1,1.0,"ABBA",'01001'B},{1,1.0,"baba",'0100'B},{1,1.0,"baba",'01001'B} }
+  var RoREC vl_wrong_values := {{3,1.0,"ABBA",'0100'B},{1,2.0,"baba",'0100'B}, {1,1.0,"wrong",'0100'B},{1,1.0,"ABBA",'010010'B},{9,9.9,"wrong",'010010'B} }
+  f_checkMatchingValues_rec(tspt_rec_mod4vl2x2ifp, vl_good_values, vl_wrong_values);
+}
+
+//modified template: {1  ifpresent,1.0 ifpresent,("ABBA","baba") ifpresent,'0100'B}
+//failed: if cs:=omit, it failes  
+testcase tc_rec_mod4vlifp() runs on MC {
+  var template REC vlt := tspt_rec_mod4vlifp;
+  var RoREC vl_good_values := {{1,1.0,"ABBA",'0100'B},{1,1.0,"baba",'0100'B}, {omit,omit,omit,'0100'B}, {i:=1,f:=1.0,cs:=omit,bs:='0100'B} }
+  var RoREC vl_wrong_values := {{2,1.1,"ABBA",'0100'B}, {2,1.0,"ABBA",'01001'B}, {2,1.0,"blabla",'01001'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+//modified for { i := ?, f := 1.0, cs:= pattern "abc*xyz", bs:= '0100'B }
+testcase tc_rec_mod4vqifp() runs on MC {
+  var template REC vlt := tspt_rec_mod4vqifp;
+  var RoREC vl_good_values := {{1,1.0,"abc xyz",'0100'B},{112345678,1.0,"abcXxyz",'0100'B} }
+  var RoREC vl_wrong_values := {{2,1.0,"ABBA",'01'B}, {2,1.0,"ABBA",'0100'B},{3,4.0,"abcxyzz",'011'B}}
+  f_checkMatchingValues_rec(vlt, vl_good_values, vl_wrong_values);
+}
+
+
+//goal: to test modification like this: { ?, -,pattern "abc*xyz", '0100'B}
+testcase tc_rec_mod4cspatternifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {omit,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternifp, vl_good_values, vl_wrong_values);
+}
+
+//test if altstep is cooperate with modulepar
+testcase tc_rec_mod4cspattern_asifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B},      
+    {omit,1.0,"abc5xyz",'0100'B},{omit,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}};
+  timer t:=0.1; t.start;
+  as_rec(tspt_rec_mod4cspatternifp, vl_good_values,vl_wrong_values, t);
+  //log(">>>Test1: { i := * ifpresent, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }")
+  //log(">>>Test2:", tspt_rec_mod4cspatternifp);
+  if( log2str(tspt_rec_mod4cspatternifp) != "{ i := * ifpresent, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+}
+
+//modify template field:
+testcase tc_rec_mod4cspatternbsifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {13,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}, {omit,omit,omit,omit} }
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbsifp, vl_good_values, vl_wrong_values);
+  //log(">>>Test3: { i := ?, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }");
+  //log(">>>Test4: ",tspt_rec_mod4cspatternbsifp);
+  if( log2str(tspt_rec_mod4cspatternbsifp) != "{ i := ?, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+}
+
+//value list notation test:
+//tspt_rec_mod4cspatternbs2: { i := ?, f := 1.0,cs:= "ABBA", bs:= '01'B} -> { i := ?, f := 1.0,cs:= pattern "abc*xyz", bs:= '01'B} 
+testcase tc_rec_mod4cspatternbs2ifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B}, {13,omit,omit,omit} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  
+  f_checkMatchingValues_rec(tspt_rec_mod4cspatternbs2ifp, vl_good_values,vl_wrong_values );
+  //if( log2str(tspt_rec_mod4cspatternbs2ifp) != "{ i := ? ifpresent, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+}
+
+//mixed fields in cfg file:
+testcase tc_mod4pattern_mixed_orderifp() runs on MC {
+  var RoREC vl_good_values  := { {1,1.0,"abcAxyz",'0100'B}, {9,1.0,"abcxyz",'0100'B},{1,1.0,"abc5xyz",'0100'B} }
+  var RoREC vl_wrong_values := { {1,1.0,"ABBA",'0100'B}, {1,2.0,"abdXxyz",'0100'B},{2,3.0,"oh",'00'B}}
+  f_checkMatchingGoodValues_rec(tspt_mod4pattern_mixed_order, vl_good_values);
+  f_checkMatchingWrongValues_rec(tspt_mod4pattern_mixed_orderifp, vl_wrong_values);
+  if( log2str(tspt_mod4pattern_mixed_orderifp) != "{ i := ?, f := 1.000000 ifpresent, cs := pattern \"abc*xyz\" ifpresent, bs := '0100'B ifpresent }") { setverdict(fail) }
+  log(tspt_mod4pattern_mixed_orderifp);
+}
+
+//==
+template REC2 t_REC2_1 := {
+  b  := true ifpresent,
+  cs := omit,
+  i := omit
+}
+
+//Goal: to test if a normal template checking is ok for "ifpresent" and "omit"
+testcase tc_REC2_0() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit} }
+  var RoREC2 vl_wrong_values := { {false,omit,omit}, {false,"a",1}, { false, "_anything_else*",1}, { true, "_anything_else*",1}, {omit, "b",1} }
+  f_checkMatchingGoodValues_rec2( t_REC2_1, vl_good_values );
+  f_checkMatchingWrongValues_rec2( t_REC2_1, vl_wrong_values );
+  log(t_REC2_1);
+  if( log2str(t_REC2_1) != "{ b := true ifpresent, cs := omit, i := omit }" ) { setverdict(fail) }
+}
+
+testcase tc_REC2_1() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit} }
+  var RoREC2 vl_wrong_values := { {false,omit,1}, {false,"a",2}, { false, "_anything_else*",2}, { true, "_anything_else*",2}, {omit, "b",omit}  }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_1, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_1, vl_wrong_values );
+  log(tspt_REC2_1);
+  if( log2str(tspt_REC2_1) != "{ b := true ifpresent, cs := omit, i := omit }" ) { setverdict(fail) }
+}
+
+testcase tc_REC2_2() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit},{omit,omit,2},{true,omit,2} }
+  var RoREC2 vl_wrong_values := { {false,omit,omit}, {false,"a",1}, { false, "_anything_else*",2}, { true, "_anything_else*", omit}, {omit,"b",1}  }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_2, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_2, vl_wrong_values );
+  log(tspt_REC2_2);
+  if( log2str(tspt_REC2_2) != "{ b := true ifpresent, cs := omit, i := 2 ifpresent }" ) { setverdict(fail) }
+}
+
+//template modification check
+testcase tc_REC2_3() runs on MC {
+  var RoREC2 vl_good_values  := { {omit,omit,omit},{true,omit,omit}, {false,omit,omit},{omit,omit,2},{true,omit,2},{false,omit,2}}
+  var RoREC2 vl_wrong_values := { {false,"a",omit}, { false, "_anything_else*",1}, { true, "_anything_else*",2}, {omit, "b",2}   }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_3, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_3, vl_wrong_values );
+  log("The modified template is: ",tspt_REC2_3);
+  if( log2str(tspt_REC2_3) != "{ b := *, cs := omit, i := 2 ifpresent }" ) { setverdict(fail) }
+}
+//template modification check, explicit name-value notation:
+testcase tc_REC2_4() runs on MC {
+  var RoREC2 vl_good_values  := { {true,omit,omit},{false,omit,omit} }
+  var RoREC2 vl_wrong_values := { {omit,omit,omit},{false,"a",1}, { false, "_anything_else*",2}, { true, "_anything_else*",2}, {omit, "b", 2} }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_4, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_4, vl_wrong_values );
+  log("The modified template is: ",tspt_REC2_4);
+  if( log2str(tspt_REC2_4) != "{ b := ?, cs := omit, i := omit }" ) { setverdict(fail) }
+}
+
+//template modification check, explicit name-value notation:
+testcase tc_REC2_5() runs on MC {
+  var RoREC2 vl_good_values  := { { true,"a", omit },{ false,"b",omit }, { true,"c", 1 }, { false, "b", 2 }}
+  var RoREC2 vl_wrong_values := { { omit,omit,omit },{ false,"al",1 }, { false, "_anything_else*", 2 }, { true, "_anything_else*",2 }, { omit,"babe", 1} }
+  f_checkMatchingGoodValues_rec2( tspt_REC2_5, vl_good_values );
+  f_checkMatchingWrongValues_rec2( tspt_REC2_5, vl_wrong_values );
+  log("The modified template is: ",tspt_REC2_5);
+  if( log2str(tspt_REC2_5) != "{ b := ?, cs := ? length (1), i := * }" ) { setverdict(fail) }
+}
+
+//==== String comparison testcases ===
+testcase tc_REC_log2str() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4v);
+  if(log2str(tspt_rec_mod4v) == "{ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4a);
+  if(log2str(tspt_rec_mod4a) == "*") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4q);
+  if(log2str(tspt_rec_mod4q) == "?") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4o);
+  if(log2str(tspt_rec_mod4o) == "omit") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(log2str(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2);
+  if(log2str(tspt_rec_mod4vl2x2) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4);
+  if(log2str(tspt_rec_mod4omitx4) == "{ i := omit, f := omit, cs := omit, bs := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4r);
+  if(log2str(tspt_rec_mod4r) == "({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(log2str(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4c);
+  if(log2str(tspt_rec_mod4c) == "complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl);
+  if(log2str(tspt_rec_mod4vl) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vq);
+  if(log2str(tspt_rec_mod4vq) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_log2str() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vifp);
+  if(log2str(tspt_rec_mod4vifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4aifp);
+  if(log2str(tspt_rec_mod4aifp) == "* ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4qifp);
+  if(log2str(tspt_rec_mod4qifp) == "? ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4oifp);
+  if(log2str(tspt_rec_mod4oifp) == "omit ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2ifp);
+  if(log2str(tspt_rec_mod4vl2x2ifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4ifp);
+  if(log2str(tspt_rec_mod4omitx4ifp) == "{ i := omit, f := omit, cs := omit, bs := omit } ifpresent" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4rifp);
+  if(log2str(tspt_rec_mod4rifp) == "({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vrifp);
+  if(log2str(tspt_rec_mod4vrifp) == "{ i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4cifp);
+  if(log2str(tspt_rec_mod4cifp) == "complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vlifp);
+  if(log2str(tspt_rec_mod4vlifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vqifp);
+  if(log2str(tspt_rec_mod4vqifp) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+
+//===
+
+// Embedded templates
+testcase tc_REC_log2str_emb() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4v));
+  if(log2str(t_rrec(tspt_rec_mod4v)) == "{ rec := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4a));
+  if(log2str(t_rrec(tspt_rec_mod4a)) == "{ rec := * }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4q));
+  if(log2str(t_rrec(tspt_rec_mod4q)) == "{ rec := ? }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4o));
+  if(log2str(t_rrec(tspt_rec_mod4o)) == "{ rec := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(log2str(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2));
+  if(log2str(t_rrec(tspt_rec_mod4vl2x2)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4));
+  if(log2str(t_rrec(tspt_rec_mod4omitx4)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4r));
+  if(log2str(t_rrec(tspt_rec_mod4r)) == "{ rec := ({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(log2str(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4c));
+  if(log2str(t_rrec(tspt_rec_mod4c)) == "{ rec := complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl));
+  if(log2str(t_rrec(tspt_rec_mod4vl)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vq));
+  if(log2str(t_rrec(tspt_rec_mod4vq)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_log2str_emb() runs on MC {
+  log(tspt_rec_empty);
+  if(log2str(tspt_rec_empty) == "<uninitialized template>") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vifp));
+  if(log2str(t_rrec(tspt_rec_mod4vifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4aifp));
+  if(log2str(t_rrec(tspt_rec_mod4aifp)) == "{ rec := * ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4qifp));
+  if(log2str(t_rrec(tspt_rec_mod4qifp)) == "{ rec := ? ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4oifp));
+  if(log2str(t_rrec(tspt_rec_mod4oifp)) == "{ rec := omit ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2ifp));
+  if(log2str(t_rrec(tspt_rec_mod4vl2x2ifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4ifp));
+  if(log2str(t_rrec(tspt_rec_mod4omitx4ifp)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4rifp));
+  if(log2str(t_rrec(tspt_rec_mod4rifp)) == "{ rec := ({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vrifp));
+  if(log2str(t_rrec(tspt_rec_mod4vrifp)) == "{ rec := { i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4cifp));
+  if(log2str(t_rrec(tspt_rec_mod4cifp)) == "{ rec := complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vlifp));
+  if(log2str(t_rrec(tspt_rec_mod4vlifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vqifp));
+  if(log2str(t_rrec(tspt_rec_mod4vqifp)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+//======================================
+//=========== ttcn2str =================
+//======================================
+
+//==== String comparison testcases ===
+testcase tc_REC_ttcn2string() runs on MC {
+  log(ttcn2string(tspt_rec_empty));
+  if(ttcn2string(tspt_rec_empty) == "-") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4v);
+  if(ttcn2string(tspt_rec_mod4v) == "{ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4a);
+  if(ttcn2string(tspt_rec_mod4a) == "*") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4q);
+  if(ttcn2string(tspt_rec_mod4q) == "?") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4o);
+  if(ttcn2string(tspt_rec_mod4o) == "omit") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(ttcn2string(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2);
+  if(ttcn2string(tspt_rec_mod4vl2x2) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4);
+  if(ttcn2string(tspt_rec_mod4omitx4) == "{ i := omit, f := omit, cs := omit, bs := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4r);
+  if(ttcn2string(tspt_rec_mod4r) == "({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vr);
+  if(ttcn2string(tspt_rec_mod4vr) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4c);
+  if(ttcn2string(tspt_rec_mod4c) == "complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl);
+  if(ttcn2string(tspt_rec_mod4vl) == "{ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vq);
+  if(ttcn2string(tspt_rec_mod4vq) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_ttcn2string() runs on MC {
+  log(ttcn2string(tspt_rec_emptyifp));
+  if(ttcn2string(tspt_rec_emptyifp) == "- ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vifp);
+  if(ttcn2string(tspt_rec_mod4vifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4aifp);
+  if(ttcn2string(tspt_rec_mod4aifp) == "* ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4qifp);
+  if(ttcn2string(tspt_rec_mod4qifp) == "? ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4oifp);
+  if(ttcn2string(tspt_rec_mod4oifp) == "omit ifpresent") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vl2x2ifp);
+  if(ttcn2string(tspt_rec_mod4vl2x2ifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4omitx4ifp);
+  if(ttcn2string(tspt_rec_mod4omitx4ifp) == "{ i := omit, f := omit, cs := omit, bs := omit } ifpresent" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4rifp);
+  if(ttcn2string(tspt_rec_mod4rifp) == "({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vrifp);
+  if(ttcn2string(tspt_rec_mod4vrifp) == "{ i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4cifp);
+  if(ttcn2string(tspt_rec_mod4cifp) == "complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent })") { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vlifp);
+  if(ttcn2string(tspt_rec_mod4vlifp) == "{ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(tspt_rec_mod4vqifp);
+  if(ttcn2string(tspt_rec_mod4vqifp) == "{ i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+// Embedded templates
+testcase tc_REC_ttcn2string_emb() runs on MC {
+  log(ttcn2string(tspt_rrec_empty));
+  if(ttcn2string(tspt_rrec_empty) == "-") { setverdict(pass) } else {setverdict(fail)}
+  log(ttcn2string(tspt_rrec_mod4empty));
+  if(ttcn2string(tspt_rrec_mod4empty) == "-") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4v));
+  if(ttcn2string(t_rrec(tspt_rec_mod4v)) == "{ rec := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4a));
+  if(ttcn2string(t_rrec(tspt_rec_mod4a)) == "{ rec := * }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4q));
+  if(ttcn2string(t_rrec(tspt_rec_mod4q)) == "{ rec := ? }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4o));
+  if(ttcn2string(t_rrec(tspt_rec_mod4o)) == "{ rec := omit }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vl2x2)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := ('0100'B, '01001'B) } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4));
+  if(ttcn2string(t_rrec(tspt_rec_mod4omitx4)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4r));
+  if(ttcn2string(t_rrec(tspt_rec_mod4r)) == "{ rec := ({ i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vr));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vr)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4c));
+  if(ttcn2string(t_rrec(tspt_rec_mod4c)) == "{ rec := complement({ i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vl)) == "{ rec := { i := 1, f := 1.000000, cs := (\"ABBA\", \"baba\"), bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vq));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vq)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B } }") { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_ifp_ttcn2string_emb() runs on MC {
+  log(ttcn2string(tspt_rrec_emptyifp));
+  if(ttcn2string(tspt_rrec_emptyifp) == "{ rec := - ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(ttcn2string(tspt_rrec_mod4emptyifp));
+  if(ttcn2string(tspt_rrec_mod4emptyifp) == "{ rec := - ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  
+  log(t_rrec(tspt_rec_mod4vifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  
+  log(ttcn2string(f_rrec_transparent_in_t(t_rrec(tspt_rec_mod4vifp))));
+  if(ttcn2string(f_rrec_transparent_in_t(t_rrec(tspt_rec_mod4vifp))) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  
+  var template RREC vlt_rrec:= t_rrec(tspt_rec_mod4vifp)
+  log(ttcn2string(f_rrec_transparent_inout_t(vlt_rrec)));
+  if(ttcn2string(f_rrec_transparent_inout_t(vlt_rrec)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  
+  log(t_rrec(tspt_rec_mod4aifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4aifp)) == "{ rec := * ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4qifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4qifp)) == "{ rec := ? ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4oifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4oifp)) == "{ rec := omit ifpresent }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vl2x2ifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vl2x2ifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\" ifpresent, \"baba\" ifpresent), bs := ('0100'B, '01001'B) ifpresent } }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4omitx4ifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4omitx4ifp)) == "{ rec := { i := omit, f := omit, cs := omit, bs := omit } ifpresent }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4rifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4rifp)) == "{ rec := ({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent }, { i := 2, f := 2.000000, cs := \"baba\", bs := '01001'B }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vrifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vrifp)) == "{ rec := { i := (1 .. 2) ifpresent, f := ? ifpresent, cs := \"ABBA\" ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4cifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4cifp)) == "{ rec := complement({ i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent }) }") { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vlifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vlifp)) == "{ rec := { i := 1 ifpresent, f := 1.000000 ifpresent, cs := (\"ABBA\", \"baba\") ifpresent, bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}
+  log(t_rrec(tspt_rec_mod4vqifp));
+  if(ttcn2string(t_rrec(tspt_rec_mod4vqifp)) == "{ rec := { i := ?, f := 1.000000, cs := pattern \"abc*xyz\", bs := '0100'B ifpresent } }" ) { setverdict(pass) } else {setverdict(fail)}         
+}
+
+testcase tc_REC_string2ttcn_empty() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_empty),tspt_rec_empty);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_empty),tspt_rec_empty,true);
+}
+
+testcase tc_REC_string2ttcn_v() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_v), tspt_rec_v);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_v),tspt_rec_v,true);
+  
+  var charstring vl_cs := ttcn2string(tspt_rec_v);
+  f_string2ttcn_REC_t(vl_cs, tspt_rec_v);
+  f_string2ttcn_REC_v(vl_cs, tspt_rec_v,true);    
+}
+
+testcase tc_REC_string2ttcn_a() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_a), tspt_rec_a);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_a),tspt_rec_a,false);
+}
+
+testcase tc_REC_string2ttcn_q() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_q), tspt_rec_q);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_q),tspt_rec_q,false);
+}
+
+
+testcase tc_REC_string2ttcn_o() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_o), tspt_rec_o);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_o),tspt_rec_o,false);
+}
+
+testcase tc_REC_string2ttcn_v_omitx4() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_v_omitx4), tspt_rec_v_omitx4);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_v_omitx4),tspt_rec_v_omitx4,true);
+}
+
+testcase tc_REC_string2ttcn_r() runs on MC {
+  f_string2ttcn_REC_t(ttcn2string(tspt_rec_r), tspt_rec_r);
+  f_string2ttcn_REC_v(ttcn2string(tspt_rec_r),tspt_rec_r,false);
+}
+
+//==rrec - the embedded case ===
+
+testcase tc_RREC_string2ttcn_empty() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(tspt_rrec_empty),tspt_rrec_empty);
+  f_string2ttcn_RREC_v(ttcn2string(tspt_rrec_empty),tspt_rrec_empty,true);
+}
+
+testcase tc_RREC_string2ttcn_v() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4v)), t_rrec(tspt_rec_mod4v));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4v)),t_rrec(tspt_rec_mod4v),true);
+  
+  f_string2ttcn_RREC_t_retval_in(ttcn2string(t_rrec(tspt_rec_mod4v)), t_rrec(tspt_rec_mod4v));
+  f_string2ttcn_RREC_t_retval_inout(ttcn2string(t_rrec(tspt_rec_mod4v)), t_rrec(tspt_rec_mod4v));
+}
+
+testcase tc_RREC_string2ttcn_a() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4a)), t_rrec(tspt_rec_mod4a));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4a)),t_rrec(tspt_rec_mod4a),false);
+}
+
+testcase tc_RREC_string2ttcn_q() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4q)), t_rrec(tspt_rec_mod4q));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4q)),t_rrec(tspt_rec_mod4q),false);
+}
+
+
+testcase tc_RREC_string2ttcn_o() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4o)), t_rrec(tspt_rec_mod4o));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4o)),t_rrec(tspt_rec_mod4o),true);
+}
+
+testcase tc_RREC_string2ttcn_omitx4() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4omitx4)), t_rrec(tspt_rec_mod4omitx4));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4omitx4)), t_rrec(tspt_rec_mod4omitx4),true);
+}
+
+testcase tc_RREC_string2ttcn_r() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4r)), t_rrec(tspt_rec_mod4r));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4r)), t_rrec(tspt_rec_mod4r),false);
+}
+
+//ifpresent
+testcase tc_RREC_string2ttcn_vifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4vifp)), t_rrec(tspt_rec_mod4vifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4vifp)),t_rrec(tspt_rec_mod4vifp),false);
+}
+
+testcase tc_RREC_string2ttcn_aifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4aifp)), t_rrec(tspt_rec_mod4aifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4aifp)),t_rrec(tspt_rec_mod4aifp),false);
+}
+
+testcase tc_RREC_string2ttcn_qifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4qifp)), t_rrec(tspt_rec_mod4qifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4qifp)),t_rrec(tspt_rec_mod4qifp),false);
+}
+
+
+testcase tc_RREC_string2ttcn_oifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4oifp)), t_rrec(tspt_rec_mod4oifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4oifp)),t_rrec(tspt_rec_mod4oifp),false); //failed !!!
+}
+
+testcase tc_RREC_string2ttcn_omitx4ifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4omitx4ifp)), t_rrec(tspt_rec_mod4omitx4ifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4omitx4ifp)), t_rrec(tspt_rec_mod4omitx4ifp),false);
+}
+
+testcase tc_RREC_string2ttcn_rifp() runs on MC {
+  f_string2ttcn_RREC_t(ttcn2string(t_rrec(tspt_rec_mod4rifp)), t_rrec(tspt_rec_mod4rifp));
+  f_string2ttcn_RREC_v(ttcn2string(t_rrec(tspt_rec_mod4rifp)), t_rrec(tspt_rec_mod4rifp),false);
+} 
+
+//=== Negative tests ====
+
+testcase tc_RREC_string2ttcn_neg1() runs on MC {
+  f_string2ttcn_RREC_t("{ rec := ? ifpresent }", t_rrec(tspt_rec_mod4qifp),true);
+  f_string2ttcn_RREC_t("{ recfalse := ? ifpresent }", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_t("{ rec :=  ifpresent }", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_t("{ rec :=  x ifpresent }", t_rrec(tspt_rec_mod4qifp),false);// TODO: wrong error message
+  f_string2ttcn_RREC_t("{ rec :=  {x:=1 ifpresent }}", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_t("{ rec :=  {x:=1 ifpresent }", t_rrec(tspt_rec_mod4qifp),false);
+  f_string2ttcn_RREC_v("{ recfalse := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }" , t_rrec(tspt_rec_v),false);
+} 
+
+//=========================================================================
+// Control
+//=========================================================================
+control {
+  log("****record tests****");
+  execute(tc_rec_v());
+  execute(tc_rec_a());
+  execute(tc_rec_q());
+  execute(tc_rec_o());
+  execute(tc_rec_v_omitx4());
+  execute(tc_rec_r());  
+  execute(tc_rec_vr());
+  execute(tc_rec_v_par());
+  execute(tc_rec_c());
+  //=== modified templates ===
+  execute(tc_rec_mod4v());
+  execute(tc_rec_mod4a());
+  execute(tc_rec_mod4q());
+  execute(tc_rec_mod4o());
+  execute(tc_rec_mod4omitx4());
+  execute(tc_rec_mod4r());
+  execute(tc_rec_mod4vr());
+  execute(tc_rec_mod4c());
+  execute(tc_rec_mod4vl2x2());  
+  execute(tc_rec_mod4vl());
+  execute(tc_rec_mod4vq());
+  execute(tc_rec_mod4cspattern());
+  execute(tc_rec_mod4cspattern_as());
+  execute(tc_rec_mod4cspatternbs());
+  execute(tc_mod4pattern_mixed_order());
+  //==modified ispresent templates ====
+  execute(tc_rec_mod4vifp());
+  execute(tc_rec_mod4aifp());
+  execute(tc_rec_mod4qifp());
+  execute(tc_rec_mod4oifp());
+  execute(tc_rec_mod4omitx4ifp());
+  execute(tc_rec_mod4rifp());
+  execute(tc_rec_mod4vrifp());
+  execute(tc_rec_mod4cifp());
+  execute(tc_rec_mod4vl2x2ifp());  
+  execute(tc_rec_mod4vlifp());
+  execute(tc_rec_mod4vqifp());
+  execute(tc_rec_mod4cspatternifp());
+  execute(tc_rec_mod4cspattern_asifp());
+  execute(tc_rec_mod4cspatternbsifp());
+  execute(tc_rec_mod4cspatternbs2ifp());
+  execute(tc_mod4pattern_mixed_orderifp());
+  
+  execute(tc_REC2_0());
+  execute(tc_REC2_1());
+  execute(tc_REC2_2());
+  execute(tc_REC2_3());
+  execute(tc_REC2_4());
+  execute(tc_REC2_5());
+  
+  //==== String comparison testcases ===
+  execute(tc_REC_log2str());
+  execute(tc_REC_ifp_log2str());
+  execute(tc_REC_log2str_emb());
+  execute(tc_REC_ifp_log2str_emb());
+  
+  execute(tc_REC_ttcn2string());
+  execute(tc_REC_ifp_ttcn2string());
+  execute(tc_REC_ttcn2string_emb());
+  execute(tc_REC_ifp_ttcn2string_emb());  
+  
+  //execute(tc_REC_string2ttcn_empty()); //TODO: Adam, correct the two bugs. --NOT solved, 
+  execute(tc_REC_string2ttcn_v());
+  execute(tc_REC_string2ttcn_a());
+  execute(tc_REC_string2ttcn_q());
+  execute(tc_REC_string2ttcn_o());
+  execute(tc_REC_string2ttcn_v_omitx4());
+  execute(tc_REC_string2ttcn_r()); //TODO: check the error message "Error while setting parameter field '': Type mismatch: ..."
+  
+  execute(tc_RREC_string2ttcn_v());
+  execute(tc_RREC_string2ttcn_a());
+  execute(tc_RREC_string2ttcn_q());
+  execute(tc_RREC_string2ttcn_o());
+  execute(tc_RREC_string2ttcn_omitx4());
+  execute(tc_RREC_string2ttcn_r()); //TODO: check the error message ""Error while setting parameter field '.rec': ..."  
+  
+  execute(tc_RREC_string2ttcn_vifp());
+  execute(tc_RREC_string2ttcn_aifp());
+  execute(tc_RREC_string2ttcn_qifp());
+  execute(tc_RREC_string2ttcn_oifp()); //fixed by Adam: string2ttcn: { rec := omit ifpresent } -> { rec := omit } /value/, it should be reported as an error!!!!
+  execute(tc_RREC_string2ttcn_omitx4ifp());
+  execute(tc_RREC_string2ttcn_rifp()); //TODO: check the error message ""Error while setting parameter field '.rec': ..."  
+  execute(tc_RREC_string2ttcn_neg1()); 
+  
+}
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/recordof_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/recordof_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..b2e7c2960a099b7bd42ae8016ca0f4d1c1274df0
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/recordof_test.ttcn
@@ -0,0 +1,772 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module recordof_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+ 
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+    //record of
+  template RoI tspt_recof_i_v0 := {};
+  template RoI tspt_recof_i_v1 := {1};
+  template RoI tspt_recof_i_v2 := {1,2};
+  //template RoI tspt_recof_i_v2 := {omit,2}; //not allowed
+  template RoI tspt_recof_i_v3 := {1,2,3};
+  template RoI tspt_recof_i_v3a := {1,*,3};
+  template RoI tspt_recof_i_v3q := {1,?,3};
+  template RoI tspt_recof_i_vl3 := {(1,2),2,(3,4)}; //value list
+  template RoI tspt_recof_i_vl :=  ( {1,2,3}, {2,2,4} )
+  template RoI tspt_recof_i_v10 := {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_o := omit;
+  template RoI tspt_recof_i_a := *;
+  template RoI tspt_recof_i_q := ?;
+  template RoI tspt_recof_i_r := {1,(1..3)}; //range
+  //template RoI tspt_recof_i_c := complement {1,2}; //range
+  template RoI tspt_recof_i_c := {1,complement(1,2,3)}
+  //template RoI tspt_recof_i_cr := {1,complement(1..3)}
+  template RoI tspt_recof_i_lv := ? length(3)
+  template RoI tspt_recof_i_lr := ? length(3..5)  //length range
+  template RoI tspt_recof_i_p := { permutation (1,2,3),10 }
+
+  //it will modified for sth in cfg file:
+  template RoI tspt_recof_i_mod4v0 := ? 
+  template RoI tspt_recof_i_mod4v1 := ?
+  template RoI tspt_recof_i_mod4v2 := ?;
+  template RoI tspt_recof_i_mod4v3 := ?;
+  template RoI tspt_recof_i_mod4v3a := ?;
+  template RoI tspt_recof_i_mod4v3q := ?;
+  template RoI tspt_recof_i_mod4vl3 := ({1},{(1,2),2,(3,4)}); //value list
+  template RoI tspt_recof_i_mod4vl :=   ?
+  template RoI tspt_recof_i_mod4v10 := ?
+  template RoI tspt_recof_i_mod4o :=  {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_mod4a :=  {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_mod4q := {1,2,3,4,5,6,7,8,9,10};
+  template RoI tspt_recof_i_mod4r :=  {2};
+  template RoI tspt_recof_i_mod4cu :=  { permutation (1,2,3),10 }; ///almost bug
+  template RoI tspt_recof_i_mod4c :=  { permutation (1,2,3),10 }; ///almost bug
+  template RoI tspt_recof_i_mod4cm1 :=  { permutation (1,2,3) };
+  template RoI tspt_recof_i_mod4cm2 :=  { permutation (1,2,3),10 };
+  template RoI tspt_recof_i_mod4lv :=  ?
+  template RoI tspt_recof_i_mod4lr :=  *
+  template RoI tspt_recof_i_mod4p := {12,34}
+  template RoI tspt_recof_i_mod4rifp := {12,34} //will be changed for range
+  template RoI tspt_recof_i_mod4vlifp := *  //will be changed
+  //rec of float
+  template RoF tspt_recof_f_v0 := {};
+  template RoF tspt_recof_f_v1 := {1.0};
+  template RoF tspt_recof_f_v2 := {1.0,2.0};
+  //template RoF tspt_recof_f_v2 := {omit,2.0}; //not allowed
+  template RoF tspt_recof_f_v3 := {1.0,2.0,3.0};
+  template RoF tspt_recof_f_v3a := {1.0,*,3.0};
+  template RoF tspt_recof_f_v3q := {1.0,?,3.0};
+  template RoF tspt_recof_f_vl3 := {(1.0,2.0),2.0,(3.0,4.0)}; //value list
+  template RoF tspt_recof_f_vl :=  ( {1.0,2.0,3.0}, {2.0,2.0,4.0} )
+  template RoF tspt_recof_f_v10 := {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_o := omit;
+  template RoF tspt_recof_f_a := *;
+  template RoF tspt_recof_f_q := ?;
+  template RoF tspt_recof_f_r := {1.0,(1.0..3.0)}; //range
+  //template RoF tspt_recof_f_c := complement {1.0,2.0}; //range
+  template RoF tspt_recof_f_c := {1.0,complement(1.0,2.0,3.0)}
+  //template RoF tspt_recof_f_cr := {1,complement(1.0..3.0)}
+  template RoF tspt_recof_f_lv := ? length(3)
+  template RoF tspt_recof_f_lr := ? length(3..5)  //length range
+  template RoF tspt_recof_f_p := { permutation (1.0,2.0,3.0),10.0 }
+
+  //it will modified for sth in cfg file:
+  template RoF tspt_recof_f_mod4v0 := ? 
+  template RoF tspt_recof_f_mod4v1 := ?
+  template RoF tspt_recof_f_mod4v2 := ?;
+  template RoF tspt_recof_f_mod4v3 := ?;
+  template RoF tspt_recof_f_mod4v3a := ?;
+  template RoF tspt_recof_f_mod4v3q := ?;
+  template RoF tspt_recof_f_mod4vl3 := ({1.0},{(1.0,2.0),2.0,(3.0,4.0)}); //value list
+  template RoF tspt_recof_f_mod4vl :=   ?
+  template RoF tspt_recof_f_mod4v10 := ?
+  template RoF tspt_recof_f_mod4o :=  {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_mod4a :=  {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_mod4q := {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
+  template RoF tspt_recof_f_mod4r :=  {2.0};
+  template RoF tspt_recof_f_mod4cu :=  { permutation (1.0,2.0,3.0),10.0 }; ///almost bug
+  template RoF tspt_recof_f_mod4c :=  { permutation (1.0,2.0,3.0),10.0 }; ///almost bug
+  template RoF tspt_recof_f_mod4cm1 :=  { permutation (1.0,2.0,3.0) };
+  template RoF tspt_recof_f_mod4cm2 :=  { permutation (1.0,2.0,3.0),10.0 };
+  template RoF tspt_recof_f_mod4lv :=  ?
+  template RoF tspt_recof_f_mod4lr :=  *
+  template RoF tspt_recof_f_mod4p := {12.0,34.0}
+  template RoF tspt_recof_f_mod4rifp := {12.0,34.0} //will be changed for range
+}
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+  //record of
+  template RoI t_recof_i_v0 := {};
+  template RoI t_recof_i_v1 := {1};
+  template RoI t_recof_i_v2 := {1,2};
+  //template RoI t_recof_i_v2 := {omit,2}; //not allowed
+  template RoI t_recof_i_v3 := {1,2,3};
+  template RoI t_recof_i_v3a := {1,*,3};
+  template RoI t_recof_i_v3q := {1,?,3};
+  template RoI t_recof_i_vl3 := {(1,2),2,(3,4)}; //value list
+  template RoI t_recof_i_v10 := {1,2,3,4,5,6,7,8,9,10};
+  template RoI t_recof_i_o := omit;
+  template RoI t_recof_i_a := *;
+  template RoI t_recof_i_q := ?;
+  template RoI t_recof_i_r := {1,(1..3)}; //range
+  //template RoI t_recof_i_c := complement {1,2}; 
+  template RoI t_recof_i_c := {1,complement(1,2,3)}
+  //template RoI t_recof_i_cr := {1,complement(1..3)} //TODO: check why it is not accepted
+  template RoI t_recof_i_lv := ? length(3)
+  template RoI t_recof_i_lr := ? length(3..5)  //length range
+  template RoI t_recof_i_p := { permutation (1,2,3),10 }
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+  testcase tc_recordof_i_NoModulePar() runs on MC {
+
+    log(t_recof_i_v0);
+    if( log2str(t_recof_i_v0) != "{ }") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v1);
+    if( log2str(t_recof_i_v1) != "{ 1 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v2);
+    if( log2str(t_recof_i_v2) != "{ 1, 2 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v3);
+    if( log2str(t_recof_i_v3) != "{ 1, 2, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v3a);
+    if( log2str(t_recof_i_v3a) != "{ 1, *, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v3q);
+    if( log2str(t_recof_i_v3q) != "{ 1, ?, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_vl3);
+    if( log2str(t_recof_i_vl3) != "{ (1, 2), 2, (3, 4) }") {setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_v10);
+    if( log2str(t_recof_i_v10) != "{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }") {setverdict(fail) };
+    log(t_recof_i_o);
+    if( log2str(t_recof_i_o) != "omit") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_a);
+    if( log2str(t_recof_i_a) != "*") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_q);
+    if( log2str(t_recof_i_q) != "?") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_r);
+    if( log2str(t_recof_i_r) != "{ 1, (1 .. 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_c);
+    if( log2str(t_recof_i_c) != "{ 1, complement(1, 2, 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_lv);
+    if( log2str(t_recof_i_lv) != "? length (3)") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_lr);
+    if( log2str(t_recof_i_lr) != "? length (3 .. 5)") { setverdict(fail) } else { setverdict(pass) };
+    log(t_recof_i_p);
+    if( log2str(t_recof_i_p) != "{ permutation(1, 2, 3), 10 }") { setverdict(fail) } else { setverdict(pass) };
+  }
+
+
+  testcase tc_recordof_i_ModulePar() runs on MC {
+
+    log(tspt_recof_i_v0);
+    if( log2str(tspt_recof_i_v0) != "{ }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v1);
+    if( log2str(tspt_recof_i_v1) != "{ 1 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v2);
+    if( log2str(tspt_recof_i_v2) != "{ 1, 2 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v3);
+    if( log2str(tspt_recof_i_v3) != "{ 1, 2, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v3a);
+    if( log2str(tspt_recof_i_v3a) != "{ 1, *, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v3q);
+    if( log2str(tspt_recof_i_v3q) != "{ 1, ?, 3 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_vl3);
+    if( log2str(tspt_recof_i_vl3) != "{ (1, 2), 2, (3, 4) }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_v10);
+    if( log2str(tspt_recof_i_v10) != "{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }") {setverdict(fail) };
+    log(tspt_recof_i_o);
+    if( log2str(tspt_recof_i_o) != "omit") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_a);
+    if( log2str(tspt_recof_i_a) != "*") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_q);
+    if( log2str(tspt_recof_i_q) != "?") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_r);
+    if( log2str(tspt_recof_i_r) != "{ 1, (1 .. 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_c);
+    if( log2str(tspt_recof_i_c) != "{ 1, complement(1, 2, 3) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_lv);
+    if( log2str(tspt_recof_i_lv) != "? length (3)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_lr);
+    if( log2str(tspt_recof_i_lr) != "? length (3 .. 5)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_i_p);
+    if( log2str(tspt_recof_i_p) != "{ permutation(1, 2, 3), 10 }") { setverdict(fail) } else { setverdict(pass) };
+  }
+
+  testcase tc_recordof_i_Embedded() runs on MC { //TODO
+    //TODO
+  }
+  //=====  
+  testcase tc_recordof_i_v0() runs on MC {
+    log(tspt_recof_i_v0);
+    var RoI vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i }
+    var RoRoI vl_good_values := { {} }
+    var RoRoI vl_wrong_values := { {1},{2},{1,2,3},{1,2,3,4,1000}, vl_long } 
+    f_checkMatchingValues_roi(tspt_recof_i_v0,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v1() runs on MC {
+    log(tspt_recof_i_v1);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1} };
+    var RoRoI vl_wrong_values := { {2},{1,2},{1,2,3},{1,2,3,4,1000} }   //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v2() runs on MC {
+    log(tspt_recof_i_v2);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,3},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v2,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v3() runs on MC {
+    log(tspt_recof_i_v3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v3a() runs on MC {
+    log(tspt_recof_i_v3a);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v3a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_v3q() runs on MC {
+    log(tspt_recof_i_v3q);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v3q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_vl3() runs on MC {
+    log(tspt_recof_i_vl3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3}, {2,2,3}, {1,2,4}, {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,5},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_vl3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_vl() runs on MC {
+    log(tspt_recof_i_vl);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3},  {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {2,2,3}, {1,2,4} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_vl,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_i_v10() runs on MC {
+    log(tspt_recof_i_v10);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3,4,5,6,7,8,9,10} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11}} //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_v10,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_o() runs on MC {
+    log(tspt_recof_i_o);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := {};
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_o,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_a() runs on MC {
+    log(tspt_recof_i_a);
+    var RoRoI vl_good_values := {{}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_q() runs on MC {
+    log(tspt_recof_i_q);
+    var RoRoI vl_good_values := { {}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_r() runs on MC {
+    log(tspt_recof_i_r);
+    var RoRoI vl_good_values := { {1,1},{1,2},{1,3} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_r,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_c() runs on MC {
+    log(tspt_recof_i_c);
+    var RoRoI vl_good_values := { {1,0},{1,4},{1,5}} 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_c,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_i_lv() runs on MC {
+    log(tspt_recof_i_lv);
+    var RoRoI vl_good_values := { {0,1,0},{1,4,5},{1,5,-1},{1000,6000,700},{11,5,-3},{1,2,4}} 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3},{1,2,3,4,1000},{1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_lv,vl_good_values,vl_wrong_values);
+  }  
+
+  //length range
+  testcase tc_recordof_i_lr() runs on MC {
+    log(tspt_recof_i_lr);
+    var RoRoI vl_good_values := { {1,0,1},{1,2,3,4},{1,2,3,4,5},{-5,4,3,2,1}, {0,0,0} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3}, {1,2,3,4,1000,1001}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_lr,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_p() runs on MC {
+    log(tspt_recof_i_p);
+    var RoRoI vl_good_values := { {1,2,3,10},{1,3,2,10},{2,1,3,10},{2,3,1,10},{3,1,2,10},{3,2,1,10} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3},{11,5,-3},{1,2,4},{1,2,3,11}, {4,2,3,10},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_p,vl_good_values,vl_wrong_values);
+  }    
+
+  //====recordof templates modified from cfg file=====
+
+  testcase tc_recordof_i_mod4v0() runs on MC {
+    log(tspt_recof_i_mod4v0);
+    var RoI vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i }
+    var RoRoI vl_good_values := { {} }
+    var RoRoI vl_wrong_values := { {1},{2},{1,2,3},{1,2,3,4,1000}, vl_long } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v0,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v1() runs on MC {
+    log(tspt_recof_i_mod4v1);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1} };
+    var RoRoI vl_wrong_values := { {},{2},{1,2},{1,2,3},{1,2,3,4,1000} }   //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v2() runs on MC {
+    log(tspt_recof_i_mod4v2);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2} };
+    var RoRoI vl_wrong_values := { {},{1},{2},{2,3},{1,2,3},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v2,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v3() runs on MC {
+    log(tspt_recof_i_mod4v3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v3a() runs on MC {
+    log(tspt_recof_i_mod4v3a);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v3a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4v3q() runs on MC {
+    log(tspt_recof_i_mod4v3q);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,1,3}, {1,2,3}, {1,3,3}, {1,4,3}, {1,9999,3} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v3q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4vl3() runs on MC {
+    log(tspt_recof_i_mod4vl3);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3}, {2,2,3}, {1,2,4}, {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,5},{1,2,3,4,1000} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4vl3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4vl() runs on MC {
+    log(tspt_recof_i_mod4vl);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3},  {2,2,4} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {2,2,3}, {1,2,4} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4vl,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_i_mod4v10() runs on MC {
+    log(tspt_recof_i_mod4v10);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := { {1,2,3,4,5,6,7,8,9,10} };
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11}} //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4v10,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4o() runs on MC {
+    log(tspt_recof_i_mod4o);
+    //var RoI vl_long :={}; //to stress test
+    //for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= i };
+    var RoRoI vl_good_values := {};
+    var RoRoI vl_wrong_values := { {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } //, vl_long };
+    f_checkMatchingValues_roi(tspt_recof_i_mod4o,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4a() runs on MC {
+    log(tspt_recof_i_mod4a);
+    var RoRoI vl_good_values := {{}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4q() runs on MC {
+    log(tspt_recof_i_mod4q);
+    var RoRoI vl_good_values := { {}, {2},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    var RoRoI vl_wrong_values := {}; 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4q,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4r() runs on MC {
+    log(tspt_recof_i_mod4r);
+    var RoRoI vl_good_values := { {1,1},{1,2},{1,3} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4r,vl_good_values,vl_wrong_values);
+  }
+
+  //fails
+  testcase tc_recordof_i_cu_noconfig() runs on MC {
+    var template RoI vlt := { permutation (1,2,3),10 }
+    log("Before mod: ",vlt);   //Before mod: { permutation(1, 2, 3), 10 }
+    vlt := { 1, complement(1,2,3),3,4 } ;
+    log("after mod: ",vlt); //after mod:  { permutation(1, complement(1, 2, 3), 3), 4 } but it should be { 1, complement(1,2,3),3,4 } 
+    var RoRoI vl_good_values := {{1,0,3,4},{1,4,3,4},{1,5,3,4},{1,-1,3,4}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1,3,4},{1,2,3,4},{1,3,3,4},{1,2,3,4},{1,3},{3,1,1,4} } 
+    f_checkMatchingValues_roi(vlt,vl_good_values,vl_wrong_values);
+  }
+
+  //fails
+  testcase tc_recordof_i_mod4c_undefined() runs on MC {
+    //original:
+    log(tspt_recof_i_mod4cu); //expected: { 1, complement(1,2,3),3,4 } , got:  { permutation(1, complement(1, 2, 3), 3), 4 }
+    var RoRoI vl_good_values :=   {{1,0,3,4},{1,4,3,4},{1,5,3,4},{1,-1,3,4}}
+    var RoRoI vl_wrong_values :=  { {}, {2},{1,1,3,4},{1,2,3,4},{1,3,3,4},{1,2,3,4},{1,3},{3,1,1,4} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4cu,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4c() runs on MC {
+    log(tspt_recof_i_mod4c);
+    var RoRoI vl_good_values := {{1,0,1,1},{1,4,1,1},{1,5,1,1}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4c,vl_good_values,vl_wrong_values);
+  }  
+
+  //3->3 elements
+  testcase tc_recordof_i_mod4cm1() runs on MC {
+    log(tspt_recof_i_mod4cm1);
+    var RoRoI vl_good_values := {{1,0,1},{1,4,1},{1,5,1}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4cm1,vl_good_values,vl_wrong_values);
+  }
+  //3->5 elements
+  testcase tc_recordof_i_mod4cm2() runs on MC {
+    log(tspt_recof_i_mod4cm2);
+    var RoRoI vl_good_values := {{1,0,1,1,1},{1,4,1,1,1},{1,5,1,1,1}}
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3}, {2,4},{-1,4},{2,3},{1,2,4},{1,2,3,10}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4cm2,vl_good_values,vl_wrong_values);
+  }
+  testcase tc_recordof_i_mod4lv() runs on MC {
+    log(tspt_recof_i_mod4lv);
+    var RoRoI vl_good_values := { {0,1,0},{1,4,5},{1,5,-1},{1000,6000,700},{11,5,-3},{1,2,4},{2,3,4}} 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{1,2,3,4,1000},{1,2,3,4,5,6,7,8,9,11}} 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4lv,vl_good_values,vl_wrong_values);
+  }  
+
+  //length range
+  testcase tc_recordof_i_mod4lr() runs on MC {
+    log(tspt_recof_i_mod4lr);
+    var RoRoI vl_good_values := { {1,0,1},{1,2,3,4},{1,2,3,4,5},{-5,4,3,2,1}, {0,0,0} } 
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3}, {1,2,3,4,1000,1001}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4lr,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4p() runs on MC {
+    log(tspt_recof_i_mod4p);
+    var RoRoI vl_good_values := { {1,2,3,10},{1,3,2,10},{2,1,3,10},{2,3,1,10},{3,1,2,10},{3,2,1,10} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,1},{1,2},{1,3},{2,4},{-1,4},{2,3},{11,5,-3},{1,2,4},{1,2,3,11}, {4,2,3,10},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4p,vl_good_values,vl_wrong_values);
+  } 
+
+  testcase tc_recordof_i_mod4rifp() runs on MC {
+    log(tspt_recof_i_mod4rifp);
+    var RoRoI vl_good_values := { {1,1},{1,2},{1,3} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4rifp,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_i_mod4vlifp() runs on MC {
+    log(tspt_recof_i_mod4vlifp);
+    var RoRoI vl_good_values := { {1,2,3},{2,2,4} }
+    var RoRoI vl_wrong_values := { {}, {2},{1,4},{-1,4},{2,3},{1,2,4},{1,2,3,4,1000}, {1,2,3,4,5,6,7,8,9,11},{1,2,3,4,5,6,7,8,9,10} } 
+    f_checkMatchingValues_roi(tspt_recof_i_mod4vlifp,vl_good_values,vl_wrong_values);
+  }
+  
+  //record of floats
+  testcase tc_recordof_f_ModulePar() runs on MC {
+
+    log(tspt_recof_f_v0);
+    if( log2str(tspt_recof_f_v0) != "{ }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v1);
+    if( log2str(tspt_recof_f_v1) != "{ 1.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v2);
+    if( log2str(tspt_recof_f_v2) != "{ 1.000000, 2.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v3);
+    if( log2str(tspt_recof_f_v3) != "{ 1.000000, 2.000000, 3.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v3a);
+    if( log2str(tspt_recof_f_v3a) != "{ 1.000000, *, 3.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v3q);
+    if( log2str(tspt_recof_f_v3q) != "{ 1.000000, ?, 3.000000 }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_vl3);
+    if( log2str(tspt_recof_f_vl3) != "{ (1.000000, 2.000000), 2.000000, (3.000000, 4.000000) }") {setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_v10);
+    if( log2str(tspt_recof_f_v10) != "{ 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000 }") {setverdict(fail) };
+    log(tspt_recof_f_o);
+    if( log2str(tspt_recof_f_o) != "omit") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_a);
+    if( log2str(tspt_recof_f_a) != "*") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_q);
+    if( log2str(tspt_recof_f_q) != "?") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_r);
+    if( log2str(tspt_recof_f_r) != "{ 1.000000, (1.000000 .. 3.000000) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_c);
+    if( log2str(tspt_recof_f_c) != "{ 1.000000, complement(1.000000, 2.000000, 3.000000) }") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_lv);
+    if( log2str(tspt_recof_f_lv) != "? length (3)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_lr);
+    if( log2str(tspt_recof_f_lr) != "? length (3 .. 5)") { setverdict(fail) } else { setverdict(pass) };
+    log(tspt_recof_f_p);
+    if( log2str(tspt_recof_f_p) != "{ permutation(1.000000, 2.000000, 3.000000), 10.000000 }") { setverdict(fail) } else { setverdict(pass) };
+  }
+
+  testcase tc_recordof_f_v0() runs on MC {
+    log(tspt_recof_f_v0);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {} }
+    var RoRoF vl_wrong_values := { {1.0},{2.0},{1.0,2.0,3.0},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v0,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_f_v1() runs on MC {
+    log(tspt_recof_f_v1);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {1.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{1.0,2.0,3.0},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v1,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v2() runs on MC {
+    log(tspt_recof_f_v2);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {1.0,2.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0,3.0},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v2,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v3() runs on MC {
+    log(tspt_recof_f_v3);
+    var RoF vl_long :={}; //to stress test
+    for( var integer i:=0;i<1000;i:=i+1) { vl_long[i]:= int2float(i) }
+    var RoRoF vl_good_values := { {1.0,2.0,3.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}, vl_long } 
+    f_checkMatchingValues_rof(tspt_recof_f_v3,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v3a() runs on MC {
+    log(tspt_recof_f_v3a);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {1.0,29.9,3.0}, {1.0,-29.9,3.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_v3a,vl_good_values,vl_wrong_values);
+  }
+
+  testcase tc_recordof_f_v3q() runs on MC {
+    log(tspt_recof_f_v3q);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {1.0,29.9,3.0}, {1.0,-29.9,3.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_v3q,vl_good_values,vl_wrong_values);
+  }
+  testcase tc_recordof_f_vl3() runs on MC {
+    log(tspt_recof_f_vl3);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {2.0,2.0,3.0}, {1.0,2.0,4.0}, {2.0,2.0,4.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0}, {1.0,3.0,2.0}, {1.0,2.0,5.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_vl3,vl_good_values,vl_wrong_values);
+  }  
+
+  testcase tc_recordof_f_vl() runs on MC {
+    log(tspt_recof_f_vl);
+    var RoRoF vl_good_values := { {1.0,2.0,3.0}, {2.0,2.0,4.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0},{1.0,2.0,4.0}, {2.0,3.0,4.0},{1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_vl,vl_good_values,vl_wrong_values);
+  }  
+  testcase tc_recordof_f_v10() runs on MC {
+    log(tspt_recof_f_v10);
+    var RoRoF vl_good_values := { {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0} }
+    var RoRoF vl_wrong_values := { {},{2.0},{2.0,1.0},{1.0,2.0},{1.0,2.0,4.0}, {2.0,3.0,4.0},{1.0,3.0,2.0}, {1.0,2.0,4.0},{1.0,2.0,3.0, -4.9},{1.0,2.0,3.0,4.0,1.0000}} 
+    f_checkMatchingValues_rof(tspt_recof_f_v10,vl_good_values,vl_wrong_values);
+  }
+  //TODO: record of charstring, bitstring etc + rec of type
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+   log("***record of tests****");
+  execute(tc_recordof_i_NoModulePar());
+  execute(tc_recordof_i_ModulePar());
+  execute(tc_recordof_i_v0());
+  execute(tc_recordof_i_v1());
+  execute(tc_recordof_i_v2());
+  execute(tc_recordof_i_v3());
+  execute(tc_recordof_i_v3a());
+  execute(tc_recordof_i_v3q());
+  execute(tc_recordof_i_vl3());
+  execute(tc_recordof_i_vl());
+  execute(tc_recordof_i_v10());
+  execute(tc_recordof_i_o());
+  execute(tc_recordof_i_a());
+  execute(tc_recordof_i_q());
+  execute(tc_recordof_i_r());
+  execute(tc_recordof_i_c());
+  execute(tc_recordof_i_lv());
+  execute(tc_recordof_i_lr());
+  execute(tc_recordof_i_p());
+
+  execute(tc_recordof_i_mod4v0());
+  execute(tc_recordof_i_mod4v1());
+  execute(tc_recordof_i_mod4v2());
+  execute(tc_recordof_i_mod4v3());
+  execute(tc_recordof_i_mod4v3a());
+  execute(tc_recordof_i_mod4v3q());
+  execute(tc_recordof_i_mod4vl3());
+  execute(tc_recordof_i_mod4vl());
+  execute(tc_recordof_i_mod4v10());
+  execute(tc_recordof_i_mod4o());
+  execute(tc_recordof_i_mod4a());
+  execute(tc_recordof_i_mod4q());
+  execute(tc_recordof_i_mod4r());
+  //execute(tc_recordof_i_cu_noconfig()); //fails, TR: HS10984
+  //execute(tc_recordof_i_mod4c_undefined()); //fails, TR: HS10984
+  execute(tc_recordof_i_mod4c());
+  execute(tc_recordof_i_mod4cm1());
+  execute(tc_recordof_i_mod4cm2());
+  execute(tc_recordof_i_mod4lv());
+  execute(tc_recordof_i_mod4lr());
+  execute(tc_recordof_i_mod4p());
+  execute(tc_recordof_i_mod4rifp());
+  execute(tc_recordof_i_mod4vlifp());
+
+  execute(tc_recordof_f_ModulePar());
+  execute(tc_recordof_f_v0());
+  execute(tc_recordof_f_v1());
+  execute(tc_recordof_f_v2());
+  execute(tc_recordof_f_v3());
+  execute(tc_recordof_f_v3a());
+  execute(tc_recordof_f_v3q());
+  execute(tc_recordof_f_vl3());
+  execute(tc_recordof_f_vl());
+  execute(tc_recordof_f_v10()); 
+}
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/set_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/set_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..8be17f2a336add4b42c137e90473e074fffeec55
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/set_test.ttcn
@@ -0,0 +1,327 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module set_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+
+modulepar {
+  //set
+  template SET tspt_set_v0;
+  template SET tspt_set_v1:=  { b:=true };
+  template SET tspt_set_v2:=  { b:=true, cs:= "sth" }
+  template SET tspt_set_v3:=  { b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}
+  // these will be overwritten from cfg file:
+  template SET tspt_set_mod4v1 := omit;
+  template SET tspt_set_mod4v2 := omit;
+  template SET tspt_set_mod4v3 := omit;
+  template SET tspt_set_mod4a := omit;
+  template SET tspt_set_mod4q := omit;
+  template SET tspt_set_mod4o := *;
+  template SET tspt_set_mod4c0 := *;
+  template SET tspt_set_mod4c1 := *;
+  template SET tspt_set_mod4c2 := *;
+  template SET tspt_set_mod4c3 := *;
+}
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+testcase tc_set_ModulePar() runs on MC {
+  //values:
+  log(tspt_set_v0);   
+  if(log2str(tspt_set_v0) != "<uninitialized template>") {setverdict(fail) } else {setverdict(pass)}
+  log(tspt_set_v1);
+  if(log2str(tspt_set_v1) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> }") {setverdict(fail) } else {setverdict(pass)}
+  log(tspt_set_v2);
+  if(log2str(tspt_set_v2) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  log(tspt_set_v3);
+  if(log2str(tspt_set_v3) != "{ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  //jokers
+  if(log2str(tspt_set_mod4v1) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> }") {setverdict(fail) } else {setverdict(pass)}
+  if(log2str(tspt_set_mod4v2) != "{ b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  if(log2str(tspt_set_mod4v3) != "{ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }") {setverdict(fail) } else {setverdict(pass)}
+  if(log2str(tspt_set_mod4a) != "*") {setverdict(fail) } else {setverdict(pass)};
+  if(log2str(tspt_set_mod4q) != "?") {setverdict(fail) } else {setverdict(pass)};
+  if(log2str(tspt_set_mod4o) != "omit") {setverdict(fail) } else {setverdict(pass)};
+}
+
+testcase tc_set_ModulePar_emb() runs on MC {
+  @try {
+    log(t_rset(tspt_set_v0)); 
+  }
+  @catch( dte_message) {
+    if( match(dte_message, pattern "*Copying an uninitialized/unsupported template*" )) {setverdict(pass)} else {setverdict(fail)};
+  }
+  log(tspt_set_v1);
+  @try {
+    log(t_rset(tspt_set_v1)); 
+  }
+  @catch( dte_message) {
+    if( match(dte_message, pattern "*Copying an uninitialized/unsupported template*" )) {setverdict(pass)} else {setverdict(fail)};
+    log("Hi");
+  }
+  log("Bye");
+  //jokers:
+  log(t_rset(tspt_set_mod4v1));
+  if(log2str(t_rset(tspt_set_mod4v1)) == "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4v2));
+  if(log2str(t_rset(tspt_set_mod4v2)) == "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := \"sth\" } }" ) {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4a));
+  if(log2str(t_rset(tspt_set_mod4a)) == "{ s := * }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4q));
+  if(log2str(t_rset(tspt_set_mod4q)) == "{ s := ? }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4o));
+  if(log2str(t_rset(tspt_set_mod4o)) == "{ s := omit }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4c1));
+  if(log2str(t_rset(tspt_set_mod4c1)) == "{ s := complement({ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }) }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4c2));
+  if(log2str(t_rset(tspt_set_mod4c2)) == "{ s := complement({ b := true, i := 99, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }) ifpresent }") {setverdict(pass)} else {setverdict(fail)};
+  log(t_rset(tspt_set_mod4c3));
+  if(log2str(t_rset(tspt_set_mod4c3)) == "{ s := complement({ b := true, i := 0, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }, { b := true, i := 1, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }, { b := true, i := 2, f := 0.000000, bs := omit, os := ?, hs := ?, cs := \"sth\" }) }") {setverdict(pass)} else {setverdict(fail)};
+}
+
+//rset
+//cfg: tspt_set_mod4v3 := { b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}
+testcase tc_set_mod4v3_emb() runs on MC {
+  log(t_rset(tspt_set_mod4v3));
+  var RoRSET vl_good_values := {
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,  cs:="sth" }},
+    {{ i:=99,   b:=true, f:=0.0, bs:=omit, os:='ABBA'O, hs:='ABC11'H,cs:="sth" }},
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:='EF'O,   hs:='D'H,    cs:="sth" }},
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:='ABBA'O,hs:='A'H, cs:="sth" }}
+  } 
+  var RoRSET vl_wrong_values := { 
+    {omit},
+    {{ b:=true, i:=omit, f:=0.0, bs:=omit, os:='FF'O,  hs:='0'H, cs:="sth" }},
+    {{ b:=true, i:=99,   f:=0.0, bs:=omit, os:=omit,   hs:=omit, cs:="sth" }},
+    {{b:=true, i:=99, f:=0.0, bs:='0110'B, os:='ABBA'O,hs:='A'H, cs:="sth" }}
+    
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4v3),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_set_mod4a_emb() runs on MC {
+  log(t_rset(tspt_set_mod4a));
+  var RoRSET vl_good_values := {
+    {omit},
+    {{ b:=omit, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,cs:="sth" }},
+    {{ i:=99, b:=true, f:=0.0, bs:=omit, os:='ABBA'O,hs:='ABC11'H,cs:="sth" }}
+  } 
+  var RoRSET vl_wrong_values := { } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4a),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_set_mod4q_emb() runs on MC {
+  log(t_rset(tspt_set_mod4q));
+  var RoRSET vl_good_values := {  	  	
+    {{ b:=omit, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,cs:="sth" }},
+    {{ i:=99, b:=true, f:=0.0, bs:=omit, os:='ABBA'O,hs:='ABC11'H,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:=omit,hs:=omit,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:='0110'B, os:='ABBA'O,hs:='A'H,cs:="sth" }}
+  } 
+  var RoRSET vl_wrong_values := {
+    {omit}     
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4q),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_set_mod4o_emb() runs on MC {
+  log(t_rset(tspt_set_mod4o));
+  var RoRSET vl_good_values := { 
+    {omit}   	  	
+  } 
+  var RoRSET vl_wrong_values := {
+    {{ b:=omit, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=omit, f:=omit, bs:=omit, os:=omit,hs:=omit,cs:=omit}},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:='FF'O,hs:='0'H,cs:="sth" }},
+    {{ i:=99, b:=true, f:=0.0, bs:=omit, os:='ABBA'O,hs:='ABC11'H,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:=omit, os:=omit,hs:=omit,cs:="sth" }},
+    {{ b:=true, i:=99, f:=0.0, bs:='0110'B, os:='ABBA'O,hs:='A'H,cs:="sth" }}  
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4o),vl_good_values,vl_wrong_values);
+}
+// Note: this tests legacy behavior and requires the -M compiler option!
+//tspt_set_mod4c1 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99})
+testcase tc_set_mod4c1_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c1));
+  var RoRSET vl_good_values := {
+    {{ b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}}       
+  }
+  var RoRSET vl_wrong_values := {
+    {omit},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}}   
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c1),vl_good_values,vl_wrong_values);
+}
+
+//tspt_set_mod4c2 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}) ifpresent
+testcase tc_set_mod4c2_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c2));
+  var RoRSET vl_good_values := {
+    { s:= omit },
+    { s:= { b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}}
+  } 
+  var RoRSET vl_wrong_values := {
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}}   
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c2),vl_good_values,vl_wrong_values);
+}
+//complement(omit)
+testcase tc_set_mod4c0_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c0));
+  var RoRSET vl_good_values := { 	  	
+    {{ b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}}        
+  } 
+  var RoRSET vl_wrong_values := {
+    { omit }
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c0),vl_good_values,vl_wrong_values);
+}
+//tspt_set_mod4c3 := 
+//complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=0},
+//{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=1},{ b:=true,i:=2, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?})
+
+testcase tc_set_mod4c3_emb() runs on MC {
+  log(t_rset(tspt_set_mod4c3));
+  var RoRSET vl_good_values := { 	  	
+    {{ b:=false, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=98}},
+    {{ b:=true, cs:= "noth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.1, bs:=omit, os:='00'O,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=omit,hs:='F'H,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=99}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=100}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:=omit,i:=100}}, 
+    {{ b:=false, cs:= "no", f:=1.0, bs:='01'B, os:=omit,hs:=omit,i:=100}}       
+  } 
+  var RoRSET vl_wrong_values := {       
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=0}},
+    {{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:='00'O,hs:='F'H,i:=1}},
+    {{ b:=true,i:=2, cs:= "sth", f:=0.0, bs:=omit, os:='01'O,hs:='A'H}}
+  } 
+  f_checkMatchingValues_rset(t_rset(tspt_set_mod4c3),vl_good_values,vl_wrong_values);
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+  log("***set tests *********");
+  execute(tc_set_ModulePar());
+  execute(tc_set_ModulePar_emb());
+  execute(tc_set_mod4v3_emb());
+  execute(tc_set_mod4a_emb());
+  execute(tc_set_mod4q_emb());
+  execute(tc_set_mod4o_emb());
+  execute(tc_set_mod4c1_emb());
+  execute(tc_set_mod4c2_emb());
+  execute(tc_set_mod4c0_emb());
+  execute(tc_set_mod4c3_emb()); 
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/setof_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/setof_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..1e71400e24afb8c0fb8659f1fbda93dca3c1988f
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/setof_test.ttcn
@@ -0,0 +1,314 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module setof_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //set of
+  template SoCS tspt_setof_mod4v1 := omit;
+  template SoCS tspt_setof_mod4v2 := omit;
+  template SoCS tspt_setof_mod4v3 := omit;
+  template SoCS tspt_setof_mod4a := omit;
+  template SoCS tspt_setof_mod4q := omit;
+  template SoCS tspt_setof_mod4o := *;
+  template SoCS tspt_setof_mod4c0 := *;
+  template SoCS tspt_setof_mod4c1 := *;
+  template SoCS tspt_setof_mod4c2 := *;
+  template SoCS tspt_setof_mod4c3 := *;
+  template SoCS tspt_setof_mod4vl := *;
+  
+  template SoCS tspt_setof_mod4v1ifp := omit;
+  template SoCS tspt_setof_mod4v2ifp := omit;
+  template SoCS tspt_setof_mod4v3ifp := omit;
+  template SoCS tspt_setof_mod4aifp := omit;
+  template SoCS tspt_setof_mod4qifp := omit;
+  template SoCS tspt_setof_mod4oifp := *;
+  template SoCS tspt_setof_mod4c0ifp := *;
+  template SoCS tspt_setof_mod4c1ifp := *;
+  template SoCS tspt_setof_mod4c2ifp := *;
+  template SoCS tspt_setof_mod4c3ifp := *;
+  template SoCS tspt_setof_mod4vlifp := *;
+  template SoCS tspt_setof_mod4superset := *;
+  template SoCS tspt_setof_mod4supersetifp := *;
+  template SoCS tspt_setof_mod4supersetl3 := *;
+  template SoCS tspt_setof_mod4supersetl1_3 := *;
+  template SoCS tspt_setof_mod4supersetl3ifp := *;
+  template SoCS tspt_setof_mod4subset := *;
+  template SoCS tspt_setof_mod4subsetifp := *;
+}
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+testcase tc_setof_ModulePar() runs on MC {
+  log(log2str(tspt_setof_mod4v1));
+  if( log2str(tspt_setof_mod4v1) == "{ \"a\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v2));
+  if( log2str(tspt_setof_mod4v2) == "{ \"a\", \"b\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v3));
+  if( log2str(tspt_setof_mod4v3) == "{ \"a\", \"b\", \"c\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4a));
+  if( log2str(tspt_setof_mod4a) == "*") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4q));
+  if( log2str(tspt_setof_mod4q) == "?") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4o));
+  if( log2str(tspt_setof_mod4o) == "omit") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c0));
+  if( log2str(tspt_setof_mod4c0) == "{ complement(omit) }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c1));
+  if( log2str(tspt_setof_mod4c1) == "{ complement(\"a\"), \"b\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c2));
+  if( log2str(tspt_setof_mod4c2) == "{ complement(\"a\", \"b\"), \"c\" }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c3));
+  if( log2str(tspt_setof_mod4c3) == "complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" })") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4vl));
+  if( log2str(tspt_setof_mod4vl) == "{ (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") }") { setverdict(pass)} else { setverdict(fail) };
+  log(log2str(tspt_setof_mod4superset));
+  if( log2str(tspt_setof_mod4superset) == "superset(\"a\", \"b\")") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetl3));
+  if( log2str(tspt_setof_mod4supersetl3) == "superset(\"a\", \"b\") length (3)") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetl1_3));
+  if( log2str(tspt_setof_mod4supersetl1_3) == "superset(\"a\", \"b\") length (1 .. 3)") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4subset));
+  if( log2str(tspt_setof_mod4subset) == "subset(\"a\", \"b\")") { setverdict(pass)} else { setverdict(fail) }
+  
+  log(log2str(tspt_setof_mod4v1ifp));
+  if( log2str(tspt_setof_mod4v1ifp) == "{ \"a\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v2ifp));
+  if( log2str(tspt_setof_mod4v2ifp) == "{ \"a\", \"b\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4v3ifp));
+  if( log2str(tspt_setof_mod4v3ifp) == "{ \"a\", \"b\", \"c\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4aifp));
+  if( log2str(tspt_setof_mod4aifp) == "* ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4qifp));
+  if( log2str(tspt_setof_mod4qifp) == "? ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4oifp));
+  if( log2str(tspt_setof_mod4oifp) == "omit ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c0ifp));
+  if( log2str(tspt_setof_mod4c0ifp) == "{ complement(omit) } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c1ifp));
+  if( log2str(tspt_setof_mod4c1ifp) == "{ complement(\"a\"), \"b\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c2ifp));
+  if( log2str(tspt_setof_mod4c2ifp) == "{ complement(\"a\", \"b\"), \"c\" } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4c3ifp));
+  if( log2str(tspt_setof_mod4c3ifp) == "complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" }) ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4vlifp));
+  if( log2str(tspt_setof_mod4vlifp) == "{ (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") } ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetifp));
+  if( log2str(tspt_setof_mod4supersetifp) == "superset(\"a\", \"b\") ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4supersetl3ifp));
+  if( log2str(tspt_setof_mod4supersetl3ifp) == "superset(\"a\", \"b\") length (3) ifpresent") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(tspt_setof_mod4subsetifp));
+  if( log2str(tspt_setof_mod4subsetifp) == "subset(\"a\", \"b\") ifpresent") { setverdict(pass)} else { setverdict(fail) }
+}
+
+testcase tc_setof_ModulePar_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4v1)));
+  if( log2str(t_rsocs(tspt_setof_mod4v1)) == "{ s := { \"a\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v2)));
+  if( log2str(t_rsocs(tspt_setof_mod4v2)) == "{ s := { \"a\", \"b\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v3)));
+  if( log2str(t_rsocs(tspt_setof_mod4v3)) == "{ s := { \"a\", \"b\", \"c\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4a)));
+  if( log2str(t_rsocs(tspt_setof_mod4a)) == "{ s := * }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4q)));
+  if( log2str(t_rsocs(tspt_setof_mod4q)) == "{ s := ? }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4o)));
+  if( log2str(t_rsocs(tspt_setof_mod4o)) == "{ s := omit }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c0)));
+  if( log2str(t_rsocs(tspt_setof_mod4c0)) == "{ s := { complement(omit) } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c1)));
+  if( log2str(t_rsocs(tspt_setof_mod4c1)) == "{ s := { complement(\"a\"), \"b\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c2)));
+  if( log2str(t_rsocs(tspt_setof_mod4c2)) == "{ s := { complement(\"a\", \"b\"), \"c\" } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c3)));
+  if( log2str(t_rsocs(tspt_setof_mod4c3)) == "{ s := complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" }) }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4vl)));
+  if( log2str(t_rsocs(tspt_setof_mod4vl)) == "{ s := { (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") } }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4superset)));
+  if( log2str(t_rsocs(tspt_setof_mod4superset)) == "{ s := superset(\"a\", \"b\") }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl3)));
+  if( log2str(t_rsocs(tspt_setof_mod4supersetl3)) == "{ s := superset(\"a\", \"b\") length (3) }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4subset)));
+  if( log2str(t_rsocs(tspt_setof_mod4subset)) == "{ s := subset(\"a\", \"b\") }") { setverdict(pass)} else { setverdict(fail) }
+  
+  
+  log(log2str(t_rsocs(tspt_setof_mod4v1ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4v1ifp)) == "{ s := { \"a\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v2ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4v2ifp)) == "{ s := { \"a\", \"b\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4v3ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4v3ifp)) == "{ s := { \"a\", \"b\", \"c\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4aifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4aifp)) == "{ s := * ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4qifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4qifp)) == "{ s := ? ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4oifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4oifp)) == "{ s := omit ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c0ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c0ifp)) == "{ s := { complement(omit) } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c1ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c1ifp)) == "{ s := { complement(\"a\"), \"b\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c2ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c2ifp)) == "{ s := { complement(\"a\", \"b\"), \"c\" } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4c3ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4c3ifp)) == "{ s := complement({ \"a\" }, { \"a\", \"b\" }, { \"c\" }) ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4vlifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4vlifp)) == "{ s := { (\"a\", \"b\"), (\"cica\", \"macska\", \"cat\") } ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4supersetifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4supersetifp)) == "{ s := superset(\"a\", \"b\") ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl3ifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4supersetl3ifp)) == "{ s := superset(\"a\", \"b\") length (3) ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  log(log2str(t_rsocs(tspt_setof_mod4subsetifp)));
+  if( log2str(t_rsocs(tspt_setof_mod4subsetifp)) == "{ s := subset(\"a\", \"b\") ifpresent }") { setverdict(pass)} else { setverdict(fail) }
+  
+}
+
+testcase tc_setof_mod4vlifp_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4vlifp)));
+  var RoRSoCS  vl_good_values := {{s:=omit}, {s:={"a","cica"} }}
+  var RoRSoCS vl_wrong_values := { {{"c","cica"}}  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4vlifp),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4superset_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4superset)));
+  var RoRSoCS  vl_good_values := { {s:={"a","cica","b"} }, {s:={"a","b"} } ,  {s:={"a","b","a", "d", "anything"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}, {{"a","c","anyth"}} }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4superset),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4supersetl3_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl3)));
+  var RoRSoCS  vl_good_values := { {s:={"a","cica","b"} },  {s:={"a","b","a"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}, {s:={"a","b","c","dada"} }  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4supersetl3),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4supersetl1_3_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4supersetl1_3)));
+  var RoRSoCS  vl_good_values := { {s:={"a","cica","b"} },  {s:={"a","b","a"} }, {s:={"a","b"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}, {s:={"a","b","c","dada"} } }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4supersetl1_3),vl_good_values,vl_wrong_values);
+}
+
+
+testcase tc_setof_mod4supersetifp_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4supersetifp)));
+  var RoRSoCS  vl_good_values := {{s:=omit}, {s:={"a","cica","b"} },  {s:={"a","b"} },  {s:={"a","b","b"} } }
+  var RoRSoCS vl_wrong_values := { {{"a","cica"}}  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4supersetifp),vl_good_values,vl_wrong_values);
+}  
+
+testcase tc_setof_mod4subset_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4subset)));
+  var RoRSoCS  vl_good_values := { {s:={}}, {s:={"a"}}, {s:={"b"}}, {s:={"a","b"} } }
+  var RoRSoCS vl_wrong_values := { {{"b","cica"}}  }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4subset),vl_good_values,vl_wrong_values);
+}
+
+testcase tc_setof_mod4subsetifp_emb() runs on MC {
+  log(log2str(t_rsocs(tspt_setof_mod4subsetifp)));
+  var RoRSoCS  vl_good_values := {{s:=omit}, {s:={}},{s:={"a"}}, {s:={"b"}}, {s:={"a","b"}} }
+  var RoRSoCS vl_wrong_values := { {{"a","cica"}},   {{"a","cica","b"}} }
+  f_checkMatchingValues_rsocs(t_rsocs(tspt_setof_mod4subsetifp),vl_good_values,vl_wrong_values);
+}  
+//TODO: matching tests
+
+//=========================================================================
+// Control
+//=========================================================================
+
+control {
+ log("***set of tests ******");
+  execute(tc_setof_ModulePar());
+  execute(tc_setof_ModulePar_emb());
+  execute(tc_setof_mod4vlifp_emb());
+  execute(tc_setof_mod4superset_emb());
+  execute(tc_setof_mod4supersetl3_emb());
+  execute(tc_setof_mod4supersetl1_3_emb());
+  execute(tc_setof_mod4supersetifp_emb());
+  execute(tc_setof_mod4subset_emb());
+  execute(tc_setof_mod4subsetifp_emb());
+}
+
+}  // end of module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/text2ttcn_1.cfg b/Regression_Test_java/src/text2ttcn_nolegacy/text2ttcn_1.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..15057a9e852977d7430b027665a5f837ae5595c1
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/text2ttcn_1.cfg
@@ -0,0 +1,508 @@
+###############################################################################
+# Copyright (c) 2000-2019 Ericsson Telecom AB
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+#
+# Contributors:
+#   Balasko, Jeno
+#   Baranyi, Botond
+#
+###############################################################################
+#Nolegacy
+#  Verdict Statistics: 0 none (0 %), 564 pass (100 %), 0 inconc (0 %), 0 fail (0 %), 0 error (0 %)
+[LOGGING]
+SourceInfoFormat := Stack
+
+[MODULE_PARAMETERS]
+
+#boolean
+tspt_b_a1 := true
+tspt_b_a2 := false
+tspt_b_a3 := omit
+tspt_b_a4 := *
+tspt_b_a5 := ?
+tspt_b_a6 := true ifpresent
+tspt_b_a7 := false ifpresent
+tspt_b_a8 := * ifpresent
+tspt_b_a9 := ? ifpresent
+tspt_b_a10 := (true,false)
+tspt_b_a11 := complement(true)
+
+#tspt_b_err := xy //error
+#tspt_b_err := "apple"
+#tspt_b_err := 'apple2'
+#tspt_b_err := 12
+
+#Type: integer
+tspt_i1 := 9
+tspt_i2 := omit
+tspt_i3 := *
+tspt_i4 := ? 
+tspt_i5 := (0,1,-1)
+tspt_i6 := 9 ifpresent
+tspt_i7 := omit ifpresent 
+tspt_i8 := * ifpresent
+tspt_i9 := ? ifpresent
+tspt_i10 := (0,1,-1) ifpresent
+tspt_i11 := complement(9)
+#value list:
+#tspt_i_vl := (0,1,-1)
+
+#Tpe:float
+tspt_f1 := 9.00
+tspt_f2 := omit
+tspt_f3 := *
+tspt_f4 := ?
+tspt_f_mod4vl1 := (0.0)
+tspt_f_mod4vl3 := (0.0, 1.2, -1.9)
+tspt_f6 := 9.00 ifpresent
+tspt_f7 := omit ifpresent
+tspt_f8 := * ifpresent
+tspt_f9 := ? ifpresent
+tspt_f10 := (0.0, 1.2, -1.9) ifpresent
+tspt_f11 := complement(9.000)
+tspt_f12 := complement(9.000) ifpresent
+tspt_f13 := (-1.9..3.1) 
+tspt_f14 := (-1.9..3.1) ifpresent
+#Type: bitstring
+
+tspt_bs_mod4v := '01101'B;
+ tspt_bs_mod4o := omit;
+ tspt_bs_mod4a := *;
+ tspt_bs_mod4q := ?;
+ tspt_bs_mod4al1 := * length(2); //length restriction
+ tspt_bs_mod4al2 := * length(2..4);
+ tspt_bs_mod4ql1 := ? length(2);
+ tspt_bs_mod4ql2 := ? length(2..4);
+ //tspt_bs_mod4vl1 := ('01101'B);  //TODO for Adam: in line xx, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_bs_mod4vl2 := ('01101'B,'1010'B); 
+ tspt_bs_mod4vl3 := ('01101'B,'1010'B,'101'B);
+ tspt_bs_mod4c1 := complement('01101'B)
+ tspt_bs_mod4c2 := complement('01101'B,'1010'B);
+ tspt_bs_mod4c3 := complement('01101'B,'1010'B,'101'B);
+ //tspt_bs_mod4r1 := ("A".."B"); //range not allowed
+ //tspt_bs_mod4r2 := ("a".."c"); //range not allowed
+ tspt_bs_mod4pa := '000*111'B
+ tspt_bs_mod4pq := '000?111'B
+
+ tspt_bs_mod4vifp := '01101'B ifpresent;
+ tspt_bs_mod4oifp := omit ifpresent;
+ tspt_bs_mod4aifp := * ifpresent;
+ tspt_bs_mod4qifp := ? ifpresent;
+ tspt_bs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_bs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_bs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_bs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_bs_mod4vl1ifp := ('01101'B) ifpresent; //TODO for Adam: in line yy, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_bs_mod4vl2ifp := ('01101'B,'1010'B) ifpresent;
+ tspt_bs_mod4vl3ifp := ('01101'B,'1010'B,'101'B) ifpresent;
+ tspt_bs_mod4c1ifp := complement('01101'B) ifpresent
+ tspt_bs_mod4c2ifp := complement('01101'B,'1010'B) ifpresent;
+ tspt_bs_mod4c3ifp := complement('01101'B,'1010'B,'101'B) ifpresent;
+ //tspt_bs_mod4r1ifp := ('A'B .. 'B'B) ifpresent; //range not allowed
+ //tspt_bs_mod4r2ifp := ('a'B ..'c'B) ifpresent;//range not allowed
+ tspt_bs_mod4paifp := '000*111'B  ifpresent
+ tspt_bs_mod4pqifp := '000?111'B  ifpresent
+ 
+
+#Type: octetstring
+ tspt_os_mod4v := 'ABBA'O;
+ tspt_os_mod4o := omit;
+ tspt_os_mod4a := *;
+ tspt_os_mod4q := ?;
+ tspt_os_mod4al1 := * length(2); //length restriction
+ tspt_os_mod4al2 := * length(2..4);
+ tspt_os_mod4ql1 := ? length(2);
+ tspt_os_mod4ql2 := ? length(2..4);
+ //tspt_os_mod4vl1 := ('ABBA'O);  //TODO for Adam: in line xx, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_os_mod4vl2 := ('ABBA'O,'baba'O); 
+ tspt_os_mod4vl3 := ('ABBA'O,'baba'O,'B120'O);
+ tspt_os_mod4c1 := complement('ABBA'O)
+ tspt_os_mod4c2 := complement('ABBA'O,'baba'O);
+ tspt_os_mod4c3 := complement('ABBA'O,'baba'O,'B120'O);
+ //tspt_os_mod4r1 := ("A".."B"); //range not allowed
+ //tspt_os_mod4r2 := ("a".."c"); //range not allowed
+ tspt_os_mod4pa := 'abcd*1234'O
+ tspt_os_mod4pq := 'abcd?1234'O
+
+ tspt_os_mod4vifp := 'ABBA'O ifpresent;
+ tspt_os_mod4oifp := omit ifpresent;
+ tspt_os_mod4aifp := * ifpresent;
+ tspt_os_mod4qifp := ? ifpresent;
+ tspt_os_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_os_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_os_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_os_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_os_mod4vl1ifp := ('ABBA'O) ifpresent; //TODO for Adam: in line yy, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_os_mod4vl2ifp := ('ABBA'O,'baba'O) ifpresent;
+ tspt_os_mod4vl3ifp := ('ABBA'O,'baba'O,'B120'O) ifpresent;
+ tspt_os_mod4c1ifp := complement('ABBA'O) ifpresent
+ tspt_os_mod4c2ifp := complement('ABBA'O,'baba'O) ifpresent;
+ tspt_os_mod4c3ifp := complement('ABBA'O,'baba'O,'B120'O) ifpresent;
+ //tspt_os_mod4r1ifp := ('A'O..'B'O) ifpresent; //range not allowed
+ //tspt_os_mod4r2ifp := ('a'O..'c'O) ifpresent;//range not allowed
+ tspt_os_mod4paifp := 'abcd*1234'O  ifpresent
+ tspt_os_mod4pqifp := 'abcd?1234'O  ifpresent
+
+#Type: hexstring
+
+ tspt_hs_mod4v := 'ABBA'H;
+ tspt_hs_mod4o := omit;
+ tspt_hs_mod4a := *;
+ tspt_hs_mod4q := ?;
+ tspt_hs_mod4al1 := * length(2); //length restriction
+ tspt_hs_mod4al2 := * length(2..4);
+ tspt_hs_mod4ql1 := ? length(2);
+ tspt_hs_mod4ql2 := ? length(2..4);
+ //tspt_hs_mod4vl1 := ('ABBA'H);  //TODO for Adam: in line xx, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_hs_mod4vl2 := ('ABBA'H,'baba'H); 
+ tspt_hs_mod4vl3 := ('ABBA'H,'baba'H,'B12'H);
+ tspt_hs_mod4c1 := complement('ABBA'H)
+ tspt_hs_mod4c2 := complement('ABBA'H,'baba'H);
+ tspt_hs_mod4c3 := complement('ABBA'H,'baba'H,'B12'H);
+ //tspt_hs_mod4r1 := ("A".."B"); //range not allowed
+ //tspt_hs_mod4r2 := ("a".."c"); //range not allowed
+ tspt_hs_mod4pa := 'abc*123'H
+ tspt_hs_mod4pq := 'abc?123'H
+
+ tspt_hs_mod4vifp := 'ABBA'H ifpresent;
+ tspt_hs_mod4oifp := omit ifpresent;
+ tspt_hs_mod4aifp := * ifpresent;
+ tspt_hs_mod4qifp := ? ifpresent;
+ tspt_hs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_hs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_hs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_hs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_hs_mod4vl1ifp := ('ABBA'H) ifpresent; //TODO for Adam: in line yy, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_hs_mod4vl2ifp := ('ABBA'H,'baba'H) ifpresent;
+ tspt_hs_mod4vl3ifp := ('ABBA'H,'baba'H,'B12'H) ifpresent;
+ tspt_hs_mod4c1ifp := complement('ABBA'H) ifpresent
+ tspt_hs_mod4c2ifp := complement('ABBA'H,'baba'H) ifpresent;
+ tspt_hs_mod4c3ifp := complement('ABBA'H,'baba'H,'B12'H) ifpresent;
+ //tspt_hs_mod4r1ifp := ('A'H..'B'H) ifpresent; //range not allowed
+ //tspt_hs_mod4r2ifp := ('a'H..'c'H) ifpresent;//range not allowed
+ tspt_hs_mod4paifp := 'abc*123'H  ifpresent
+ tspt_hs_mod4pqifp := 'abc?123'H  ifpresent
+ 
+#Type: charstring
+ tspt_cs_mod4v := "ABBA";
+ tspt_cs_mod4o := omit;
+ tspt_cs_mod4ol := omit length(2);
+ tspt_cs_mod4a := *;
+ tspt_cs_mod4q := ?;
+ tspt_cs_mod4al1 := * length(2); //length restriction
+ tspt_cs_mod4al2 := * length(2..4);
+ tspt_cs_mod4ql1 := ? length(2);
+ tspt_cs_mod4ql2 := ? length(2..4);
+ //tspt_cs_mod4vl1 := ("ABBA");  //TODO for Adam: in line 67, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_cs_mod4vl2 := ("ABBA","baba"); 
+ tspt_cs_mod4vl3 := ("ABBA","baba","Bye");
+ tspt_cs_mod4c1 := complement("ABBA")
+ tspt_cs_mod4c2 := complement("ABBA","baba");
+ tspt_cs_mod4c3 := complement("ABBA","baba","Bye");
+ tspt_cs_mod4r1 := ("A".."B"); //range
+ tspt_cs_mod4r2 := ("a".."c");
+ tspt_cs_mod4pa := pattern "abc*xyz"
+ tspt_cs_mod4pq := pattern "abc?xyz"
+
+ tspt_cs_mod4vifp := "ABBA" ifpresent;
+ tspt_cs_mod4oifp := omit ifpresent;
+ tspt_cs_mod4aifp := * ifpresent;
+ tspt_cs_mod4qifp := ? ifpresent;
+ tspt_cs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_cs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_cs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_cs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_cs_mod4vl1ifp := ("ABBA") ifpresent; //TODO for Adam: in line 86, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_cs_mod4vl2ifp := ("ABBA","baba") ifpresent;
+ tspt_cs_mod4vl3ifp := ("ABBA","baba","Bye") ifpresent;
+ tspt_cs_mod4c1ifp := complement("ABBA") ifpresent
+ tspt_cs_mod4c2ifp := complement("ABBA","baba") ifpresent;
+ tspt_cs_mod4c3ifp := complement("ABBA","baba","Bye") ifpresent;
+ tspt_cs_mod4r1ifp := ("A".."B") ifpresent; //range
+ tspt_cs_mod4r2ifp := ("a".."c") ifpresent;
+ tspt_cs_mod4paifp := pattern "abc*xyz"  ifpresent
+ tspt_cs_mod4pqifp := pattern "abc?xyz"  ifpresent  
+ 
+#type: universal charstring
+ tspt_ucs_mod4v := "ABBA";
+ tspt_ucs_mod4o := omit;
+ tspt_ucs_mod4ol := omit length(2);
+ tspt_ucs_mod4a := *;
+ tspt_ucs_mod4q := ?;
+ tspt_ucs_mod4al1 := * length(2); //length restriction
+ tspt_ucs_mod4al2 := * length(2..4);
+ tspt_ucs_mod4ql1 := ? length(2);
+ tspt_ucs_mod4ql2 := ? length(2..4);
+ //tspt_ucs_mod4vl1 := ("ABBA");  //TODO for Adam: in line 67, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_ucs_mod4vl2 := ("Ádám","Éva"); 
+ tspt_ucs_mod4vl3 := ("ABBA","baba","Bye");
+ tspt_ucs_mod4c1 := complement("ABBA")
+ tspt_ucs_mod4c2 := complement("ABBA","baba");
+ tspt_ucs_mod4c3 := complement("ABBA","baba","Bye");
+ tspt_ucs_mod4r1 := ("A".."B"); //range
+ tspt_ucs_mod4r2 := ("a".."c");
+ tspt_ucs_mod4pa := pattern "abc*xyz"
+ tspt_ucs_mod4pq := pattern "abc?xyz"
+
+ tspt_ucs_mod4vifp := "ABBA" ifpresent;
+ tspt_ucs_mod4oifp := omit ifpresent;
+ tspt_ucs_mod4aifp := * ifpresent;
+ tspt_ucs_mod4qifp := ? ifpresent;
+ tspt_ucs_mod4al1ifp := * length(2) ifpresent; //length restriction
+ tspt_ucs_mod4al2ifp := * length(2..4) ifpresent;
+ tspt_ucs_mod4ql1ifp := ? length(2) ifpresent;
+ tspt_ucs_mod4ql2ifp := ? length(2..4) ifpresent;
+ //tspt_ucs_mod4vl1ifp := ("ABBA") ifpresent; //TODO for Adam: in line 86, at or before token `)': syntax error, unexpected ')', expecting ','
+ tspt_ucs_mod4vl2ifp := ("ABBA","baba") ifpresent;
+ tspt_ucs_mod4vl3ifp := ("ABBA","baba","Bye") ifpresent;
+ tspt_ucs_mod4c1ifp := complement("ABBA") ifpresent
+ tspt_ucs_mod4c2ifp := complement("ABBA","baba") ifpresent;
+ tspt_ucs_mod4c3ifp := complement("ABBA","baba","Bye") ifpresent;
+ tspt_ucs_mod4r1ifp := ("A".."B") ifpresent; //range
+ tspt_ucs_mod4r2ifp := ("a".."c") ifpresent;
+ tspt_ucs_mod4paifp := pattern "abc*xyz"  ifpresent
+ tspt_ucs_mod4pqifp := pattern "abc?xyz"  ifpresent  
+ 
+
+############### Type:REC ####################################
+tspt_rec_mod4empty := {}
+tspt_rec_mod4v := {1,1.0,"ABBA",'0100'B}
+tspt_rec_mod4a := *;
+tspt_rec_mod4q := ?;
+tspt_rec_mod4o := omit;
+tspt_rec_mod4vr := { (1..2), ?, "ABBA", '0100'B } //not final value!
+tspt_rec_mod4vl2x2 := { 1, 1.0, ("ABBA","baba"),('0100'B,'01001'B) }
+tspt_rec_mod4omitx4 := { omit, omit, omit, omit }
+tspt_rec_mod4r := ({1,1.0,"ABBA",'0100'B}, {2,2.0,"baba",'01001'B})
+tspt_rec_mod4vr := {1,1.0,("ABBA","baba"),'0100'B}
+tspt_rec_mod4c := complement( {1,1.0,("ABBA","baba"),'0100'B} )
+tspt_rec_mod4vl := { 1, -,("ABBA","baba"), -}
+tspt_rec_mod4vq := { ?, -,-, '0100'B}
+
+tspt_rec_mod4cspattern := { *, -,pattern "abc*xyz", '0100'B}
+
+tspt_rec_mod4cspatternbs := { cs := pattern "abc*xyz"}
+tspt_rec_mod4cspatternbs := { bs := '0100'B}
+
+tspt_rec_mod4cspatternbs2 := { i := -, f := -, cs := pattern "abc*xyz", bs:= '0100'B }
+
+tspt_mod4pattern_mixed_order := {  f := -, cs := pattern "abc*xyz", bs:= '0100'B, i := - }
+//== ifpresent
+tspt_rec_mod4emptyifp := {} ifpresent
+tspt_rrec_mod4emptyifp := { rec:= {} ifpresent }
+tspt_rec_mod4vifp := {1 ifpresent,1.0 ifpresent,"ABBA" ifpresent,'0100'B ifpresent}
+tspt_rec_mod4aifp := * ifpresent; //???? TR ???
+tspt_rec_mod4qifp := ? ifpresent; //???? TR ???
+tspt_rec_mod4oifp := omit ifpresent; //???? TR ???
+tspt_rec_mod4vrifp := { (1..2) ifpresent, ? ifpresent, "ABBA" ifpresent, '0100'B ifpresent }
+tspt_rec_mod4vl2x2ifp := { 1 ifpresent, 1.0 ifpresent, ("ABBA" ifpresent,"baba" ifpresent),('0100'B,'01001'B) ifpresent }
+tspt_rec_mod4omitx4ifp := { omit, omit, omit, omit } ifpresent
+tspt_rec_mod4rifp := ({1 ifpresent,1.0 ifpresent,"ABBA" ifpresent,'0100'B ifpresent}, {2,2.0,"baba",'01001'B})
+tspt_rec_mod4cifp := complement( {1 ifpresent,1.0 ifpresent,("ABBA","baba") ifpresent,'0100'B ifpresent} )
+tspt_rec_mod4vlifp := { 1 ifpresent, -,("ABBA","baba") ifpresent, -}
+tspt_rec_mod4vqifp := { ?, -,-, '0100'B ifpresent}
+
+tspt_rec_mod4cspatternifp := { * ifpresent, -,pattern "abc*xyz" ifpresent, '0100'B ifpresent}
+
+tspt_rec_mod4cspatternbsifp := { cs := pattern "abc*xyz" ifpresent}
+tspt_rec_mod4cspatternbsifp := { bs := '0100'B ifpresent}
+
+tspt_rec_mod4cspatternbs2ifp := { i := -, f := -, cs := pattern "abc*xyz" ifpresent, bs:= '0100'B ifpresent}
+
+tspt_mod4pattern_mixed_orderifp := {  f := -, cs := pattern "abc*xyz" ifpresent, bs:= '0100'B ifpresent, i := - }
+//==
+#Type: REC2
+tspt_REC2_2 := {-,-}
+tspt_REC2_3 := { *, -, 2 ifpresent }
+tspt_REC2_4 := { b:=?,  cs:=-} //ugly spacing:)
+tspt_REC2_5 := { b:=?, cs:= ? length(1), i := * }
+
+#Type: record of
+tspt_recof_i_mod4v0 := {};
+tspt_recof_i_mod4v1 := {1};
+tspt_recof_i_mod4v2 := {1,2};
+tspt_recof_i_mod4v3 := {1,2,3};
+tspt_recof_i_mod4v3a := {1,*,3};
+tspt_recof_i_mod4v3q := {1,?,3};
+tspt_recof_i_mod4vl3 := {(1,2),2,(3,4)}; //value list
+tspt_recof_i_mod4vl  :=  ( {1,2,3}, {2,2,4} )
+tspt_recof_i_mod4v10 := {1,2,3,4,5,6,7,8,9,10};
+tspt_recof_i_mod4o := omit;
+tspt_recof_i_mod4a := *;
+tspt_recof_i_mod4q := ?;
+tspt_recof_i_mod4r := {1,(1..3)}; //range
+//tspt_recof_i_mod4cu :=  { 1, complement(1,2,3) } //3->2 elements --undefined behavior, result: { permutation(1, complement(1, 2, 3) }
+tspt_recof_i_mod4cu :=  { 1, complement(1,2,3),3,4 } //3->2 elements --undefined behavior, result: { permutation(1, complement(1, 2, 3) }
+tspt_recof_i_mod4c :=   { 1, complement(1,2,3),1,1 } //3->4 elements
+tspt_recof_i_mod4cm1 := { 1, complement(1,2,3),1} //3->3 elements
+tspt_recof_i_mod4cm2 := { 1, complement(1,2,3),1,1,1} //3->5 elements
+tspt_recof_i_mod4lv := ? length(3)
+tspt_recof_i_mod4lr := ? length(3..5)  //length range
+tspt_recof_i_mod4p := { permutation( 1, 2, 3), 10 }
+tspt_recof_i_mod4rifp := {1,(1..3)} ifpresent
+tspt_recof_i_mod4vlifp  :=  ( {1,2,3}, {2,2,4} ) ifpresent
+
+#type: array
+tspt_array_i3_mod4a := *
+tspt_array_i3_mod4q := ?
+tspt_array_i3_mod4o := omit  
+tspt_array_i3_mod4v0 := {-,-,-}
+tspt_array_i3_mod4v1:= {1,-,-}
+tspt_array_i3_mod4v2:= {1,2,-}
+tspt_array_i3_mod4v3v := {0, 1, 2}
+//tspt_array_i3_mod4v4 := {0, 1, 2, 3} 
+tspt_array_i3_mod4v3a := {0, *, 2}
+tspt_array_i3_mod4v3q := {?, 1, 2}
+//tspt_array_i3_mod4v3o := {omit, 1, 2} //error
+tspt_array_i3_mod4v3vl := {0, 1, (1,2)} //value list
+tspt_array_i3_mod4vl := ( {0,1,2},{9,10,11})
+tspt_array_i3_mod4v3r := {0, 1, (1..3)} //range
+tspt_array_i3_mod4v3mix := {(0,1), 1, (1..3)}
+tspt_array_i3_mod4v3c := {(0,1), 1, complement(2,3)}
+tspt_array_i3_mod4field1 := {0, -, -}
+
+tspt_array_i3_mod4aifp  := * ifpresent
+tspt_array_i3_mod4qifp  := ? ifpresent
+tspt_array_i3_mod4v0ifp := omit  ifpresent   //not error ?
+tspt_array_i3_mod4v1ifp := {1} ifpresent   //not error
+tspt_array_i3_mod4v2ifp := {1,2} ifpresent //noterror
+tspt_array_i3_mod4v3vifp := {0, 1, 2} ifpresent
+//tspt_array_i3_mod4v4 := {0, 1, 2, 3} ifpresent
+tspt_array_i3_mod4v3aifp := {0, *, 2} ifpresent
+tspt_array_i3_mod4v3qifp := {?, 1, 2} ifpresent
+//tspt_array_i3_mod4v3o := {omit, 1, 2} //error
+tspt_array_i3_mod4v3vlifp := {0, 1, (1,2)} ifpresent //value list
+tspt_array_i3_mod4vlifp := ( {0,1,2},{9,10,11}) ifpresent
+tspt_array_i3_mod4v3rifp := {0, 1, (1..3)} ifpresent //range
+tspt_array_i3_mod4v3mixifp := {(0,1), 1, (1..3)} ifpresent 
+tspt_array_i3_mod4v3cifp := {(0,1), 1, complement(2,3)} ifpresent 
+tspt_array_i3_mod4field1ifp := {0, -, -} ifpresent
+
+//=== SET===
+tspt_set_mod4v1 :=  { b:=true };
+tspt_set_mod4v2 := { b:=true, cs:= "sth" };
+tspt_set_mod4v3 := { b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}
+tspt_set_mod4a  := *;
+tspt_set_mod4q  := ?;
+tspt_set_mod4o  := omit;
+tspt_set_mod4c1 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99})
+tspt_set_mod4c2 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=99}) ifpresent
+tspt_set_mod4c0 := complement(omit)
+tspt_set_mod4c3 := complement({ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=0},{ b:=true, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?,i:=1},{ b:=true,i:=2, cs:= "sth", f:=0.0, bs:=omit, os:=?,hs:=?})
+
+tspt_setof_mod4v1 := { "a" }
+tspt_setof_mod4v2 := { "a", "b"}
+tspt_setof_mod4v3 := { "a","b","c"}
+tspt_setof_mod4a := *
+tspt_setof_mod4q := ?;
+tspt_setof_mod4o := omit;
+tspt_setof_mod4c0 := {complement(omit)};
+tspt_setof_mod4c1 := {complement("a"),"b"};
+tspt_setof_mod4c2 := {complement("a","b"),"c"};
+tspt_setof_mod4c3 := complement({"a"}, {"a","b"},{"c"});
+tspt_setof_mod4vl := { ("a","b"),("cica","macska","cat") }
+tspt_setof_mod4superset := superset ("a", "b")
+tspt_setof_mod4subset := subset ("a", "b")
+tspt_setof_mod4supersetl3 := superset ("a", "b") length(3)
+tspt_setof_mod4supersetl1_3 := superset ("a", "b") length(1..3)
+
+tspt_setof_mod4v1ifp := { "a" } ifpresent
+tspt_setof_mod4v2ifp := { "a", "b"} ifpresent
+tspt_setof_mod4v3ifp := { "a","b","c"} ifpresent
+tspt_setof_mod4aifp := * ifpresent
+tspt_setof_mod4qifp := ? ifpresent
+tspt_setof_mod4oifp := omit ifpresent
+tspt_setof_mod4c0ifp := {complement(omit)} ifpresent
+tspt_setof_mod4c1ifp := {complement("a"),"b"} ifpresent
+tspt_setof_mod4c2ifp := {complement("a","b"),"c"} ifpresent
+tspt_setof_mod4c3ifp := complement({"a"}, {"a","b"},{"c"}) ifpresent
+tspt_setof_mod4vlifp := { ("a","b"),("cica","macska","cat") } ifpresent
+tspt_setof_mod4supersetifp := superset ("a", "b") ifpresent
+tspt_setof_mod4supersetl3ifp := superset ("a", "b") length(3) ifpresent
+tspt_setof_mod4subsetifp := subset ("a", "b") ifpresent
+//enum
+tspt_enum_mod4v := first
+tspt_enum_mod4a := *
+tspt_enum_mod4q := ?
+tspt_enum_mod4o := omit
+tspt_enum_mod4c0:= ?  #illegal: complement(omit);
+tspt_enum_mod4c1:=complement(first);
+tspt_enum_mod4c2:=complement(first,second);
+tspt_enum_mod4vl1 := first
+tspt_enum_mod4vl2 := (first, second )
+
+tspt_enum_mod4vifp := first ifpresent
+tspt_enum_mod4aifp := * ifpresent
+tspt_enum_mod4qifp := ? ifpresent
+tspt_enum_mod4oifp := omit ifpresent
+tspt_enum_mod4c0ifp := complement(omit) ifpresent
+tspt_enum_mod4c1ifp := complement(first) ifpresent
+tspt_enum_mod4c2ifp := complement(first,second) ifpresent
+tspt_enum_mod4vl1ifp := first ifpresent
+tspt_enum_mod4vl2ifp := (first, second ) ifpresent
+
+//union
+tspt_union_mod4v_b := { b := true }
+tspt_union_mod4v_i := { i := 1 }
+tspt_union_mod4v_f := { f := 1.0 }
+tspt_union_mod4v_bs := { bs := '01101'B }
+tspt_union_mod4v_os := { os := 'ABBA'O }
+tspt_union_mod4v_hs := { hs := 'ABBA'H }
+tspt_union_mod4v_cs := { cs := "ABBA" }
+tspt_union_mod4v_r := { r := { 1, 1.0, "ABBA",'0100'B } }
+tspt_union_mod4v_roi := { roi := { 1 } }
+tspt_union_mod4v_s_uninit := { s := { b := true } }
+tspt_union_mod4v_s := { s:= { b:=true, i:=1,f:=1.0,bs:='01101'B, os:='ABBA'O, hs:='ABBA'H, cs:="ABBA" } }
+tspt_union_mod4v_socs := { socs := { "ABBA"} }
+tspt_union_mod4v_e := { e := first }
+tspt_union_mod4v_u := { u := { i := 1 } }
+
+tspt_union_mod4a := *
+tspt_union_mod4q := ?
+tspt_union_mod4o := omit
+
+tspt_union_mod4v_bifp := { b := true } ifpresent
+
+tspt_union_mod4v_bifp := { b := true } ifpresent
+tspt_union_mod4v_iifp := { i := 1 } ifpresent
+tspt_union_mod4v_fifp := { f := 1.0 } ifpresent
+tspt_union_mod4v_bsifp := { bs := '01101'B } ifpresent
+tspt_union_mod4v_osifp := { os := 'ABBA'O } ifpresent
+tspt_union_mod4v_hsifp := { hs := 'ABBA'H } ifpresent
+tspt_union_mod4v_csifp := { cs := "ABBA" } ifpresent
+tspt_union_mod4v_rifp := { r := { 1, 1.0, "ABBA",'0100'B } }  ifpresent
+tspt_union_mod4v_roiifp := { roi := { 1 } } ifpresent
+tspt_union_mod4v_s_uninitifp := { s := { b := true } } ifpresent
+tspt_union_mod4v_sifp := { s:= { b:=true, i:=1,f:=1.0,bs:='01101'B, os:='ABBA'O, hs:='ABBA'H, cs:="ABBA" } }  ifpresent
+tspt_union_mod4v_socsifp := { socs := { "ABBA"} } ifpresent
+tspt_union_mod4v_eifp := { e := first } ifpresent
+tspt_union_mod4v_uifp := { u := { i := 1 } } ifpresent
+
+tspt_union_mod4aifp := * ifpresent
+tspt_union_mod4qifp := ? ifpresent
+tspt_union_mod4oifp := omit ifpresent
+[EXECUTE]
+array_test.control
+boolean_test.control
+integer_test.control
+float_test.control
+bitstring_test.control
+octetstring_test.control
+hexstring_test.control
+charstring_test.control
+record_test.control
+recordof_test.control
+set_test.control
+setof_test.control
+enum_test.control
+ucharstring_test.control
+union_test.control
+objid_test.control
+
+
+#To debug the faulty testcases:
+#record_test.tc_REC_string2ttcn_empty
+record_test.tc_RREC_string2ttcn_oifp #TODO: wrong error message
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/text2ttcn_2.cfg b/Regression_Test_java/src/text2ttcn_nolegacy/text2ttcn_2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..46e4425d4b660f1d95b387da185020555a772327
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/text2ttcn_2.cfg
@@ -0,0 +1,4 @@
+[ORDERED_INCLUDE]
+"../text2ttcn_1.cfg"
+[EXECUTE]
+component_test.control
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/types2.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/types2.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..e30ebda334ca1c573650676a2d3d73090fa89fd1
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/types2.ttcn
@@ -0,0 +1,254 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module types2 {
+
+type component MC {}
+
+
+
+group g_boolean {
+  type record of boolean RoB;
+}//g_boolean
+
+group g_integer {
+
+  type record of integer RoI;
+  type integer int_1_3 (1..3)
+
+} //g_integer
+
+group g_float{
+  type record of float RoF
+
+} //g_float
+
+group g_bitstring {
+  type bitstring BitStrings1 ('0'B, '1'B );
+  type bitstring BitStrings2 ('00'B, '01'B, '10'B, '11'B);
+  type bitstring BitStrings_1_2 (BitStrings1, BitStrings2);
+
+  type record of hexstring RoBS;  
+  //wrapper to test charstring in record:
+  type record RBS {
+    bitstring bs optional
+  }
+
+  type record of RBS RoRBS;
+
+  template RBS t_rbs(template bitstring pl_bs) := { bs:=pl_bs }
+
+}//g_bitstring
+
+group g_octetstring {
+  type record of octetstring RoOS;  
+  //wrapper to test charstring in record:
+  type record ROS {
+    octetstring os optional
+  }
+
+  type record of ROS RoROS;
+
+  template ROS t_ros(template octetstring pl_os) := { os:=pl_os }
+
+}//g_octetstring
+
+group g_hexstring {
+  type record of hexstring RoHS;  
+  //wrapper to test charstring in record:
+  type record RHS {
+    hexstring hs optional
+  }
+
+  type record of RHS RoRHS;
+
+  template RHS t_rhs(template hexstring pl_hs) := { hs:=pl_hs }
+
+}//g_hexstring
+
+group g_charstring {
+
+  type record of charstring RoCS;  
+  //wrapper to test charstring in record:
+  type record RCS {
+    charstring cs optional
+  }
+
+  type record of RCS RoRCS;
+
+  template RCS t_rcs(template charstring pl_cs) := { cs:=pl_cs }
+
+}//g_charstring
+
+group g_universal_charstring {
+
+  type record of universal charstring RoUCS;  
+  //wrapper to test charstring in record:
+  type record RUCS {
+    universal charstring ucs optional
+  }
+
+  type record of RUCS RoRUCS;
+
+  template RUCS t_rucs(template universal charstring pl_ucs) := { ucs:=pl_ucs }
+
+}//g_charstring
+
+group g_record {
+
+  //REC
+  type record REC {
+    integer    i optional,
+    float      f optional,
+    charstring cs optional,
+    bitstring  bs optional
+  }
+  type record of REC RoREC;
+
+  type record RREC { REC rec optional };
+  
+  template RoREC t_rorec(template REC pl_rec) := { pl_rec }
+  template RREC t_rrec( template REC pl_rec) := { rec := pl_rec }
+  //REC2
+  type record REC2 {
+    boolean b optional,
+    charstring cs optional,
+    int_1_3    i optional
+  }
+  type record of REC2 RoREC2;
+
+  //record of boolean, octetstring, hexstring:
+  type record REC_BOH {
+    boolean     b optional,
+    octetstring o optional,
+    hexstring   h optional
+  }
+
+  type record REC_BAI3 {
+    boolean     b optional,
+    AI3         ai3 optional
+  }
+
+  template REC t_rec(template integer pl_i, template float pl_f, template charstring pl_cs, template bitstring pl_bs) := {
+    i:= pl_i,
+    f:= pl_f,
+    cs:=pl_cs,
+    bs:=pl_bs
+  }
+
+  
+}//g_record
+
+group g_recordof {
+  // see earlier: type record of integer RoI
+  type record of RoI RoRoI;
+  type record of RoB RoRoB;
+  //type record of float RoF;
+  type record of RoF RoRoF;
+
+}//g_recordof
+
+group g_array {
+  //array of boolean;
+  //array of integers;
+  type integer AI3[3];
+  type integer AI2x3[2][3];
+
+  type record of AI3 RoAI3;
+  type record of AI2x3 RoAI2x3;
+
+  type record RAI3 {
+    AI3 ai3 optional
+  }
+
+  type record of RAI3 RoRAI3;
+  template RAI3 t_rai3(template AI3 pl_ai3) := { ai3 := pl_ai3 };
+
+  //array of floats
+  //array of bitstrings
+  //array of octetstrings
+  //array of hexstrings
+  //array of charstrings
+  //array of records
+  //arrays of sets
+  //arrays of set of
+  //array of enum
+  //array of union
+  //array of anytype
+  //array of user type
+
+  //see also REC_BAI3
+}//g_array
+
+
+group g_set {
+
+  type set SET {
+    boolean    b  optional,
+    integer    i  optional,
+    float      f  optional,
+    bitstring  bs optional,
+    octetstring os optional,
+    hexstring  hs optional,
+    charstring cs optional    
+  }
+  type record of SET RoSET;
+  //template RoSET t_roset(template SET pl_set) := { pl_set };
+
+  type record RSET { SET s optional }
+  template RSET t_rset(template SET pl_set) := {s:= pl_set };
+  type record of RSET RoRSET;
+
+}//g_set
+
+group g_setof {
+  type set of charstring SoCS;
+  type record of SoCS RoSoCS;
+  type record RSoCS { SoCS s optional }
+  template RSoCS t_rsocs(template SoCS pl_s) := { s := pl_s } 
+  type record of RSoCS RoRSoCS
+
+}//g_setof
+
+group g_enumerated {
+  type enumerated MyEnum { first, second, third }
+
+  type record REnum { MyEnum e optional }
+  template REnum t_renum(template MyEnum pl_e) := { e := pl_e }
+}//g_enumerated
+
+group g_union {
+  type union U {
+    boolean    b,
+    integer    i,
+    float      f,
+    bitstring  bs,
+    octetstring os,
+    hexstring  hs,
+    charstring cs,
+    REC        r,
+    RoI        roi,
+    SET        s,
+    SoCS       socs,
+    MyEnum	   e,
+    U		   u
+  }
+
+  type record RU  { U u optional }
+  template RU t_ru(template U pl_u) := { u := pl_u }
+
+}//g_union
+
+group g_anytype {
+
+}//g_anytype
+
+}//module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/ucharstring_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/ucharstring_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..1dea71f53e9e9b262e7b7dd017083826ab10016f
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/ucharstring_test.ttcn
@@ -0,0 +1,565 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+module ucharstring_test {
+//=========================================================================
+// Import Part
+//=========================================================================
+
+import from types2 all;
+//import from functions all;
+
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar {
+  
+  //modulepar charstrings not modified from cfg file
+  template universal charstring tspt_ucs_v := "ABBA";
+  template universal charstring tspt_ucs_o := omit;
+  template universal charstring tspt_ucs_a := *;
+  template universal charstring tspt_ucs_q := ?;
+  template universal charstring tspt_ucs_al1 := * length(2); //length restriction
+  template universal charstring tspt_ucs_al2 := * length(2..4);
+  template universal charstring tspt_ucs_ql1 := ? length(2);
+  template universal charstring tspt_ucs_ql2 := ? length(2..4);
+  template universal charstring tspt_ucs_vl1 := ("ABBA");
+  template universal charstring tspt_ucs_vl2 := ("ABBA","baba");
+  template universal charstring tspt_ucs_vl3 := ("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_c1 := complement("ABBA")
+  template universal charstring tspt_ucs_c2 := complement("ABBA","baba");
+  template universal charstring tspt_ucs_c3 := complement("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_r1 := ("A".."B"); //range
+  template universal charstring tspt_ucs_r2 := ("a".."c");
+  template universal charstring tspt_ucs_pa := pattern "abc*xyz"
+  template universal charstring tspt_ucs_pq := pattern "abc?xyz"
+  
+  template universal charstring tspt_ucs_vifp := "ABBA" ifpresent;
+  template universal charstring tspt_ucs_oifp := omit ifpresent;
+  template universal charstring tspt_ucs_aifp := * ifpresent;
+  template universal charstring tspt_ucs_qifp := ? ifpresent;
+  template universal charstring tspt_ucs_al1ifp := * length(2) ifpresent; //length restriction
+  template universal charstring tspt_ucs_al2ifp := * length(2..4) ifpresent;
+  template universal charstring tspt_ucs_ql1ifp := ? length(2) ifpresent;
+  template universal charstring tspt_ucs_ql2ifp := ? length(2..4) ifpresent;
+  template universal charstring tspt_ucs_vl1ifp := ("ABBA") ifpresent;
+  template universal charstring tspt_ucs_vl2ifp := ("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_c1ifp := complement("ABBA") ifpresent
+  template universal charstring tspt_ucs_c2ifp := complement("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_r1ifp := ("A".."B") ifpresent; //range
+  template universal charstring tspt_ucs_r2ifp := ("a".."c") ifpresent;
+  template universal charstring tspt_ucs_paifp := pattern "abc*xyz"  ifpresent
+  template universal charstring tspt_ucs_pqifp := pattern "abc?xyz"  ifpresent  
+  
+  //modulepar universal charstrings modified from cfg file
+  template universal charstring tspt_ucs_mod4v := * //after mod:"ABBA";
+  template universal charstring tspt_ucs_mod4o := * //omit;
+  template universal charstring tspt_ucs_mod4ol := * //omit;
+  template universal charstring tspt_ucs_mod4a := "A" //*;
+  template universal charstring tspt_ucs_mod4q := "" //?;
+  template universal charstring tspt_ucs_mod4al1 := "A" //* length(2); //length restriction
+  template universal charstring tspt_ucs_mod4al2 := "Original" //mofified for: * length(2..4);
+  template universal charstring tspt_ucs_mod4ql1 := "Original" //mofified for:? length(2);
+  template universal charstring tspt_ucs_mod4ql2 := "Original" //mofified for:? length(2..4);
+  template universal charstring tspt_ucs_mod4vl1 := ("ABBA") //TODO: Adam //It should be mofified for: ("ABBA");
+  template universal charstring tspt_ucs_mod4vl2 := "Original" //mofified for:("ABBA","baba");
+  template universal charstring tspt_ucs_mod4vl3 := "Original" //mofified for:("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_mod4c1 := "Original" //mofified for:complement("ABBA")
+  template universal charstring tspt_ucs_mod4c2 := "Original" //mofified for:complement("ABBA","baba");
+  template universal charstring tspt_ucs_mod4c3 := "Original" //mofified for:complement("ABBA","baba","Bye");
+  template universal charstring tspt_ucs_mod4r1 := "Original" //mofified for:("A".."B"); //range
+  template universal charstring tspt_ucs_mod4r2 := "Original" //mofified for:("a".."c");
+  template universal charstring tspt_ucs_mod4pa := "Original" //mofified for:pattern "abc*xyz"
+  template universal charstring tspt_ucs_mod4pq := "Original" //mofified for:pattern "abc?xyz"
+  
+  template universal charstring tspt_ucs_mod4vifp := "Original" //mofified for:"ABBA" ifpresent;
+  template universal charstring tspt_ucs_mod4oifp := "Original" //mofified for:omit ifpresent;
+  template universal charstring tspt_ucs_mod4aifp := "Original" //mofified for:* ifpresent;
+  template universal charstring tspt_ucs_mod4qifp := "Original" //mofified for:? ifpresent;
+  template universal charstring tspt_ucs_mod4al1ifp := "Original" //mofified for:* length(2) ifpresent; //length restriction
+  template universal charstring tspt_ucs_mod4al2ifp := "Original" //mofified for:* length(2..4) ifpresent;
+  template universal charstring tspt_ucs_mod4ql1ifp := "Original" //mofified for:? length(2) ifpresent;
+  template universal charstring tspt_ucs_mod4ql2ifp := "Original" //mofified for:? length(2..4) ifpresent;
+  template universal charstring tspt_ucs_mod4vl1ifp :=  ("ABBA") ifpresent //TODO: Adam //It should be mofified for: ("ABBA");
+  template universal charstring tspt_ucs_mod4vl2ifp := "Original" //mofified for:("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_mod4vl3ifp := "Original" //mofified for:("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_mod4c1ifp := "Original" //mofified for:complement("ABBA") ifpresent
+  template universal charstring tspt_ucs_mod4c2ifp := "Original" //mofified for:complement("ABBA","baba") ifpresent;
+  template universal charstring tspt_ucs_mod4c3ifp := "Original" //mofified for:complement("ABBA","baba","Bye") ifpresent;
+  template universal charstring tspt_ucs_mod4r1ifp := "Original" //mofified for:("A".."B") ifpresent; //range
+  template universal charstring tspt_ucs_mod4r2ifp := "Original" //mofified for:("a".."c") ifpresent;
+  template universal charstring tspt_ucs_mod4paifp := "Original" //mofified for:pattern "abc*xyz"  ifpresent
+  template universal charstring tspt_ucs_mod4pqifp := "Original" //mofified for:pattern "abc?xyz"  ifpresent  
+  
+}
+
+//=========================================================================
+// Templates
+//=========================================================================
+// not modulepars
+template universal charstring t_ucs_v := "ABBA";
+template universal charstring t_ucs_o := omit;
+template universal charstring t_ucs_a := *;
+template universal charstring t_ucs_q := ?;
+template universal charstring t_ucs_al1 := * length(2); //length restriction
+template universal charstring t_ucs_al2 := * length(2..4);
+template universal charstring t_ucs_ql1 := ? length(2);
+template universal charstring t_ucs_ql2 := ? length(2..4);
+template universal charstring t_ucs_vl1 := ("ABBA");
+template universal charstring t_ucs_vl2 := ("ABBA","baba");
+template universal charstring t_ucs_vl3 := ("ABBA","baba","Bye");
+template universal charstring t_ucs_c1 := complement("ABBA")
+template universal charstring t_ucs_c2 := complement("ABBA","baba");
+template universal charstring t_ucs_c3 := complement("ABBA","baba","Bye");
+template universal charstring t_ucs_r1 := ("A".."B"); //range
+template universal charstring t_ucs_r2 := ("a".."c");
+template universal charstring t_ucs_pa := pattern "abc*xyz"
+template universal charstring t_ucs_pq := pattern "abc?xyz"
+
+template universal charstring t_ucs_vifp := "ABBA" ifpresent;
+template universal charstring t_ucs_oifp := omit ifpresent;
+template universal charstring t_ucs_aifp := * ifpresent;
+template universal charstring t_ucs_qifp := ? ifpresent;
+template universal charstring t_ucs_al1ifp := * length(2) ifpresent; //length restriction
+template universal charstring t_ucs_al2ifp := * length(2..4) ifpresent;
+template universal charstring t_ucs_ql1ifp := ? length(2) ifpresent;
+template universal charstring t_ucs_ql2ifp := ? length(2..4) ifpresent;
+template universal charstring t_ucs_vl1ifp := ("ABBA") ifpresent;
+template universal charstring t_ucs_vl2ifp := ("ABBA","baba") ifpresent;
+template universal charstring t_ucs_vl3ifp := ("ABBA","baba","Bye") ifpresent;
+template universal charstring t_ucs_c1ifp := complement("ABBA") ifpresent
+template universal charstring t_ucs_c2ifp := complement("ABBA","baba") ifpresent;
+template universal charstring t_ucs_c3ifp := complement("ABBA","baba","Bye") ifpresent;
+template universal charstring t_ucs_r1ifp := ("A".."B") ifpresent; //range
+template universal charstring t_ucs_r2ifp := ("a".."c") ifpresent;
+template universal charstring t_ucs_paifp := pattern "abc*xyz"  ifpresent
+template universal charstring t_ucs_pqifp := pattern "abc?xyz"  ifpresent
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+function f_string2ttcn_rucs_t(in charstring pl_cs, in template RUCS pl_expected_result) {
+  var template RUCS vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("string2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log(pl_expected_result);
+  log(vl_result);
+  if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+function f_string2ttcn_rucs_t_str(in charstring pl_cs, in charstring pl_expected_result) {
+  var template RUCS vl_result;
+  @try {
+    string2ttcn(pl_cs,vl_result);
+    setverdict(pass) 
+  }
+  @catch(err_str) {
+    log("str2ttcn() failed: ",err_str);
+    setverdict(fail);
+  }
+  log("Expected result: ", pl_expected_result);
+  log("Result: ", vl_result);
+  if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+}
+
+//template string -> variable conversion
+//expected result: error
+function f_string2ttcn_rucs_v(in charstring pl_cs, in template RUCS pl_expected_result, in boolean pl_ok_expected) {
+  var RUCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("string2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( log2str(pl_expected_result) == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("string2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ",pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//this function is the same but uses
+function f_string2ttcn_rucs_v_str(in charstring pl_cs, charstring pl_expected_result, in boolean pl_ok_expected) {
+  var RUCS vl_result;
+  if( pl_ok_expected ) {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(pass);
+    }
+    @catch(err_str) {
+      log("str2ttcn() failed: ",err_str);
+      setverdict(fail);
+    }
+    if( pl_expected_result == log2str(vl_result) ) { setverdict(pass) } else { setverdict(fail) }
+  } 
+  else 
+  {
+    @try {
+      string2ttcn(pl_cs, vl_result);
+      setverdict(fail);
+    }
+    @catch(err_str) {
+      log("str2ttcn() conversion error: ",err_str);
+      setverdict(pass,"Expected error, ok");
+    }
+    
+  }
+  log("Expected result: ", pl_expected_result );
+  log("Result: ", vl_result);
+}
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+testcase tc_ucs_ttcn2string_emb() runs on MC {
+  log(t_rucs(tspt_ucs_mod4v));
+  log(ttcn2string(t_rucs(tspt_ucs_mod4v)));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4v)) != "{ ucs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4o));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4o)) != "{ ucs := omit }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4a));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4a)) != "{ ucs := * }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4q));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4q)) != "{ ucs := ? }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al1)) != "{ ucs := * length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al2)) != "{ ucs := * length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql1)) != "{ ucs := ? length (2) }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql2)) != "{ ucs := ? length (2 .. 4) }") {setverdict(fail)} else {setverdict(pass)};
+  log(">",t_rucs(tspt_ucs_mod4vl1),"<");
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl1)) != "{ ucs := \"ABBA\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl2)) != "{ ucs := (char(0, 0, 0, 193) & \"d\" & char(0, 0, 0, 225) & \"m\", char(0, 0, 0, 201) & \"va\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl3));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl3)) != "{ ucs := (\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c1)) != "{ ucs := complement(\"ABBA\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c2)) != "{ ucs := complement(\"ABBA\", \"baba\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c3));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c3)) != "{ ucs := complement(\"ABBA\", \"baba\", \"Bye\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r1));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r1)) != "{ ucs := (\"A\" .. \"B\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r2));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r2)) != "{ ucs := (\"a\" .. \"c\") }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4pa));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4pa)) != "{ ucs := pattern \"abc*xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4pq));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4pq)) != "{ ucs := pattern \"abc?xyz\" }") {setverdict(fail)} else {setverdict(pass)};
+  //==
+  log(t_rucs(tspt_ucs_mod4vifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vifp)) != "{ ucs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4oifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4oifp)) != "{ ucs := omit ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4aifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4aifp)) != "{ ucs := * ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4qifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4qifp)) != "{ ucs := ? ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al1ifp)) != "{ ucs := * length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4al2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4al2ifp)) != "{ ucs := * length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql1ifp)) != "{ ucs := ? length (2) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4ql2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4ql2ifp)) != "{ ucs := ? length (2 .. 4) ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl1ifp)) != "{ ucs := \"ABBA\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl2ifp)) != "{ ucs := (\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4vl3ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4vl3ifp)) != "{ ucs := (\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c1ifp)) != "{ ucs := complement(\"ABBA\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c2ifp)) != "{ ucs := complement(\"ABBA\", \"baba\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4c3ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4c3ifp)) != "{ ucs := complement(\"ABBA\", \"baba\", \"Bye\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r1ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r1ifp)) != "{ ucs := (\"A\" .. \"B\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4r2ifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4r2ifp)) != "{ ucs := (\"a\" .. \"c\") ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4paifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4paifp)) != "{ ucs := pattern \"abc*xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+  log(t_rucs(tspt_ucs_mod4pqifp));
+  if(ttcn2string(t_rucs(tspt_ucs_mod4pqifp)) != "{ ucs := pattern \"abc?xyz\" ifpresent }") {setverdict(fail)} else {setverdict(pass)};
+}
+
+//==== string2ttcn testcases ===============================================================
+//These testcases tests if
+// 1. string2ttcn can generate the expected template
+// 2. string2ttcn can generate the expected value, if possible/required (=true the third arg)
+//===========================================================================================
+testcase tc_ucs_string2ttcn_mod4v() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4v)),t_rucs(tspt_ucs_mod4v));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4v)),t_rucs(tspt_ucs_mod4v),true);
+}
+
+testcase tc_ucs_string2ttcn_mod4o() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4o)),t_rucs(tspt_ucs_mod4o));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4o)),t_rucs(tspt_ucs_mod4o),true);
+}
+
+//omit length
+testcase tc_ucs_string2ttcn_mod4ol() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ol)),t_rucs(tspt_ucs_mod4ol));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ol)),t_rucs(tspt_ucs_mod4ol),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4a() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4a)),t_rucs(tspt_ucs_mod4a));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4a)),t_rucs(tspt_ucs_mod4a),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4q() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4q)),t_rucs(tspt_ucs_mod4q));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4q)),t_rucs(tspt_ucs_mod4q),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al1)),t_rucs(tspt_ucs_mod4al1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al1)),t_rucs(tspt_ucs_mod4al1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al2)),t_rucs(tspt_ucs_mod4al2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al2)),t_rucs(tspt_ucs_mod4al2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql1)),t_rucs(tspt_ucs_mod4ql1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql1)),t_rucs(tspt_ucs_mod4ql1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql2)),t_rucs(tspt_ucs_mod4ql2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql2)),t_rucs(tspt_ucs_mod4ql2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl1)),t_rucs(tspt_ucs_mod4vl1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl1)),t_rucs(tspt_ucs_mod4vl1),true);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl2)),t_rucs(tspt_ucs_mod4vl2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl2)),t_rucs(tspt_ucs_mod4vl2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl3() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl3)),t_rucs(tspt_ucs_mod4vl3));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl3)),t_rucs(tspt_ucs_mod4vl3),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c1)),t_rucs(tspt_ucs_mod4c1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c1)),t_rucs(tspt_ucs_mod4c1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c2)),t_rucs(tspt_ucs_mod4c2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c2)),t_rucs(tspt_ucs_mod4c2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c3() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c3)),t_rucs(tspt_ucs_mod4c3));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c3)),t_rucs(tspt_ucs_mod4c3),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r1() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r1)),t_rucs(tspt_ucs_mod4r1));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r1)),t_rucs(tspt_ucs_mod4r1),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r2() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r2)),t_rucs(tspt_ucs_mod4r2));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r2)),t_rucs(tspt_ucs_mod4r2),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4pa() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4pa)),t_rucs(tspt_ucs_mod4pa));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4pa)),t_rucs(tspt_ucs_mod4pa),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4pq() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4pq)),t_rucs(tspt_ucs_mod4pq));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4pq)),t_rucs(tspt_ucs_mod4pq),false);
+}
+
+// ifp
+
+testcase tc_ucs_string2ttcn_mod4vifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vifp)),t_rucs(tspt_ucs_mod4vifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vifp)),t_rucs(tspt_ucs_mod4vifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4oifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4oifp)),t_rucs(tspt_ucs_mod4oifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4oifp)),t_rucs(tspt_ucs_mod4oifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4aifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4aifp)),t_rucs(tspt_ucs_mod4aifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4aifp)),t_rucs(tspt_ucs_mod4aifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4qifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4qifp)),t_rucs(tspt_ucs_mod4qifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4qifp)),t_rucs(tspt_ucs_mod4qifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al1ifp)),t_rucs(tspt_ucs_mod4al1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al1ifp)),t_rucs(tspt_ucs_mod4al1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4al2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4al2ifp)),t_rucs(tspt_ucs_mod4al2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4al2ifp)),t_rucs(tspt_ucs_mod4al2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql1ifp)),t_rucs(tspt_ucs_mod4ql1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql1ifp)),t_rucs(tspt_ucs_mod4ql1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4ql2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4ql2ifp)),t_rucs(tspt_ucs_mod4ql2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4ql2ifp)),t_rucs(tspt_ucs_mod4ql2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl1ifp)),t_rucs(tspt_ucs_mod4vl1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl1ifp)),t_rucs(tspt_ucs_mod4vl1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl2ifp)),t_rucs(tspt_ucs_mod4vl2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl2ifp)),t_rucs(tspt_ucs_mod4vl2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4vl3ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4vl3ifp)),t_rucs(tspt_ucs_mod4vl3ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4vl3ifp)),t_rucs(tspt_ucs_mod4vl3ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c1ifp)),t_rucs(tspt_ucs_mod4c1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c1ifp)),t_rucs(tspt_ucs_mod4c1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c2ifp)),t_rucs(tspt_ucs_mod4c2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c2ifp)),t_rucs(tspt_ucs_mod4c2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4c3ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4c3ifp)),t_rucs(tspt_ucs_mod4c3ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4c3ifp)),t_rucs(tspt_ucs_mod4c3ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r1ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r1ifp)),t_rucs(tspt_ucs_mod4r1ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r1ifp)),t_rucs(tspt_ucs_mod4r1ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4r2ifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4r2ifp)),t_rucs(tspt_ucs_mod4r2ifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4r2ifp)),t_rucs(tspt_ucs_mod4r2ifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4paifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4paifp)),t_rucs(tspt_ucs_mod4paifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4paifp)),t_rucs(tspt_ucs_mod4paifp),false);
+}
+
+testcase tc_ucs_string2ttcn_mod4pqifp() runs on MC {
+  f_string2ttcn_rucs_t(ttcn2string(t_rucs(tspt_ucs_mod4pqifp)),t_rucs(tspt_ucs_mod4pqifp));
+  f_string2ttcn_rucs_v(ttcn2string(t_rucs(tspt_ucs_mod4pqifp)),t_rucs(tspt_ucs_mod4pqifp),false);
+}
+
+control { 
+  
+  log("***universal charstring tests****");
+  //execute(tc_ucs_v());
+   //ttcn2string:
+  execute(tc_ucs_ttcn2string_emb());
+  
+  execute(tc_ucs_string2ttcn_mod4v());
+  execute(tc_ucs_string2ttcn_mod4o());
+  execute(tc_ucs_string2ttcn_mod4ol());
+  execute(tc_ucs_string2ttcn_mod4a());
+  execute(tc_ucs_string2ttcn_mod4q());
+  execute(tc_ucs_string2ttcn_mod4al1());
+  execute(tc_ucs_string2ttcn_mod4al2());
+  execute(tc_ucs_string2ttcn_mod4ql1());
+  execute(tc_ucs_string2ttcn_mod4ql2());
+  execute(tc_ucs_string2ttcn_mod4vl1());
+  execute(tc_ucs_string2ttcn_mod4vl2());
+  execute(tc_ucs_string2ttcn_mod4vl3());
+  execute(tc_ucs_string2ttcn_mod4c1());
+  execute(tc_ucs_string2ttcn_mod4c2());
+  execute(tc_ucs_string2ttcn_mod4c3());
+  execute(tc_ucs_string2ttcn_mod4r1());
+  execute(tc_ucs_string2ttcn_mod4r2());
+  execute(tc_ucs_string2ttcn_mod4pa());
+  execute(tc_ucs_string2ttcn_mod4pq());
+  //ttcn2string with ifpresent
+  execute(tc_ucs_string2ttcn_mod4vifp());
+  execute(tc_ucs_string2ttcn_mod4oifp());
+  execute(tc_ucs_string2ttcn_mod4aifp());
+  execute(tc_ucs_string2ttcn_mod4qifp());
+  execute(tc_ucs_string2ttcn_mod4al1ifp());
+  execute(tc_ucs_string2ttcn_mod4al2ifp());
+  execute(tc_ucs_string2ttcn_mod4ql1ifp());
+  execute(tc_ucs_string2ttcn_mod4ql2ifp());
+  execute(tc_ucs_string2ttcn_mod4vl1ifp());
+  execute(tc_ucs_string2ttcn_mod4vl2ifp());
+  execute(tc_ucs_string2ttcn_mod4vl3ifp());
+  execute(tc_ucs_string2ttcn_mod4c1ifp());
+  execute(tc_ucs_string2ttcn_mod4c2ifp());
+  execute(tc_ucs_string2ttcn_mod4c3ifp());
+  execute(tc_ucs_string2ttcn_mod4r1ifp());
+  execute(tc_ucs_string2ttcn_mod4r2ifp());
+  execute(tc_ucs_string2ttcn_mod4paifp());
+  execute(tc_ucs_string2ttcn_mod4pqifp()); 
+  
+}
+
+} //module
diff --git a/Regression_Test_java/src/text2ttcn_nolegacy/union_test.ttcn b/Regression_Test_java/src/text2ttcn_nolegacy/union_test.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..7ecf189a74aba2cf37a1e29ad80bd8b5c9038586
--- /dev/null
+++ b/Regression_Test_java/src/text2ttcn_nolegacy/union_test.ttcn
@@ -0,0 +1,297 @@
+/******************************************************************************
+ * Copyright (c) 2000-2019 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Balasko, Jeno
+ *
+ ******************************************************************************/
+/*
+//AUTHOR: 
+//DATE: 
+//VERSION: 
+*/
+module union_test
+{
+
+//=========================================================================
+// Import Part
+//=========================================================================
+import from types2 all;
+//import from functions2 all;
+//=========================================================================
+// Module Parameters
+//=========================================================================
+modulepar{
+  template U tspt_union_mod4v_b := { e := first }
+  template U tspt_union_mod4v_i := { e := first }
+  template U tspt_union_mod4v_f := { e := first }
+  template U tspt_union_mod4v_bs := { e := first }
+  template U tspt_union_mod4v_os := { e := first }
+  template U tspt_union_mod4v_hs := { e := first }
+  template U tspt_union_mod4v_cs := { e := first }
+  template U tspt_union_mod4v_r := { e := first }
+  template U tspt_union_mod4v_roi := { e := first }
+  template U tspt_union_mod4v_s := { e := first }
+  template U tspt_union_mod4v_s_uninit := { e := first }
+  template U tspt_union_mod4v_socs := { e := first }
+  template U tspt_union_mod4v_e := { e := first }
+  template U tspt_union_mod4v_u := { e := first }
+  
+  template U tspt_union_mod4a := { e := first }
+  template U tspt_union_mod4q := { e := first }
+  template U tspt_union_mod4o := { e := first }
+  
+  //union ifpresent
+  template U tspt_union_mod4v_bifp := { e := first }  
+  template U tspt_union_mod4v_iifp := { e := first } ifpresent
+  template U tspt_union_mod4v_fifp := { e := first } ifpresent
+  template U tspt_union_mod4v_bsifp := { e := first } ifpresent
+  template U tspt_union_mod4v_osifp := { e := first } ifpresent
+  template U tspt_union_mod4v_hsifp := { e := first } ifpresent
+  template U tspt_union_mod4v_csifp := { e := first } ifpresent
+  template U tspt_union_mod4v_rifp := { e := first } ifpresent
+  template U tspt_union_mod4v_roiifp := { e := first } ifpresent
+  template U tspt_union_mod4v_sifp := { e := first } ifpresent
+  template U tspt_union_mod4v_s_uninitifp := { e := first } 
+  template U tspt_union_mod4v_socsifp := { e := first } ifpresent
+  template U tspt_union_mod4v_eifp := { e := first } ifpresent
+  template U tspt_union_mod4v_uifp := { e := first } ifpresent
+  
+  template U tspt_union_mod4aifp := { e := first } ifpresent
+  template U tspt_union_mod4qifp := { e := first } ifpresent
+  template U tspt_union_mod4oifp := { e := first } ifpresent  
+}
+//=========================================================================
+// Data Types
+//=========================================================================
+
+// Insert data type defintions here if applicable!
+// You can use the data_type skeleton!
+
+//=========================================================================
+// Signatures
+//=========================================================================
+
+// Insert signature definitions here if applicable!
+// You can use the signature skeleton!
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+// Insert port type defintions here if applicable!
+// You can use the port_type skeleton!
+
+//=========================================================================
+//Component Types
+//=========================================================================
+
+// Insert component type defintions here if applicable!
+// You can use the component_type skeleton!
+
+//=========================================================================
+// Constants
+//=========================================================================
+
+// Insert constants here if applicable!
+// You can use the constant skeleton!
+
+//=========================================================================
+// Templates
+//=========================================================================
+
+// Insert templates here if applicable!
+// You can use the template skeleton!
+
+//=========================================================================
+// Altsteps
+//=========================================================================
+
+// Insert altsteps here if applicable!
+// You can use the altstep skeleton!
+
+//=========================================================================
+// Functions
+//=========================================================================
+
+// Insert functions here if applicable!
+// You can use the function skeleton!
+
+//=========================================================================
+// Testcases
+//=========================================================================
+
+
+testcase tc_union_ModulePar() runs on MC {
+  log(log2str(tspt_union_mod4v_b));
+  if(log2str(tspt_union_mod4v_b) == "{ b := true }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_i));
+  if(log2str(tspt_union_mod4v_i) == "{ i := 1 }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_f));
+  if(log2str(tspt_union_mod4v_f) == "{ f := 1.000000 }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_bs));
+  if(log2str(tspt_union_mod4v_bs) == "{ bs := '01101'B }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_os));
+  if(log2str(tspt_union_mod4v_os) == "{ os := 'ABBA'O }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_hs));
+  if(log2str(tspt_union_mod4v_hs) == "{ hs := 'ABBA'H }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_cs));
+  if(log2str(tspt_union_mod4v_cs) == "{ cs := \"ABBA\" }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_r));
+  if(log2str(tspt_union_mod4v_r) == "{ r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_roi));
+  if(log2str(tspt_union_mod4v_roi) == "{ roi := { 1 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_s));
+  if(log2str(tspt_union_mod4v_s) == 
+    "{ s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } }" ) 
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_s_uninit)); 
+  if(log2str(tspt_union_mod4v_s_uninit) == 
+    "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } }")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_socs));
+  if(log2str(tspt_union_mod4v_socs) == "{ socs := { \"ABBA\" } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_e));
+  if(log2str(tspt_union_mod4v_e) == "{ e := first (0) }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_u));
+  if(log2str(tspt_union_mod4v_u) == "{ u := { i := 1 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4a));
+  if(log2str(tspt_union_mod4a) == "*" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4q));
+  if(log2str(tspt_union_mod4q) == "?" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4o));
+  if(log2str(tspt_union_mod4o) == "omit" ) {setverdict(pass)} else {setverdict(fail)}
+  
+  log(log2str(tspt_union_mod4v_bifp));
+  if(log2str(tspt_union_mod4v_bifp) == "{ b := true } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_iifp));
+  if(log2str(tspt_union_mod4v_iifp) == "{ i := 1 } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_fifp));
+  if(log2str(tspt_union_mod4v_fifp) == "{ f := 1.000000 } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_bsifp));
+  if(log2str(tspt_union_mod4v_bsifp) == "{ bs := '01101'B } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_osifp));
+  if(log2str(tspt_union_mod4v_osifp) == "{ os := 'ABBA'O } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_hsifp));
+  if(log2str(tspt_union_mod4v_hsifp) == "{ hs := 'ABBA'H } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_csifp));
+  if(log2str(tspt_union_mod4v_csifp) == "{ cs := \"ABBA\" } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_rifp));
+  if(log2str(tspt_union_mod4v_rifp) == "{ r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_roiifp));
+  if(log2str(tspt_union_mod4v_roiifp) == "{ roi := { 1 } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_sifp));
+  if(log2str(tspt_union_mod4v_sifp) == 
+    "{ s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } } ifpresent" ) 
+  {setverdict(pass)} else {setverdict(fail)}	    
+  log(log2str(tspt_union_mod4v_s_uninitifp));
+  if(log2str(tspt_union_mod4v_s_uninitifp) == 
+    "{ s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } } ifpresent")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_socsifp));
+  if(log2str(tspt_union_mod4v_socsifp) == "{ socs := { \"ABBA\" } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_eifp));
+  if(log2str(tspt_union_mod4v_eifp) == "{ e := first (0) } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4v_uifp));
+  if(log2str(tspt_union_mod4v_uifp) == "{ u := { i := 1 } } ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4aifp));
+  if(log2str(tspt_union_mod4aifp) == "* ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4qifp));
+  if(log2str(tspt_union_mod4qifp) == "? ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(tspt_union_mod4oifp));
+  if(log2str(tspt_union_mod4oifp) == "omit ifpresent" ) {setverdict(pass)} else {setverdict(fail)}
+}
+
+testcase tc_union_ModulePar_emb() runs on MC {
+  log(log2str(t_ru(tspt_union_mod4v_b)));
+  if(log2str(t_ru(tspt_union_mod4v_b)) == "{ u := { b := true } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_i)));
+  if(log2str(t_ru(tspt_union_mod4v_i)) == "{ u := { i := 1 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_f)));
+  if(log2str(t_ru(tspt_union_mod4v_f)) == "{ u := { f := 1.000000 } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_bs)));
+  if(log2str(t_ru(tspt_union_mod4v_bs)) == "{ u := { bs := '01101'B } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_os)));
+  if(log2str(t_ru(tspt_union_mod4v_os)) == "{ u := { os := 'ABBA'O } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_hs)));
+  if(log2str(t_ru(tspt_union_mod4v_hs)) == "{ u := { hs := 'ABBA'H } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_cs)));
+  if(log2str(t_ru(tspt_union_mod4v_cs)) == "{ u := { cs := \"ABBA\" } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_r)));
+  if(log2str(t_ru(tspt_union_mod4v_r)) == "{ u := { r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_roi)));
+  if(log2str(t_ru(tspt_union_mod4v_roi)) == "{ u := { roi := { 1 } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_s)));
+  if(log2str(t_ru(tspt_union_mod4v_s)) == 
+    "{ u := { s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } } }" ) 
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_s_uninit))); 
+  if(log2str(t_ru(tspt_union_mod4v_s_uninit)) == 
+    "{ u := { s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } } }")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_socs)));
+  if(log2str(t_ru(tspt_union_mod4v_socs)) == "{ u := { socs := { \"ABBA\" } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_e)));
+  if(log2str(t_ru(tspt_union_mod4v_e)) == "{ u := { e := first (0) } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_u)));
+  if(log2str(t_ru(tspt_union_mod4v_u)) == "{ u := { u := { i := 1 } } }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4a)));
+  if(log2str(t_ru(tspt_union_mod4a)) == "{ u := * }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4q)));
+  if(log2str(t_ru(tspt_union_mod4q)) == "{ u := ? }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4o)));
+  if(log2str(t_ru(tspt_union_mod4o)) == "{ u := omit }" ) {setverdict(pass)} else {setverdict(fail)}
+  
+  log(log2str(t_ru(tspt_union_mod4v_bifp)));
+  if(log2str(t_ru(tspt_union_mod4v_bifp)) == "{ u := { b := true } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_iifp)));
+  if(log2str(t_ru(tspt_union_mod4v_iifp)) == "{ u := { i := 1 } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_fifp)));
+  if(log2str(t_ru(tspt_union_mod4v_fifp)) == "{ u := { f := 1.000000 } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_bsifp)));
+  if(log2str(t_ru(tspt_union_mod4v_bsifp)) == "{ u := { bs := '01101'B } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_osifp)));
+  if(log2str(t_ru(tspt_union_mod4v_osifp)) == "{ u := { os := 'ABBA'O } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_hsifp)));
+  if(log2str(t_ru(tspt_union_mod4v_hsifp)) == "{ u := { hs := 'ABBA'H } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_csifp)));
+  if(log2str(t_ru(tspt_union_mod4v_csifp)) == "{ u := { cs := \"ABBA\" } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_rifp)));
+  if(log2str(t_ru(tspt_union_mod4v_rifp)) == "{ u := { r := { i := 1, f := 1.000000, cs := \"ABBA\", bs := '0100'B } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_roiifp)));
+  if(log2str(t_ru(tspt_union_mod4v_roiifp)) == "{ u := { roi := { 1 } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_sifp)));
+  if(log2str(t_ru(tspt_union_mod4v_sifp)) == 
+    "{ u := { s := { b := true, i := 1, f := 1.000000, bs := '01101'B, os := 'ABBA'O, hs := 'ABBA'H, cs := \"ABBA\" } } ifpresent }" ) 
+  {setverdict(pass)} else {setverdict(fail)}	    
+  log(log2str(t_ru(tspt_union_mod4v_s_uninitifp)));
+  if(log2str(t_ru(tspt_union_mod4v_s_uninitifp)) == 
+    "{ u := { s := { b := true, i := <uninitialized template>, f := <uninitialized template>, bs := <uninitialized template>, os := <uninitialized template>, hs := <uninitialized template>, cs := <uninitialized template> } } ifpresent }")
+  {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_socsifp)));
+  if(log2str(t_ru(tspt_union_mod4v_socsifp)) == "{ u := { socs := { \"ABBA\" } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_eifp)));
+  if(log2str(t_ru(tspt_union_mod4v_eifp)) == "{ u := { e := first (0) } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4v_uifp)));
+  if(log2str(t_ru(tspt_union_mod4v_uifp)) == "{ u := { u := { i := 1 } } ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4aifp)));
+  if(log2str(t_ru(tspt_union_mod4aifp)) == "{ u := * ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4qifp)));
+  if(log2str(t_ru(tspt_union_mod4qifp)) == "{ u := ? ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+  log(log2str(t_ru(tspt_union_mod4oifp)));
+  if(log2str(t_ru(tspt_union_mod4oifp)) == "{ u := omit ifpresent }" ) {setverdict(pass)} else {setverdict(fail)}
+}
+  //=========================================================================
+  // Control
+  //=========================================================================
+  control {
+    log("***union tests********");
+    execute(tc_union_ModulePar());
+    execute(tc_union_ModulePar_emb());
+  }
+  
+}  // end of module