diff --git a/common/Makefile b/common/Makefile
index 594892ae9650c4875f6713ef686e3d45e6274950..9baaf6c5b70d055d2830faf1f145e2b15d55ac9e 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -35,7 +35,8 @@ GENERATED_SOURCES := pattern_la.cc pattern_p.cc pattern_uni.cc config_preproc_la
 
 # Sources in the CVS
 
-STATIC_SOURCES := memory.c new.cc userinfo.c path.c config_preproc.cc Quadruple.cc Path2.cc ModuleVersion.cc JSON_Tokenizer.cc
+STATIC_SOURCES := memory.c new.cc userinfo.c path.c config_preproc.cc Quadruple.cc \
+		  Path2.cc ModuleVersion.cc JSON_Tokenizer.cc UnicharPattern.cc
 
 ifndef MINGW
 STATIC_SOURCES += NetworkHandler.cc
diff --git a/common/Quadruple.cc b/common/Quadruple.cc
index d3d9dcd4b6d11b758bbd237f8d8b85d2c448d4e0..0a6677a4bacded197a6b67aa7fbfa944dfa38ddf 100644
--- a/common/Quadruple.cc
+++ b/common/Quadruple.cc
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *   Balasko, Jeno
+ *   Baranyi, Botond
  *   Raduly, Csaba
  *   Zalanyi, Balazs Andor
  *
@@ -64,6 +65,13 @@ void Quad::set(unsigned char group, unsigned char plane, unsigned char row,
   u.comp.cell = cell;
 }
 
+void Quad::set_hexrepr(const char* hex_repr) {
+  u.comp.group = ((hex_repr[0] - 'A') << 4) + (hex_repr[1] - 'A');
+  u.comp.plane = ((hex_repr[2] - 'A') << 4) + (hex_repr[3] - 'A');
+  u.comp.row =   ((hex_repr[4] - 'A') << 4) + (hex_repr[5] - 'A');
+  u.comp.cell =  ((hex_repr[6] - 'A') << 4) + (hex_repr[7] - 'A');
+}
+
 const Quad Quad::operator-(const Quad& rhs) const {
   return Quad(u.value - rhs.u.value);
 }
diff --git a/common/Quadruple.hh b/common/Quadruple.hh
index 6b146af45616a526c009c12d8c6ef791432765fb..c4a472470077eadae90cd04ce20f3968918ce4e0 100644
--- a/common/Quadruple.hh
+++ b/common/Quadruple.hh
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *   Balasko, Jeno
+ *   Baranyi, Botond
  *   Raduly, Csaba
  *   Zalanyi, Balazs Andor
  *
@@ -72,6 +73,8 @@ public:
    * @param c Value to set.
    */
   void set(int field, unsigned char c);
+  
+  void set_hexrepr(const char* hex_repr);
 
   const Quad operator-(const Quad& rhs) const;
   const Quad& operator=(const Quad& rhs);
diff --git a/common/UnicharPattern.cc b/common/UnicharPattern.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8ba957e39533c1ddea933692c3f523a9ed888e66
--- /dev/null
+++ b/common/UnicharPattern.cc
@@ -0,0 +1,224 @@
+/******************************************************************************
+ * Copyright (c) 2000-2016 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Baranyi, Botond – initial implementation
+ *
+ ******************************************************************************/
+
+#include "UnicharPattern.hh"
+#include "pattern.hh"
+#include "memory.h"
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+//////////////////////////////////////////////
+//////////// the global instance /////////////
+//////////////////////////////////////////////
+UnicharPattern unichar_pattern;
+
+//////////////////////////////////////////////
+////////////// helper functions //////////////
+//////////////////////////////////////////////
+
+/** removes spaces from the beginning and end of the input string and returns
+  * the result */
+static char* remove_spaces(char* str)
+{
+  if (str == NULL) {
+    return NULL;
+  }
+  size_t len = strlen(str);
+  size_t start = 0;
+  while (isspace(str[start])) {
+    ++start;
+  }
+  size_t end = len - 1;
+  while (isspace(str[end])) {
+    str[end] = '\0';
+    --end;
+  }
+  return str + start;
+}
+
+/** Exception class
+  *
+  * Thrown when one of the characters processed by hexchar_to_char or
+  * hexstr_to_char is not a hexadecimal digit */
+class NotHexException {};
+
+/** converts a character containing a hexadecimal digit to its numeric value */
+static unsigned char hexchar_to_char(const char c)
+{
+  if (c >= '0' && c <= '9') {
+    return c - '0';
+  }
+  else if (c >= 'A' && c <= 'F') {
+    return c + 10 - 'A';
+  }
+  else if (c >= 'a' && c <= 'f') {
+    return c + 10 - 'a';
+  }
+  throw NotHexException();
+}
+
+/** converts a string of two hexadecimal digits to the character the digits
+  * represent */
+static unsigned char hexstr_to_char(const char* hex_str)
+{
+  return (hexchar_to_char(hex_str[0]) << 4) | hexchar_to_char(hex_str[1]);
+}
+
+//////////////////////////////////////////////
+// member functions of class UnicharPattern //
+//////////////////////////////////////////////
+UnicharPattern::UnicharPattern() : mappings_head(NULL)
+{
+  // if anything goes wrong while parsing the case mappings file, just delete the
+  // partial results, display a warning, and treat all patterns as case-sensitive
+  const char* ttcn3_dir = getenv("TTCN3_DIR");
+  if (ttcn3_dir == NULL) {
+    TTCN_pattern_warning("Environment variable TTCN3_DIR not present. "
+      "Case-insensitive universal charstring patterns are disabled.\n");
+    return;
+  }
+  size_t ttcn3_dir_len = strlen(ttcn3_dir);
+  bool ends_with_slash = ttcn3_dir_len > 0 && ttcn3_dir[ttcn3_dir_len - 1] == '/';
+  char* mappings_file = mprintf("%s%setc/CaseFolding.txt", ttcn3_dir,
+    ends_with_slash ? "" : "/");
+  FILE* fp = fopen(mappings_file, "r");
+  if (fp == NULL) {
+    TTCN_pattern_warning("Cannot open file '%s' for reading. "
+      "Case-insensitive universal charstring patterns are disabled.\n", mappings_file);
+    return;
+  }
+  
+  // this always points to the last element of the list
+  mapping_t* mappings_tail = NULL;
+  
+  // read one line at a time
+  char line[1024];
+  while (fgets(line, sizeof(line), fp) != NULL) {
+    // ignore everything after the '#' (this is the 'comment' indicator)
+    char* line_end = strchr(line, '#');
+    if (line_end != NULL) {
+      *line_end = '\0';
+    }
+    // each column ends with a ';', use that as the separator for strtok
+    char* from_str = remove_spaces(strtok(line, ";"));
+    size_t from_str_len = from_str != NULL ? strlen(from_str) : 0;
+    if (from_str_len == 0) {
+      // nothing but comments and spaces in this line
+      continue;
+    }
+    // all character codes are 4 or 5 digits long
+    if (from_str_len < 4 || from_str_len > 5) {
+      TTCN_pattern_warning("Invalid format of case folding file (code column). "
+        "Case-insensitive universal charstring patterns are disabled.\n");
+      clean_up();
+      return;
+    }
+    char* status = remove_spaces(strtok(NULL, ";"));
+    // the status is one character long
+    if (status == NULL || strlen(status) != 1) {
+      TTCN_pattern_warning("Invalid format of case folding file (status column). "
+        "Case-insensitive universal charstring patterns are disabled.\n");
+      clean_up();
+      return;
+    }
+    else if (status[0] != 'C' && status[0] != 'S') {
+      // only use the lines with statuses 'C' and 'S', ignore the rest
+      continue;
+    }
+    char* to_str = remove_spaces(strtok(NULL, ";"));
+    size_t to_str_len = to_str != NULL ? strlen(to_str) : 0;
+    if (to_str_len < 4 || to_str_len > 5) {
+      TTCN_pattern_warning("Invalid format of case folding file (mapping column). "
+        "Case-insensitive universal charstring patterns are disabled.\n");
+      clean_up();
+      return;
+    }
+    
+    // create the new element
+    if (mappings_tail == NULL) {
+      mappings_head = new mapping_t;
+      mappings_tail = mappings_head;
+    }
+    else {
+      mappings_tail->next = new mapping_t;
+      mappings_tail = mappings_tail->next;
+    }
+    mappings_tail->next = NULL;
+    
+    // try to convert the extracted tokens to their character codes
+    try {
+      mappings_tail->from.set(0, from_str_len == 5 ? from_str[0] : 0,
+        hexstr_to_char(from_str + from_str_len - 4),
+        hexstr_to_char(from_str + from_str_len - 2));
+      mappings_tail->to.set(0, to_str_len == 5 ? to_str[0] : 0,
+        hexstr_to_char(to_str + to_str_len - 4),
+        hexstr_to_char(to_str + to_str_len - 2));
+    }
+    catch (NotHexException) {
+      // one of the tokens contained a non-hex character
+      TTCN_pattern_warning("Invalid format of case folding file (character code). "
+        "Case-insensitive universal charstring patterns are disabled.\n");
+      clean_up();
+      return;
+    }
+  }
+}
+
+void UnicharPattern::clean_up()
+{
+  while (mappings_head != NULL) {
+    mapping_t* temp = mappings_head;
+    mappings_head = mappings_head->next;
+    delete temp;
+  }
+}
+
+UnicharPattern::mapping_t* UnicharPattern::find_mapping(const Quad& q) const
+{
+  mapping_t* ptr = mappings_head;
+  while (ptr != NULL) {
+    if (ptr->from == q) {
+      return ptr;
+    }
+    ptr = ptr->next;
+  }
+  return NULL;
+}
+
+Quad UnicharPattern::convert_quad_to_lowercase(const Quad& q) const
+{
+  mapping_t* mapping = find_mapping(q);
+  if (mapping != NULL) {
+    return mapping->to;
+  }
+  return q;
+}
+
+void UnicharPattern::convert_regex_str_to_lowercase(char* str) const
+{
+  if (mappings_head != NULL) {
+    size_t len = strlen(str) / 8;
+    for (size_t i = 0; i < len; ++i) {
+      // the class 'Quad' contains the logic to convert to and from regex strings
+      Quad q;
+      q.set_hexrepr(str + 8 * i);
+      mapping_t* mapping = find_mapping(q);
+      if (mapping != NULL) {
+        // this call actually saves the specified Quad's regex string to the
+        // specified location in the string
+        Quad::get_hexrepr(mapping->to, str + 8 * i);
+      }
+    }
+  }
+}
diff --git a/common/UnicharPattern.hh b/common/UnicharPattern.hh
new file mode 100644
index 0000000000000000000000000000000000000000..aa5f1c5a959266d02f9524a9ce6195034d5e9d6a
--- /dev/null
+++ b/common/UnicharPattern.hh
@@ -0,0 +1,80 @@
+/******************************************************************************
+ * Copyright (c) 2000-2016 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Baranyi, Botond – initial implementation
+ *
+ ******************************************************************************/
+
+#ifndef UNICHARPATTERN_HH
+#define UNICHARPATTERN_HH
+
+#include "Quadruple.hh"
+
+/** Helper class for handling case-insensitive universal charstring patterns
+  * (this includes all patterns used in universal charstring templates and
+  * universal charstring subtypes, and the universal charstring version of
+  * the predefined function 'regexp', as long as they have the '@nocase' modifier)
+  * 
+  * Only one (global) instance of this class is created, which is used to convert
+  * the uppercase letters in patterns and the strings matched by the patterns
+  * to lowercase.
+  *
+  * The instance is initialized with a table at its construction, which contains
+  * the case mappings of Unicode characters (read from the file CaseFolding.txt,
+  * from the official Unicode site).
+  *
+  * This class does simple case foldings (from the folding types described in
+  * CaseFolding.txt), so only the mappings with statuses 'C' and 'S' are used. */
+class UnicharPattern {
+  
+  /** structure containing one character's mapping (linked list) */
+  struct mapping_t {
+    /** character mapped from (uppercase letter) */
+    Quad from;
+    /** character mapped to (lowercase letter) */
+    Quad to;
+    /** pointer to the next element in the list */
+    mapping_t* next;
+  };
+
+  /** pointer to the head of the linked list of mappings */
+  mapping_t* mappings_head;
+  
+  /** deletes the mappings list */
+  void clean_up();
+  
+  /** finds and returns the mapping list element with the 'from' character 
+    * equivalent to the parameter */
+  mapping_t* find_mapping(const Quad& q) const;
+  
+public:
+
+  /** constructor - reads the case mappings from a text file and stores them
+    * in the linked list */
+  UnicharPattern();
+  
+  /** destructor - deletes the list */
+  ~UnicharPattern() { clean_up(); }
+  
+  /** converts the specified character to lowercase (if it's an uppercase letter),
+    * and returns the result */
+  Quad convert_quad_to_lowercase(const Quad& q) const;
+
+  /** goes through the null-terminated regex string parameter and changes each 
+    * uppercase letter to its lowercase equivalent
+    * @param str a universal charstring in regex format (meaning that every universal
+    * character is coded as 8 characters from 'A' to 'P', each representing a
+    * hexadecimal digit in the universal character's code) */
+  void convert_regex_str_to_lowercase(char* str) const;
+};
+
+/** The one instance of the universal charstring pattern helper class. */
+extern UnicharPattern unichar_pattern;
+
+#endif /* UNICHARPATTERN_HH */
+
diff --git a/common/pattern.hh b/common/pattern.hh
index d87ef376e2b96e4728a7ee2564508f4ccfcee13c..ef0bbf8dab203a4fddb90da0d0544d1ee7fe623e 100644
--- a/common/pattern.hh
+++ b/common/pattern.hh
@@ -36,7 +36,7 @@
  *  to true, so no errors are reported for the extended ASCII characters. */
 extern char* TTCN_pattern_to_regexp(const char* p_pattern, bool utf8 = false);
 
-extern char* TTCN_pattern_to_regexp_uni(const char* p_pattern,
+extern char* TTCN_pattern_to_regexp_uni(const char* p_pattern, bool p_nocase,
   int** groups = 0);
 
 /* defined elsewhere (can be different in compiler/runtime) */
diff --git a/common/pattern_uni.y b/common/pattern_uni.y
index e98cc60964a9d47fb78ec7f39d460fb7bbaffb93..e882a1ce775edee120d1e832af60a6fa9a82b3e1 100644
--- a/common/pattern_uni.y
+++ b/common/pattern_uni.y
@@ -45,6 +45,7 @@
 #include "pattern.hh"
 
 #include "Quadruple.hh"
+#include "UnicharPattern.hh"
 
   union YYSTYPE;
 /* defined in lexer c-file: */
@@ -66,6 +67,8 @@
 
   static int user_groups;
 
+  static bool nocase;
+
 #define YYERROR_VERBOSE
 
 static void yyprint(FILE *file, int type, const YYSTYPE& value);
@@ -381,12 +384,13 @@ RE_OneCharPos:
   {
     unsigned char c = $1;
     if ($1 <= 0) TTCN_pattern_error("Character with code %u "
-      "(0x%02x) cannot be used in a pattern for type charstring.", $1, $1);
-    $$ = Quad::get_hexrepr(c);
+      "(0x%02x) cannot be used in a pattern for type universal charstring.", $1, $1);
+    $$ = Quad::get_hexrepr(nocase ? tolower(c) : c);
   }
 | RE_Quadruple
   {
-    $$ = Quad::get_hexrepr($1.value);
+    $$ = Quad::get_hexrepr(nocase ?
+      unichar_pattern.convert_quad_to_lowercase($1.value).get_value() : $1.value);
   }
 | RE_Set
   {
@@ -513,10 +517,11 @@ RE_Set_Range_Char:
 | TOK_Char
   {
     if ($1 <= 0) TTCN_pattern_error("Character with code %u "
-      "(0x%02x) cannot be used in a pattern for type charstring.", $1, $1);
-    $$.value = $1;
+      "(0x%02x) cannot be used in a pattern for type universal charstring.", $1, $1);
+    $$.value = nocase ? tolower($1) : $1;
   }
-| RE_Quadruple { $$.value = $1.value; }
+| RE_Quadruple { $$.value = nocase ?
+    unichar_pattern.convert_quad_to_lowercase($1.value).get_value() : $1.value; }
 ;
 
 RE_Set_NoRange_Char:
@@ -582,13 +587,14 @@ RE_Quadruple:
  * Interface
  *********************************************************************/
 
-char* TTCN_pattern_to_regexp_uni(const char* p_pattern, int** groups)
+char* TTCN_pattern_to_regexp_uni(const char* p_pattern, bool p_nocase, int** groups)
 {
   /* if you want to debug */
   //pattern_unidebug=1;
 
   ret_val=NULL;
   user_groups = 0;
+  nocase = p_nocase;
 
   yy_buffer_state *flex_buffer = pattern_yy_scan_string(p_pattern);
   if(flex_buffer == NULL) {
diff --git a/compiler2/Makefile b/compiler2/Makefile
index a2789d57a5d100302f73a5b7bf6c3402518d95b7..9ee5cd08e9f819676ce0bbf68b8ac375fd6c730f 100644
--- a/compiler2/Makefile
+++ b/compiler2/Makefile
@@ -107,7 +107,7 @@ TCOV2LCOV_OBJECTS := $(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(TCOV2LCOV_SOURCES)
 OBJECTS := $(COMPILER_OBJECTS) $(MFGEN_OBJECTS) $(TCOV2LCOV_OBJECTS)
 
 # Used by both the compiler and makefilegen
-COMMON_OBJECTS := $(addprefix ../common/, memory.o path.o userinfo.o JSON_Tokenizer.o)
+COMMON_OBJECTS := $(addprefix ../common/, memory.o path.o userinfo.o)
 
 TCOV2LCOV_COMMON_OBJECTS := ../common/memory.o
 
@@ -121,7 +121,8 @@ ifdef REGEX_DIR
 endif
 
 COMPILER_COMMON_OBJECTS := $(COMMON_OBJECTS) \
-$(addprefix ../common/, new.o pattern_la.o pattern_p.o pattern_uni.o Quadruple.o ModuleVersion.o)
+$(addprefix ../common/, new.o pattern_la.o pattern_p.o pattern_uni.o Quadruple.o \
+ModuleVersion.o JSON_Tokenizer.o UnicharPattern.o)
 
 ifeq ($(USAGE_STATS), yes)
 COMPILER_COMMON_OBJECTS += ../common/usage_stats.o
diff --git a/compiler2/PredefFunc.cc b/compiler2/PredefFunc.cc
index 2a36c8877af3bc6c47c4acfd0a01ab20aae21442..e91ee3f8b0e7d1396de88a2d98ab93b5f01c6ed6 100644
--- a/compiler2/PredefFunc.cc
+++ b/compiler2/PredefFunc.cc
@@ -28,6 +28,7 @@
 #include <stdint.h>
 #include "../common/memory.h"
 #include "../common/pattern.hh"
+#include "../common/UnicharPattern.hh"
 #include <iostream>
 
 // used by regex
@@ -606,7 +607,7 @@ namespace Common {
   }
 
   string* regexp(const string& instr, const string& expression,
-                 const Int& groupno)
+                 const Int& groupno, bool nocase)
   {
     string *retval=0;
 
@@ -627,7 +628,8 @@ namespace Common {
     }
 
     regex_t posix_regexp;
-    int ret_val=regcomp(&posix_regexp, posix_str, REG_EXTENDED);
+    int ret_val=regcomp(&posix_regexp, posix_str, REG_EXTENDED |
+      (nocase ? REG_ICASE : 0));
     Free(posix_str);
     if(ret_val!=0) {
       /* regexp error */
@@ -671,7 +673,7 @@ namespace Common {
   }
 
   ustring* regexp(const ustring& instr, const ustring& expression,
-    const Int& groupno)
+    const Int& groupno, bool nocase)
   {
     ustring *retval=0;
 
@@ -685,7 +687,7 @@ namespace Common {
     verb_level &= ~(1|2);
     int* user_groups;
     char *posix_str = TTCN_pattern_to_regexp_uni(
-      expression.get_stringRepr_for_pattern().c_str(), &user_groups);
+      expression.get_stringRepr_for_pattern().c_str(), nocase, &user_groups);
     if (user_groups == 0)
       FATAL_ERROR("regexp(): Cannot find any groups in the second argument.");
     verb_level = orig_verb_level;
@@ -718,15 +720,18 @@ namespace Common {
 
     regmatch_t* pmatch = (regmatch_t*)Malloc((nmatch+1)*sizeof(regmatch_t));
     char* tmp = instr.convert_to_regexp_form();
+    
+    if (nocase) {
+      unichar_pattern.convert_regex_str_to_lowercase(tmp);
+    }
+    
     string instr_conv(tmp);
     Free(tmp);
     ret_val = regexec(&posix_regexp, instr_conv.c_str(), nmatch+1, pmatch, 0);
     if(ret_val == 0) {
       if(pmatch[nmatch].rm_so != -1 && pmatch[nmatch].rm_eo != -1) {
-        retval = new ustring(
-          instr_conv.substr(pmatch[nmatch].rm_so,
-            pmatch[nmatch].rm_eo - pmatch[nmatch].rm_so)
-            .convert_stringRepr_for_pattern());
+        retval = new ustring(instr.extract_matched_section(pmatch[nmatch].rm_so,
+          pmatch[nmatch].rm_eo));
       } else { retval = new ustring(); }
     }
     Free(pmatch);
diff --git a/compiler2/PredefFunc.hh b/compiler2/PredefFunc.hh
index 5416cb5b919cb1f74b444c82d61c508a917b54f5..c9d393f7441fb3ed188f790f99e6efcc49d34f02 100644
--- a/compiler2/PredefFunc.hh
+++ b/compiler2/PredefFunc.hh
@@ -62,9 +62,9 @@ namespace Common {
   extern int_val_t* float2int(const Real& value, const Location& loc);
   extern string* float2str(const Real& value);
   extern string* regexp(const string& instr, const string& expression,
-                        const Int& groupno);
+                        const Int& groupno, bool nocase);
   extern ustring* regexp(const ustring& instr, const ustring& expression,
-                        const Int& groupno);
+                        const Int& groupno, bool nocase);
   extern string* remove_bom(const string& encoded_value);
   extern string* get_stringencoding(const string& encoded_value);
   extern ustring decode_utf8(const string & ostr, CharCoding::CharCodingType expected_coding);
diff --git a/compiler2/Value.cc b/compiler2/Value.cc
index 5191ff06d06e52e2bc43e36e153b9d875248cec7..17831849f84c68dd0adc9744aa9c130cd6325602 100644
--- a/compiler2/Value.cc
+++ b/compiler2/Value.cc
@@ -262,6 +262,7 @@ namespace Common {
         u.expr.ti1=p.u.expr.ti1->clone();
         u.expr.t2=p.u.expr.t2->clone();
         u.expr.v3=p.u.expr.v3->clone();
+        u.expr.b4=p.u.expr.b4;
         break;
       case OPTYPE_DECOMP: // v1 v2 v3
         u.expr.v1=p.u.expr.v1->clone();
@@ -1184,8 +1185,9 @@ namespace Common {
     } // switch
   }
 
-  // ti1 t2 v3
-  Value::Value(operationtype_t p_optype, TemplateInstance *p_ti1, TemplateInstance *p_t2, Value *p_v3)
+  // ti1 t2 v3 b4
+  Value::Value(operationtype_t p_optype, TemplateInstance *p_ti1,
+               TemplateInstance *p_t2, Value *p_v3, bool p_b4)
     : GovernedSimple(S_V), valuetype(V_EXPR), my_governor(0)
   {
     u.expr.v_optype=p_optype;
@@ -1195,7 +1197,8 @@ namespace Common {
       if(!p_ti1 || !p_t2 || !p_v3) FATAL_ERROR("Value::Value()");
       u.expr.ti1 = p_ti1;
       u.expr.t2 = p_t2;
-      u.expr.v3=p_v3;
+      u.expr.v3 = p_v3;
+      u.expr.b4 = p_b4;
       break;
     default:
       FATAL_ERROR("Value::Value()");
@@ -8128,14 +8131,14 @@ error:
       if (v1->valuetype == V_CSTR) {
         const string& s1 = v1->get_val_str();
         const string& s2 = v2->get_val_str();
-	string *result = regexp(s1, s2, i3);
+	string *result = regexp(s1, s2, i3, u.expr.b4);
 	clean_up();
 	valuetype = V_CSTR;
 	set_val_str(result);
       } if (v1->valuetype == V_USTR) {
         const ustring& s1 = v1->get_val_ustr();
         const ustring& s2 = v2->get_val_ustr();
-        ustring *result = regexp(s1, s2, i3);
+        ustring *result = regexp(s1, s2, i3, u.expr.b4);
         clean_up();
         valuetype = V_USTR;
         set_val_ustr(result);
@@ -10783,7 +10786,11 @@ error:
         return ret_val;
       }
       case OPTYPE_REGEXP: {
-        string ret_val("regexp(");
+        string ret_val("regexp");
+        if (u.expr.b4) {
+          ret_val += " @nocase ";
+        }
+        ret_val += "(";
         u.expr.ti1->append_stringRepr(ret_val);
         ret_val += ", ";
         u.expr.t2->append_stringRepr(ret_val);
@@ -12545,7 +12552,7 @@ error:
     else u.expr.t2->generate_code(expr);
     expr->expr = mputstr(expr->expr, ", ");
     u.expr.v3->generate_code_expr_mandatory(expr);
-    expr->expr = mputc(expr->expr, ')');
+    expr->expr = mputprintf(expr->expr, ", %s)", u.expr.b4 ? "TRUE" : "FALSE");
   }
 
   void Value::generate_code_expr_replace(expression_struct *expr)
diff --git a/compiler2/Value.hh b/compiler2/Value.hh
index 5ee2d21a307dcf8ae890c5405c3771a13fae591e..79f3d868f0253f595d15f520db224deee6285192 100644
--- a/compiler2/Value.hh
+++ b/compiler2/Value.hh
@@ -213,7 +213,7 @@ namespace Common {
       OPTYPE_DECODE, // r1 r2
 
       OPTYPE_SUBSTR, // ti1 v2 v3
-      OPTYPE_REGEXP, // ti1 t2 v3
+      OPTYPE_REGEXP, // ti1 t2 v3 b4
       OPTYPE_DECOMP, // v1 v2 v3     66
 
       OPTYPE_REPLACE, // ti1 v2 v3 ti4
@@ -428,8 +428,9 @@ namespace Common {
     Value(operationtype_t p_optype, TemplateInstance *p_ti1, Value *p_v2);
     /** Constructor used by V_EXPR "ti1 v2 v3" */
     Value(operationtype_t p_optype, TemplateInstance *p_ti1, Value *p_v2, Value *p_v3);
-    /** Constructor used by V_EXPR "ti1 t2 v3" */
-    Value(operationtype_t p_optype, TemplateInstance *p_ti1, TemplateInstance *p_t2, Value *p_v3);
+    /** Constructor used by V_EXPR "ti1 t2 v3 b4" */
+    Value(operationtype_t p_optype, TemplateInstance *p_ti1, TemplateInstance *p_t2,
+      Value *p_v3, bool p_b4);
     /** Constructor used by V_EXPR "ti1 v2 v3 ti4" */
     Value(operationtype_t p_optype, TemplateInstance *p_ti1, Value *p_v2,
       Value *p_v3, TemplateInstance *p_ti4);
diff --git a/compiler2/string.cc b/compiler2/string.cc
index 37275cbcc01de28edf956516a12ea8956a154875..ce9dea8913cee2e52b412e91ac15f0a794dc2e9b 100644
--- a/compiler2/string.cc
+++ b/compiler2/string.cc
@@ -405,31 +405,6 @@ string string::get_stringRepr() const
   return ret_val;
 }
 
-ustring string::convert_stringRepr_for_pattern() const {
-  ustring ret_val;
-
-  if (val_ptr->n_chars % 8 != 0)
-    FATAL_ERROR("string::convert_stringRepr_for_pattern(): Cannot create"
-      "universal string. Length must be a multiple of 8.");
-
-  unsigned char c1, c2;
-  unsigned char array[4];
-  size_t index = 0;
-  while (index < val_ptr->n_chars) {
-    for (size_t j = 0; j < 4; j++) {
-      c1 = (unsigned char)val_ptr->chars_ptr[index++];
-      c2 = (unsigned char)val_ptr->chars_ptr[index++];
-      if (c1 >= 'A' && c1 <= 'P' && c2 >= 'A' && c2 <= 'P') {
-        array[j] = ((c1 - 'A') << 4) | (c2 - 'A');
-      } else
-        FATAL_ERROR("string::convert_stringRepr_for_pattern(): Cannot create"
-          "universal string. Source contains illegal character.");
-    }
-    ret_val += ustring(array[0], array[1], array[2], array[3]);
-  }
-  return ret_val;
-}
-
 string& string::operator=(const string& s)
 {
   if (&s != this) {
diff --git a/compiler2/string.hh b/compiler2/string.hh
index 8d13dac0f5e2a5785dc4f6b5df8a3c08a5bd843b..351c06698e5c7147e70ec1d59a5e8d7a59aa658c 100644
--- a/compiler2/string.hh
+++ b/compiler2/string.hh
@@ -160,11 +160,6 @@ public:
    * returned string. */
   string get_stringRepr() const;
 
-  /** Creates universal string from pattern form: ([A-P]{8})*
-   *
-   */
-  ustring convert_stringRepr_for_pattern() const;
-
   /** Assignment operator. */
   string& operator=(const string&);
 
diff --git a/compiler2/subtypestuff.cc b/compiler2/subtypestuff.cc
index ac5bb4644d9ef7e67af1abcf5e6bd95e4eb2ba41..4209f2e4363ac25f0bd00da5fe2372acb1d3f43f 100644
--- a/compiler2/subtypestuff.cc
+++ b/compiler2/subtypestuff.cc
@@ -508,7 +508,7 @@ tribool StringPatternConstraint::match(const string& str) const
 {
   string patt = pattern->get_full_str();
   if (patt.size()==0) return TRIBOOL(str.size()==0);
-  string *result = regexp(str, string('(')+patt+string(')'), 0);
+  string *result = regexp(str, string('(')+patt+string(')'), 0, pattern->get_nocase());
   bool rv = (result->size()!=0);
   delete result;
   return TRIBOOL(rv);
@@ -517,7 +517,11 @@ tribool StringPatternConstraint::match(const string& str) const
 string StringPatternConstraint::to_string() const
 {
   string ret_val;
-  ret_val += "pattern(";
+  ret_val += "pattern ";
+  if (pattern->get_nocase()) {
+    ret_val += "@nocase ";
+  }
+  ret_val += "(";
   ret_val += pattern->get_full_str();
   ret_val += ')';
   return ret_val;
diff --git a/compiler2/ttcn3/PatternString.cc b/compiler2/ttcn3/PatternString.cc
index ad8c78fb4888978375f0c34cd02b9c5460ff5a4b..3feb9093094ceb6b0380f79a93b55bb2eebb2abf 100644
--- a/compiler2/ttcn3/PatternString.cc
+++ b/compiler2/ttcn3/PatternString.cc
@@ -380,7 +380,7 @@ namespace Ttcn {
         posix_str = TTCN_pattern_to_regexp(str.c_str());
         break;
       case USTR_PATTERN:
-        posix_str = TTCN_pattern_to_regexp_uni(str.c_str());
+        posix_str = TTCN_pattern_to_regexp_uni(str.c_str(), nocase);
     }
     Free(posix_str);
   }
@@ -496,12 +496,17 @@ namespace Ttcn {
       // empty pattern: create an empty string literal for it
       s += p_mod->add_charstring_literal(string());
     }
+    s += ", ";
+    s += nocase ? "TRUE" : "FALSE";
     s += ')';
     return s;
   }
 
   void PatternString::dump(unsigned level) const
   {
+    if (nocase) {
+      DEBUG(level, "@nocase");
+    }
     DEBUG(level, "%s", get_full_str().c_str());
   }
 
diff --git a/compiler2/ttcn3/PatternString.hh b/compiler2/ttcn3/PatternString.hh
index 70ae58b89bb2bb0f7c925b6bf9f839a135c11774..e8876b5cdf1d5b2807af1e078d3439a829301eb8 100644
--- a/compiler2/ttcn3/PatternString.hh
+++ b/compiler2/ttcn3/PatternString.hh
@@ -54,10 +54,12 @@ namespace Ttcn {
     Value* cstr_value;
 
     pstr_type_t pattern_type;
+    
+    bool nocase;
 
   public:
     PatternString(): Node(), my_scope(0), cstr_value(0),
-      pattern_type(CSTR_PATTERN) { }
+      pattern_type(CSTR_PATTERN), nocase(false) { }
     virtual ~PatternString();
     virtual PatternString* clone() const;
     virtual void set_fullname(const string& p_fullname);
@@ -94,6 +96,10 @@ namespace Ttcn {
     
     /** Converts this string pattern into a JSON schema string pattern. */
     char* convert_to_json();
+    
+    void set_nocase(bool p_nocase) { nocase = p_nocase; }
+    
+    bool get_nocase() const { return nocase; }
   };
 
 } // namespace Ttcn
diff --git a/compiler2/ttcn3/TtcnTemplate.cc b/compiler2/ttcn3/TtcnTemplate.cc
index 73c1fb939a930fab4845be6788fab58323298a7e..300e4515b2160ee39a68d2bf7c23731e5983c48f 100644
--- a/compiler2/ttcn3/TtcnTemplate.cc
+++ b/compiler2/ttcn3/TtcnTemplate.cc
@@ -279,7 +279,11 @@ namespace Ttcn {
       break;
     case CSTR_PATTERN:
     case USTR_PATTERN:
-      ret_val += "pattern \"";
+      ret_val += "pattern ";
+      if (u.pstring->get_nocase()) {
+        ret_val += "@nocase ";
+      }
+      ret_val += "\"";
       ret_val += u.pstring->get_full_str();
       ret_val += "\"";
       break;
diff --git a/compiler2/ttcn3/compiler.y b/compiler2/ttcn3/compiler.y
index 9ac8d7292c161b52296cee072d00f65fedf5ed3f..fd7592fc70d9eae591f0062edb1a2d8284f9cd1e 100644
--- a/compiler2/ttcn3/compiler.y
+++ b/compiler2/ttcn3/compiler.y
@@ -3524,9 +3524,9 @@ CharStringMatch: // 124
   }
 | PatternKeyword NocaseKeyword PatternChunkList
   {
-    // @nocase is ignored for now
     Location loc(infile, @3);
     $$ = parse_pattern($3, loc);
+    $$->set_nocase(true);
     Free($3);
   }
 ;
@@ -8862,13 +8862,13 @@ PredefinedOps:
 | regexpKeyword '(' optError TemplateInstance optError ',' optError
   TemplateInstance optError ',' optError Expression optError ')'
   {
-    $$ = new Value(Value::OPTYPE_REGEXP, $4, $8, $12);
+    $$ = new Value(Value::OPTYPE_REGEXP, $4, $8, $12, false);
     $$->set_location(infile, @$);
   }
 | regexpKeyword NocaseKeyword '(' optError TemplateInstance optError ',' optError
   TemplateInstance optError ',' optError Expression optError ')'
   {
-    $$ = new Value(Value::OPTYPE_REGEXP, $5, $9, $13);
+    $$ = new Value(Value::OPTYPE_REGEXP, $5, $9, $13, true);
     $$->set_location(infile, @$);
   }
 | regexpKeyword '(' error ')'
@@ -8883,7 +8883,7 @@ PredefinedOps:
     ti2->set_location(infile, @3);
     Value *v3 = new Value(Value::V_ERROR);
     v3->set_location(infile, @3);
-    $$ = new Value(Value::OPTYPE_REGEXP, ti1, ti2, v3);
+    $$ = new Value(Value::OPTYPE_REGEXP, ti1, ti2, v3, false);
     $$->set_location(infile, @$);
   }
 | regexpKeyword NocaseKeyword '(' error ')'
@@ -8898,7 +8898,7 @@ PredefinedOps:
     ti2->set_location(infile, @4);
     Value *v3 = new Value(Value::V_ERROR);
     v3->set_location(infile, @4);
-    $$ = new Value(Value::OPTYPE_REGEXP, ti1, ti2, v3);
+    $$ = new Value(Value::OPTYPE_REGEXP, ti1, ti2, v3, true);
     $$->set_location(infile, @$);
   }
 | encvalueKeyword '(' optError TemplateInstance optError ')'
diff --git a/compiler2/ustring.cc b/compiler2/ustring.cc
index 5669b604e603c3652aa798cd763b5e290b3a051e..6849aa7a8d86f67ffb72ed863061e1e9595b3e18 100644
--- a/compiler2/ustring.cc
+++ b/compiler2/ustring.cc
@@ -350,6 +350,18 @@ char* ustring::convert_to_regexp_form() const {
   return res;
 }
 
+ustring ustring::extract_matched_section(int start, int end) const
+{
+  // the indexes refer to the string's regexp form, which contains 8 characters
+  // for every universal character in the original string
+  start /= 8;
+  end /= 8;
+  ustring ret_val(end - start);
+  memcpy(ret_val.val_ptr->uchars_ptr, val_ptr->uchars_ptr + start, (end - start) *
+    sizeof(universal_char));
+  return ret_val;
+}
+
 ustring& ustring::operator=(const ustring& s)
 {
   if(&s != this) {
diff --git a/compiler2/ustring.hh b/compiler2/ustring.hh
index e24279210ee01630796ef97bbf5f1f60926380b7..fc574d97930eab21a1569fbf56f8b619cdf53397 100644
--- a/compiler2/ustring.hh
+++ b/compiler2/ustring.hh
@@ -118,6 +118,11 @@ public:
    */
   char* convert_to_regexp_form() const;
   
+  /** extracts the section matched by a regexp and returns it
+    * (the starting and ending indexes refer to the hex representation of the
+    * string, which is 8 times longer) */
+  ustring extract_matched_section(int start, int end) const;
+  
   /** Assignment operator. */
   ustring& operator=(const ustring&);
 
diff --git a/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script b/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script
index 298b71194e9e1c3b44f847b0731cc3be55dbee73..396f175a6c8a4b25275c3d9d24be86f3c03a7d56 100644
--- a/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script
+++ b/conformance_test/core_language_tests/negative_tests/05_basic_language_elements.script
@@ -310,6 +310,320 @@ error: There is no local or imported definition with name `v_statement'
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_001 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_001 NegSem_050202_Uniqueness_001.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_001 {
+	type component GeneralComp {
+		const integer cl_int := 0;
+	}
+
+	testcase TC_NegSem_050202_Uniqueness_001() runs on GeneralComp {
+		const integer cl_int := 0;
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_001());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `cl_int' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_004 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_004 NegSem_050202_Uniqueness_004.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_004 {
+	const integer c_int := 0;
+
+	type component GeneralComp {
+	}
+
+	function f_funcScope() {}
+
+	testcase TC_NegSem_050202_Uniqueness_004() runs on GeneralComp {
+		const integer c_int := 0;
+		f_funcScope();
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_004());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `c_int' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_005 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_005 NegSem_050202_Uniqueness_005.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_005 {
+	const integer c_int := 0;
+
+	type component GeneralComp {
+	}
+
+	function f_funcScope() {
+		const integer c_int := 0;
+	}
+
+	testcase TC_NegSem_050202_Uniqueness_005() runs on GeneralComp {
+		f_funcScope();
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_005());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `c_int' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_006 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_006 NegSem_050202_Uniqueness_006.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_006 {
+	type component GeneralComp {
+		const integer repeatedIdentifier := 0;
+	}
+
+	testcase TC_NegSem_050202_Uniqueness_006() runs on GeneralComp {
+		var boolean repeatedIdentifier := true;
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_006());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `repeatedIdentifier' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_007 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_007 NegSem_050202_Uniqueness_007.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_007 {
+	type component GeneralComp {
+		const integer repeatedIdentifier := 0;
+	}
+
+	function f_funcScope() runs on GeneralComp {
+		var boolean repeatedIdentifier := true;
+	}
+
+	testcase TC_NegSem_050202_Uniqueness_007() runs on GeneralComp {
+		f_funcScope();
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_007());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `repeatedIdentifier' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_008 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_008 NegSem_050202_Uniqueness_008.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_008 {
+	type component GeneralComp {
+	}
+
+	function f_funcScope(boolean repeatedIdentifier) {
+		const integer repeatedIdentifier := 0;
+	}
+
+	testcase TC_NegSem_050202_Uniqueness_008() runs on GeneralComp {
+		var boolean v_boolean := true;
+		f_funcScope(v_boolean);
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_008());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `repeatedIdentifier' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_009 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_009 NegSem_050202_Uniqueness_009.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_009 {
+	const integer repeatedIdentifier := 0;
+
+	type component GeneralComp {
+	}
+
+	function f_funcScope() {}
+
+	testcase TC_NegSem_050202_Uniqueness_009() runs on GeneralComp {
+		var boolean repeatedIdentifier := true;
+		f_funcScope();
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_009());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `repeatedIdentifier' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_050202_Uniqueness_010 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that the IUT correctly handles the uniqueness of variable names in its scope  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_050202_Uniqueness_010 NegSem_050202_Uniqueness_010.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:5.2.2, Ensure that the IUT correctly handles the uniqueness of variable names in its scope
+ ** @verdict  pass reject
+ ***************************************************/
+module NegSem_050202_Uniqueness_010 {
+	const integer repeatedIdentifier := 0;
+
+	type component GeneralComp {
+	}
+
+	function f_funcScope() {
+		var boolean repeatedIdentifier := true;
+	}
+
+	testcase TC_NegSem_050202_Uniqueness_010() runs on GeneralComp {
+		f_funcScope();
+	}
+	control {
+		execute(TC_NegSem_050202_Uniqueness_010());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: Definition with identifier `repeatedIdentifier' is not unique in the scope hierarchy
+<END_RESULT>
+
+<END_TC>
+:exmp
+
 .*---------------------------------------------------------------------*
 :h2. 0503_ordering_of_declarations folder
 .*---------------------------------------------------------------------*
diff --git a/conformance_test/core_language_tests/negative_tests/06_types_and_values.script b/conformance_test/core_language_tests/negative_tests/06_types_and_values.script
index c558531cf5cbf8e534f5c2386c61cc1d11505a21..9195c4ef5b87d325af0a2c322fb89bae04f79714 100644
--- a/conformance_test/core_language_tests/negative_tests/06_types_and_values.script
+++ b/conformance_test/core_language_tests/negative_tests/06_types_and_values.script
@@ -54,7 +54,7 @@ This TD contains negative tests from ETSI TTCN3 Conformance Test's 06_types_and_
 .*---------------------------------------------------------------------*
 
 *---------------------------------------------------------------------*
-:h3. NegSem_0501_Identifier_001 negative test
+:h3. NegSyn_060100_SimpleBasicTypes_001 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -62,7 +62,7 @@ This TD contains negative tests from ETSI TTCN3 Conformance Test's 06_types_and_
 
 <COMPILE>
 
-<MODULE TTCN NegSem_0501_Identifier_001 NegSem_0501_Identifier_001.ttcn >
+<MODULE TTCN NegSyn_060100_SimpleBasicTypes_001 NegSyn_060100_SimpleBasicTypes_001.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:6.1.0, Assign float to integer values
@@ -81,7 +81,7 @@ error: integer value was expected
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_0501_Identifier_002 negative test
+:h3. NegSyn_060100_SimpleBasicTypes_002 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -89,7 +89,7 @@ error: integer value was expected
 
 <COMPILE>
 
-<MODULE TTCN NegSem_0501_Identifier_002 NegSem_0501_Identifier_002.ttcn >
+<MODULE TTCN NegSyn_060100_SimpleBasicTypes_002 NegSyn_060100_SimpleBasicTypes_002.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:6.1.0, Assign boolean to integer values
@@ -108,7 +108,7 @@ error: integer value was expected
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_0501_Identifier_003 negative test
+:h3. NegSyn_060100_SimpleBasicTypes_003 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -116,7 +116,7 @@ error: integer value was expected
 
 <COMPILE>
 
-<MODULE TTCN NegSem_0501_Identifier_003 NegSem_0501_Identifier_003.ttcn >
+<MODULE TTCN NegSyn_060100_SimpleBasicTypes_003 NegSyn_060100_SimpleBasicTypes_003.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:6.1.0, Assign integer to float values
@@ -135,7 +135,7 @@ error: float value was expected
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_0501_Identifier_004 negative test
+:h3. NegSyn_060100_SimpleBasicTypes_004 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -143,7 +143,7 @@ error: float value was expected
 
 <COMPILE>
 
-<MODULE TTCN NegSem_0501_Identifier_004 NegSem_0501_Identifier_004.ttcn >
+<MODULE TTCN NegSyn_060100_SimpleBasicTypes_004 NegSyn_060100_SimpleBasicTypes_004.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:6.1.0, Assign boolean to float values
@@ -162,7 +162,7 @@ error: float value was expected
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_0501_Identifier_005 negative test
+:h3. NegSyn_060100_SimpleBasicTypes_005 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -170,7 +170,7 @@ error: float value was expected
 
 <COMPILE>
 
-<MODULE TTCN NegSem_0501_Identifier_005 NegSem_0501_Identifier_005.ttcn >
+<MODULE TTCN NegSyn_060100_SimpleBasicTypes_005 NegSyn_060100_SimpleBasicTypes_005.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:6.1.0, Assign verdicttype to float values
@@ -189,7 +189,7 @@ error: float value was expected
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_0501_Identifier_006 negative test
+:h3. NegSyn_060100_SimpleBasicTypes_006 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -197,7 +197,7 @@ error: float value was expected
 
 <COMPILE>
 
-<MODULE TTCN NegSem_0501_Identifier_006 NegSem_0501_Identifier_006.ttcn >
+<MODULE TTCN NegSyn_060100_SimpleBasicTypes_006 NegSyn_060100_SimpleBasicTypes_006.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:6.1.0, Assign integer to verdicttype values
@@ -2142,6 +2142,45 @@ error: "abcyz" is not a valid value for type `charstring' which has subtype patt
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. NegSyn_06010205_StringPattern_001 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Assign values to pattern restricted character strings without @nocase modifier. >
+
+<COMPILE>
+
+<MODULE TTCN NegSyn_06010205_StringPattern_001 NegSyn_06010205_StringPattern_001.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:6.1.2.5, Assign values to pattern restricted character strings without @nocase modifier.
+ ** @verdict  pass reject, noexecution
+ ***************************************************/
+
+module NegSyn_06010205_StringPattern_001 {
+    type charstring MyString (pattern "abc*xyz"); //without @nocase
+
+    type component GeneralComp {}
+    
+    testcase TC_NegSyn_06010205_StringPattern_001() runs on GeneralComp {
+        var MyString v_c;
+        v_c := "ABc1234xYz";    //error value is out of constraint: ABc
+    }
+    
+    control{
+        execute(TC_NegSyn_06010205_StringPattern_001());
+    }
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: "ABc1234xYz" is not a valid value for type `charstring' which has subtype pattern\(abc\*xyz\)
+<END_RESULT>
+
+<END_TC>
+:exmp
+
 *---------------------------------------------------------------------*
 :h3. NegSyn_06010205_StringPattern_002 negative test
 .*---------------------------------------------------------------------*
@@ -4409,7 +4448,7 @@ error: union value was expected for type `@NegSem_060205_top_level_005.U'
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_060205_top_level_005 negative test
+:h3. NegSyn_060205_top_level_001 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -5009,7 +5048,7 @@ error: Type `address' is not defined in this module
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_060206_anytype_002 negative test
+:h3. NegSyn_060206_anytype_002 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -5017,7 +5056,7 @@ error: Type `address' is not defined in this module
 
 <COMPILE>
 
-<MODULE TTCN NegSem_060206_anytype_002 NegSem_060206_anytype_002.ttcn >
+<MODULE TTCN NegSyn_060206_anytype_002 NegSyn_060206_anytype_002.ttcn >
 /****************************************************
  ** @version  0.0.1
  ** @purpose  1:6.2.0.6, ensure that anytype cannot be port type
diff --git a/conformance_test/core_language_tests/negative_tests/07-14_folder.script b/conformance_test/core_language_tests/negative_tests/07-14_folder.script
index a201d676795802b6f51d613e7693f409195ab79c..1e59ff9fe51619d0f743d79d1755f51d0b37cd93 100644
--- a/conformance_test/core_language_tests/negative_tests/07-14_folder.script
+++ b/conformance_test/core_language_tests/negative_tests/07-14_folder.script
@@ -1103,6 +1103,54 @@ error: Incompatible explicit type specification: `integer' was expected instead
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. NegSem_08020301_GeneralFormatOfImport_038 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Verify that definition from inside an imported function cannot be referenced  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_08020301_GeneralFormatOfImport_038 NegSem_08020301_GeneralFormatOfImport_038.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:8.2.3.1, Verify that definition from inside an imported function cannot be referenced
+ ** @verdict  pass reject
+ *****************************************************************/
+
+// The following requirements are tested:
+// Restriction f:
+// When importing a function, altstep or test case the corresponding behaviour 
+// specifications and all definitions used inside the behaviour specifications 
+// remain invisible for the importing module.
+
+module NegSem_08020301_GeneralFormatOfImport_038 {
+	import from NegSem_08020301_GeneralFormatOfImport_038_import { function f_test };
+	// c_test should be undefined, because it is invisible for the importing module
+	const integer c_test2 := c_test;
+}
+
+<END_MODULE>
+
+<MODULE TTCN NegSem_08020301_GeneralFormatOfImport_038_import NegSem_08020301_GeneralFormatOfImport_038_import.ttcn >
+
+module NegSem_08020301_GeneralFormatOfImport_038_import {
+	function f_test() {
+		const integer c_test := 1;
+	}
+}
+
+<END_MODULE>
+
+
+<RESULT COUNT 1>
+error: There is no local or imported definition with name `c_test'
+<END_RESULT>
+
+<END_TC>
+:exmp
+
 *---------------------------------------------------------------------*
 :h3. NegSyn_08020301_GeneralFormatOfImport_001 negative test
 .*---------------------------------------------------------------------*
@@ -1715,7 +1763,7 @@ error: There is no local or imported definition with name `c_myconst'
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_080205_VisibilityOfDefinitions_005 negative test
+:h3. NegSyn_0803_ModuleControlPart_001 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1723,7 +1771,7 @@ error: There is no local or imported definition with name `c_myconst'
 
 <COMPILE>
 
-<MODULE TTCN NegSem_080205_VisibilityOfDefinitions_005 NegSem_080205_VisibilityOfDefinitions_005.ttcn >
+<MODULE TTCN NegSyn_0803_ModuleControlPart_001 NegSyn_0803_ModuleControlPart_001.ttcn >
 /*****************************************************************
  ** @version  0.0.1
  ** @purpose  1:8.3, Ensure that there is not more than one control part.
@@ -2936,7 +2984,7 @@ error: at or before token `1.0': syntax error, unexpected FloatValue, expecting
 :h2. 14_procedure_signatures folder
 .*---------------------------------------------------------------------*
 *---------------------------------------------------------------------*
-:h3. egSem_1400_procedure_signatures_001 negative test
+:h3. NegSem_1400_procedure_signatures_001 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -2944,7 +2992,7 @@ error: at or before token `1.0': syntax error, unexpected FloatValue, expecting
 
 <COMPILE>
 
-<MODULE TTCN egSem_1400_procedure_signatures_001 egSem_1400_procedure_signatures_001.ttcn >
+<MODULE TTCN NegSem_1400_procedure_signatures_001 NegSem_1400_procedure_signatures_001.ttcn >
 /*****************************************************************
  ** @version  0.0.1
  ** @purpose  1:22.3.1, Ensure that nonblocking signature contains in parameter
@@ -3006,7 +3054,7 @@ error: A non-blocking signature cannot have `out' parameter
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. egSem_1400_procedure_signatures_002 negative test
+:h3. NegSem_1400_procedure_signatures_002 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -3014,7 +3062,7 @@ error: A non-blocking signature cannot have `out' parameter
 
 <COMPILE>
 
-<MODULE TTCN egSem_1400_procedure_signatures_002 egSem_1400_procedure_signatures_002.ttcn >
+<MODULE TTCN NegSem_1400_procedure_signatures_002 NegSem_1400_procedure_signatures_002.ttcn >
 /*****************************************************************
  ** @version  0.0.1
  ** @purpose  1:14, Ensure that blocking calls needs response or exception handling
diff --git a/conformance_test/core_language_tests/negative_tests/08_empty_modules.script b/conformance_test/core_language_tests/negative_tests/08_empty_modules.script
index fb0a096652f7ddc15969579b8f708f6e782b6cfc..0acfb85f9769d12bd204a5178604b6abbd8d4a34 100644
--- a/conformance_test/core_language_tests/negative_tests/08_empty_modules.script
+++ b/conformance_test/core_language_tests/negative_tests/08_empty_modules.script
@@ -276,6 +276,38 @@ error
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. Syn_0803_ModuleControlPart_003 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that an empty control part is accepted. >
+
+<COMPILE>
+
+<MODULE TTCN Syn_0803_ModuleControlPart_003 Syn_0803_ModuleControlPart_003.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:8.3, Ensure that an empty control part is accepted.
+ ** @verdict  pass accept, noexecution
+ *****************************************************************/
+
+module Syn_0803_ModuleControlPart_003 {
+
+	control {
+	
+	}
+
+}
+<END_MODULE>
+
+<RESULT IF_PASS NEGATIVE>
+error
+<END_RESULT>
+
+<END_TC>
+:exmp
+
 .*---------------------------------------------------------------------*
 :h1.References
 .*---------------------------------------------------------------------*
diff --git a/conformance_test/core_language_tests/negative_tests/15_templates.script b/conformance_test/core_language_tests/negative_tests/15_templates.script
index 536a2f8ff62b48e7426c5e059ef7c7680a32e3c3..0b98d15806ed42e68bb199edc0aa1498c702faa1 100644
--- a/conformance_test/core_language_tests/negative_tests/15_templates.script
+++ b/conformance_test/core_language_tests/negative_tests/15_templates.script
@@ -1071,60 +1071,7 @@ Dynamic test case error: Accessing field f1 of a non-specific template of type @
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_006 negative test
-.*---------------------------------------------------------------------*
-:xmp tab=0.
-
-<TC - Ensure that referencing a field of an address type, which actual value is null shall cause rejection. >
-
-<COMPILE>
-
-<MODULE TTCN NegSem_150602_ReferencingRecordAndSetFields_006 NegSem_150602_ReferencingRecordAndSetFields_006.ttcn >
-/*****************************************************************
- ** @version  0.0.1
- ** @purpose  1:15.6.2, Ensure that referencing a field of an address type, which actual value is null shall cause rejection.
- ** @verdict  pass reject
- *****************************************************************/
-
-//Restriction d)
-/*Special value null: referencing a field of an address type, which actual value is null shall cause an error.*/
-
-module NegSem_150602_ReferencingRecordAndSetFields_006 {
-
-	type component GeneralComp { }
-
-	type integer address;
-
-	type record MyRecordOne {
-		address f1 
-	}
-
-	testcase TC_NegSem_150602_ReferencingRecordAndSetFields_006() runs on GeneralComp {
-		var template MyRecordOne m_R1 := {
-			f1 := null
-		}
-		var template MyRecordOne m_R2 := {
-			f1 := m_R1.f1 // access to a field with null shall cause an error!
-		}
-		setverdict(pass);
-	}
-
-	control{
-		execute(TC_NegSem_150602_ReferencingRecordAndSetFields_006());
-	}
-
-}
-<END_MODULE>
-
-<RESULT COUNT 1>
-error: integer value was expected
-<END_RESULT>
-
-<END_TC>
-:exmp
-
-*---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_001 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_001 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1173,7 +1120,7 @@ Dynamic test case error: Accessing an element of a non-specific template for typ
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_002 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_002 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1221,7 +1168,7 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_003 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_003 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1268,7 +1215,7 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_004 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_004 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1315,7 +1262,7 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_005 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_005 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1370,7 +1317,7 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_006 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_006 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1423,7 +1370,7 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_008 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_008 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1470,7 +1417,7 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_009 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_009 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1519,7 +1466,7 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_010 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_010 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1578,7 +1525,7 @@ Dynamic test case error: Matching with an uninitialized/unsupported integer temp
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_011 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_011 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1636,7 +1583,7 @@ Dynamic test case error: Copying an uninitialized/unsupported integer template.
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_012 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_012 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1694,7 +1641,7 @@ Dynamic test case error: Copying an uninitialized/unsupported integer template.
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_013 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_013 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1751,7 +1698,7 @@ Dynamic test case error: Assignment of an unbound integer value.
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_014 negative test
+:h3. NegSem_150603_ReferencingRecordOfAndSetElements_014 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -1799,56 +1746,6 @@ Dynamic test case error: Accessing an element of a non-specific template for typ
 <END_TC>
 :exmp
 
-*---------------------------------------------------------------------*
-:h3. NegSem_150602_ReferencingRecordAndSetFields_015 negative test
-.*---------------------------------------------------------------------*
-:xmp tab=0.
-
-<TC - Ensure that referencing an element of an address type, which actual value is null shall cause an error. >
-
-<COMPILE>
-
-<MODULE TTCN NegSem_150603_ReferencingRecordOfAndSetElements_015 NegSem_150603_ReferencingRecordOfAndSetElements_015.ttcn >
-/*****************************************************************
- ** @version  0.0.1
- ** @purpose  1:15.6.3, Ensure that referencing an element of an address type, which actual value is null shall cause an error.
- ** @verdict  pass reject
- *****************************************************************/
-
- //Restriction h)	
-/*Special value null: referencing an element of an address type, which actual value is null shall cause an error.*/
-
-module NegSem_150603_ReferencingRecordOfAndSetElements_015 {
-
-    type component GeneralComp { }
-
-    type set of integer RoI;
-    type integer address;
-
-    testcase TC_NegSem_150603_ReferencingRecordOfAndSetElements_015() runs on GeneralComp {
-        var address v_add := null;
-        var template RoI m_one;
-
-        
-        m_one := {v_add, 1}; // // shall cause an error as we access a value list
-
-        setverdict(pass);
-    }
-
-    control{
-        execute(TC_NegSem_150603_ReferencingRecordOfAndSetElements_015());
-    }
-
-}
-<END_MODULE>
-
-<RESULT COUNT 1>
-error: integer value was expected
-<END_RESULT>
-
-<END_TC>
-:exmp
-
 *---------------------------------------------------------------------*
 :h3. NegSem_150605_Referencing_union_alternatives_001 negative test
 .*---------------------------------------------------------------------*
diff --git a/conformance_test/core_language_tests/negative_tests/16-20_folders.script b/conformance_test/core_language_tests/negative_tests/16-20_folders.script
index 81d42d379987d138feb5927be4bc13fafcd24e8c..9fe703ddb1c970a07283adddab448b9b0b0b7f2a 100644
--- a/conformance_test/core_language_tests/negative_tests/16-20_folders.script
+++ b/conformance_test/core_language_tests/negative_tests/16-20_folders.script
@@ -1481,6 +1481,60 @@ Dynamic test case error: Performing a valueof or send operation on a non-specifi
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. NegSem_160102_predefined_functions_034 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - Ensure that an error is detected when the parameter of the encvalue function contains a partially initialized value >
+
+<COMPILE>
+<EXECUTE_PARALLEL>
+
+<MODULE TTCN NegSem_160102_predefined_functions_034 NegSem_160102_predefined_functions_034.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:16.1.2, Ensure that an error is detected when the parameter of the encvalue function contains a partially initialized value
+ ** @verdict  pass reject
+ ***************************************************/
+
+// The following requirements are tested:
+// 16.1.2, restriction a.3: all actual in and inout parameters shall be initialized
+
+module NegSem_160102_predefined_functions_034 {
+	
+	type record R 
+	{
+		integer field1,
+		integer field2
+	} with { variant "" }
+	
+	type component GeneralComp {	
+	}
+	
+
+	testcase TC_NegSem_160102_predefined_functions_034 () runs on GeneralComp {
+		template R v_test := { field1 := 1, field2 := - }
+		var bitstring v_res := encvalue(v_test);
+		setverdict(fail, "The previous encvalue call should have caused an error"); 
+	}
+
+	control{
+
+		execute(TC_NegSem_160102_predefined_functions_034());
+
+	}
+
+} with { encode "RAW"}
+<END_MODULE>
+
+<RESULT COUNT 1>
+Dynamic test case error: While RAW-encoding type '@NegSem_160102_predefined_functions_034.R': Encoding an unbound value.
+<END_RESULT>
+
+<END_TC>
+:exmp
+
 *---------------------------------------------------------------------*
 :h3. NegSem_160102_predefined_functions_035 negative test
 .*---------------------------------------------------------------------*
@@ -2435,6 +2489,313 @@ error: at or before token `setverdict': syntax error, unexpected SetVerdictKeywo
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. NegSem_190302_select_union_statement_001 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - verify that header part of select-union statements cannot contain anything else than union instances >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_190302_select_union_statement_001 NegSem_190302_select_union_statement_001.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:19.3.2, verify that header part of select-union statements cannot contain anything else than union instances
+ ** @verdict  pass reject
+ ***************************************************/
+
+// The following requirement is tested:
+// In the header part of the select union statement a template instance of union 
+// type shall be given.
+
+module NegSem_190302_select_union_statement_001 { 
+
+    type component GeneralComp {
+	}	
+    
+    type record R {
+        integer intOption optional,
+        charstring strOption optional,
+        boolean boolOption optional
+    }
+
+    testcase TC_NegSem_190302_select_union_statement_001() runs on GeneralComp {
+        var R v_rec := { intOption := omit, strOption := "abc", boolOption := omit }
+
+        select union (v_rec) {
+            case (intOption) {
+                setverdict(pass);
+            } case (strOption) {
+                setverdict(pass);
+            } case (boolOption) {
+                setverdict(pass);
+            }
+        }
+	}
+
+	control {
+		execute(TC_NegSem_190302_select_union_statement_001());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: The head must be of a union type or anytype
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_190302_select_union_statement_002 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - verify that uninitialized value cannot be used in select union header >
+
+<COMPILE>
+<EXECUTE_PARALLEL>
+
+<MODULE TTCN NegSem_190302_select_union_statement_002 NegSem_190302_select_union_statement_002.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:19.3.2, verify that uninitialized value cannot be used in select union header
+ ** @verdict  pass reject
+ ***************************************************/
+
+// The following requirement is tested:
+// [The TemplateInstance in the header of the select union statement] shall be 
+// at least partially initialized.
+
+module NegSem_190302_select_union_statement_002 { 
+
+    type component GeneralComp {
+	}	
+    
+    type union U {
+        integer intOption,
+        charstring strOption,
+        record {
+            integer field1,
+            integer field2
+        } recOption
+    }
+    
+    type record R {
+        U field1,
+        integer field2
+    }
+
+    testcase TC_NegSem_190302_select_union_statement_002() runs on GeneralComp {
+        var R v_rec;
+        v_rec.field2 := 3;
+        select union (v_rec.field1) {
+            case (intOption) {
+                setverdict(fail);
+            } case (strOption) {
+                setverdict(fail);
+            } case (recOption) {
+                setverdict(pass);
+            }
+        }
+	}
+
+	control {
+		execute(TC_NegSem_190302_select_union_statement_002());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+Dynamic test case error: The union in the head shall be initialized
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_190302_select_union_statement_003 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - verify that unknown alternatives cannot be use in case statements >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_190302_select_union_statement_003 NegSem_190302_select_union_statement_003.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:19.3.2, verify that unknown alternatives cannot be use in case statements
+ ** @verdict  pass reject
+ ***************************************************/
+
+// The following requirement is tested:
+// Every Identifier in a case of the select union statement shall be an identifier 
+// of an alternative of the union type of the template instance given to the 
+// statement's header.
+
+module NegSem_190302_select_union_statement_003 { 
+
+    type component GeneralComp {
+	}	
+    
+    type union U {
+        integer intOption,
+        charstring strOption,
+        record {
+            integer field1,
+            integer field2
+        } recOption
+    }
+
+    testcase TC_NegSem_190302_select_union_statement_003() runs on GeneralComp {
+        var U v_un := { intOption := 5 }
+        select union (v_un) {
+            case (intOption) {
+                setverdict(pass);
+            } case (strOption) {
+                setverdict(fail);
+            } case (recOption) {
+                setverdict(fail);
+            } case (boolOption) {
+                setverdict(fail);
+            }
+        }
+	}
+
+	control {
+		execute(TC_NegSem_190302_select_union_statement_003());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: In the 4. branch: 'boolOption' is not an alternative of union type '@NegSem_190302_select_union_statement_003.U'
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_190302_select_union_statement_004 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - verify that the same alternative cannot be used in two case statements (simple case) >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_190302_select_union_statement_004 NegSem_190302_select_union_statement_004.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:19.3.2, verify that the same alternative cannot be used in two case statements (simple case)
+ ** @verdict  pass reject
+ ***************************************************/
+
+// The following requirement is tested:
+// No two cases in a select union statement shall have the same case Identifier.
+
+module NegSem_190302_select_union_statement_004 { 
+
+    type component GeneralComp {
+	}	
+    
+    type union U {
+        integer intOption,
+        charstring strOption,
+        record {
+            integer field1,
+            integer field2
+        } recOption
+    }
+
+    testcase TC_NegSem_190302_select_union_statement_004() runs on GeneralComp {
+        var U v_un := { recOption := { field1 := 1, field2 := 2 } }
+
+        select union (v_un) {
+            case (intOption) {
+                setverdict(pass);
+            } case (strOption) {
+                setverdict(fail);
+            } case (recOption) {
+                setverdict(fail);
+            } case (intOption) {
+                setverdict(pass);
+            }
+        }
+	}
+
+	control {
+		execute(TC_NegSem_190302_select_union_statement_004());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: The 'intOption' is already present in the 1. branch of select union
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_190302_select_union_statement_005 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - verify that the same alternative cannot be used in two case statements (list item) >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_190302_select_union_statement_005 NegSem_190302_select_union_statement_005.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:19.3.2, verify that the same alternative cannot be used in two case statements (list item)
+ ** @verdict  pass reject
+ ***************************************************/
+
+// The following requirement is tested:
+// No two cases in a select union statement shall have the same case Identifier.
+
+module NegSem_190302_select_union_statement_005 { 
+
+    type component GeneralComp {
+	}	
+    
+    type union U {
+        integer intOption,
+        charstring strOption,
+        record {
+            integer field1,
+            integer field2
+        } recOption
+    }
+
+    testcase TC_NegSem_190302_select_union_statement_005() runs on GeneralComp {
+        var U v_un := { intOption := 10 }
+        select union (v_un) {
+            case (intOption, strOption) {
+                setverdict(pass);
+            } case (recOption, intOption) {
+                setverdict(fail);
+            }
+        }
+	}
+
+	control {
+		execute(TC_NegSem_190302_select_union_statement_005());
+	}
+}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: The 'intOption' is already present in the 1. branch of select union
+<END_RESULT>
+
+<END_TC>
+:exmp
+
 *---------------------------------------------------------------------*
 :h3. NegSem_1904_for_statement_001 negative test
 .*---------------------------------------------------------------------*
diff --git a/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script b/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script
index c470a634c88180e50e1ef42897a62705f37002aa..bf3f61b39f4257260e3be39fe0314239a3b0b78f 100644
--- a/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script
+++ b/conformance_test/core_language_tests/negative_tests/21_configuration_operations.script
@@ -53,7 +53,7 @@ This TD contains negative tests from ETSI TTCN3 Conformance Test's 21_configurat
 :h2. 2101_connection_operations folder
 .*---------------------------------------------------------------------*
 *---------------------------------------------------------------------*
-:h3. NegSem_1601_toplevel_001 negative test
+:h3. NegSem_2101_TopLevel_001 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -61,7 +61,7 @@ This TD contains negative tests from ETSI TTCN3 Conformance Test's 21_configurat
 
 <COMPILE>
 
-<MODULE TTCN NegSem_1601_toplevel_001 NegSem_1601_toplevel_001.ttcn >
+<MODULE TTCN NegSem_2101_TopLevel_001 NegSem_2101_TopLevel_001.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:21.1, Verify that connect operation cannot contain a system port
@@ -99,7 +99,7 @@ error: The `system' component reference shall not be used in `connect' operation
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_1601_toplevel_002 negative test
+:h3. NegSem_2101_TopLevel_002 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -108,7 +108,7 @@ error: The `system' component reference shall not be used in `connect' operation
 <COMPILE>
 <EXECUTE_PARALLEL>
 
-<MODULE TTCN NegSem_1601_toplevel_002 NegSem_1601_toplevel_002.ttcn >
+<MODULE TTCN NegSem_2101_TopLevel_002 NegSem_2101_TopLevel_002.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:21.1, Verify that map operation fails if both operands are component ports
@@ -684,7 +684,7 @@ error: The connection between port types `@NegSem_210101_connect_operation_001.m
 :exmp
 
 *---------------------------------------------------------------------*
-:h3. NegSem_210101_connect_operation_001 negative test
+:h3. NegSem_210101_map_operation_002 negative test
 .*---------------------------------------------------------------------*
 :xmp tab=0.
 
@@ -692,7 +692,7 @@ error: The connection between port types `@NegSem_210101_connect_operation_001.m
 
 <COMPILE>
 
-<MODULE TTCN NegSem_210101_connect_operation_001 NegSem_210101_connect_operation_001.ttcn >
+<MODULE TTCN NegSem_210101_map_operation_002 NegSem_210101_map_operation_002.ttcn >
 /***************************************************
  ** @version  0.0.1
  ** @purpose  1:21.1.1, Ensure that IUT cannot map input port with output port
diff --git a/conformance_test/core_language_tests/negative_tests/22_communication_operations.script b/conformance_test/core_language_tests/negative_tests/22_communication_operations.script
index 05f05a454b53e3ee32d4564e2993ae703f599101..a828c4b688ef8985631c64dc652bba94eaac641d 100644
--- a/conformance_test/core_language_tests/negative_tests/22_communication_operations.script
+++ b/conformance_test/core_language_tests/negative_tests/22_communication_operations.script
@@ -941,6 +941,72 @@ error: Type mismatch in value redirect: A variable of type `integer' was expecte
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. NegSem_220202_ReceiveOperation_005 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - applying @decoded to a forbidden field  >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_220202_ReceiveOperation_005 NegSem_220202_ReceiveOperation_005.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:22.2.2, applying @decoded to a forbidden field
+ ** @verdict  pass reject
+ *****************************************************************/
+
+// The following requirements are tested:
+// When assigning individual fields of a message, encoded payload fields can be 
+// decoded prior to assignment using the @decoded modifier. In this case, the 
+// referenced field on the right hand sided of the assignment shall be one of the 
+// bitstring, hexstring, octetstring, charstring or universal charstring types. It 
+// shall be decoded into a value of the same type as the variable on the left hand 
+// side of the assignment.
+
+module NegSem_220202_ReceiveOperation_005 {
+	type record R {
+        integer id,
+        record of integer payload (0..255)
+    }
+    
+	type port P message {
+		inout R;
+	} with {extension "internal"}
+	
+    type component GeneralComp {
+		port P p;
+	}
+	
+    testcase TC_NegSem_220202_ReceiveOperation_005() runs on GeneralComp {
+        var integer v_res;
+
+		connect(self:p, self:p);
+
+        p.send(R:{ id := 1, payload := {0, 0, 0, 0} });
+
+        alt {
+            [] p.receive(R:?) -> value (v_res := @decoded payload) { 
+                setverdict (pass);
+            }
+            [] p.receive { setverdict(pass); }
+        }
+    }
+
+    control {
+        execute(TC_NegSem_220202_ReceiveOperation_005(), 5.0);
+    }
+} with {encode "RAW"}
+<END_MODULE>
+
+<RESULT COUNT>
+error: The '@decoded' modifier is only available to value redirects of string types
+<END_RESULT>
+
+<END_TC>
+:exmp
+
 *---------------------------------------------------------------------*
 :h3. NegSem_220202_ReceiveOperation_006 negative test
 .*---------------------------------------------------------------------*
@@ -1743,6 +1809,71 @@ error: Type mismatch in value redirect: A variable of type `integer' was expecte
 <END_RESULT>
 
 
+<END_TC>
+:exmp
+
+*---------------------------------------------------------------------*
+:h3. NegSem_220203_TriggerOperation_005 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - applying @decoded to a forbidden field >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_220203_TriggerOperation_005 NegSem_220203_TriggerOperation_005.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:22.2.3, applying @decoded to a forbidden field
+ ** @verdict  pass reject
+ *****************************************************************/
+
+// The following requirements are tested:
+// Rules in clause 22.2.2 shall apply.
+// When assigning individual fields of a message, encoded payload fields can be 
+// decoded prior to assignment using the @decoded modifier. In this case, the 
+// referenced field on the right hand sided of the assignment shall be one of the 
+// bitstring, hexstring, octetstring, charstring or universal charstring types. It 
+// shall be decoded into a value of the same type as the variable on the left hand 
+// side of the assignment.
+
+module NegSem_220203_TriggerOperation_005 {
+	type record R {
+        integer id,
+        record of integer payload (0..255)
+    }
+    
+	type port P message {
+		inout R;
+	} with {extension "internal"}
+	
+    type component GeneralComp {
+		port P p;
+	}
+	
+    testcase TC_NegSem_220203_TriggerOperation_005() runs on GeneralComp {
+        var integer v_res;
+
+		connect(self:p, self:p);
+        p.send(R:{ id := 1, payload := {0, 0, 0, 0} });
+        alt {
+            [] p.trigger(R:?) -> value (v_res := @decoded payload) { 
+                setverdict (pass);
+            }
+        }
+    }
+
+    control {
+        execute(TC_NegSem_220203_TriggerOperation_005(), 5.0);
+    }
+} with {encode "RAW"}
+<END_MODULE>
+
+<RESULT COUNT 1>
+error: The '@decoded' modifier is only available to value redirects of string types
+<END_RESULT>
+
+
 <END_TC>
 :exmp
 
@@ -3014,6 +3145,76 @@ Dynamic test case error: The second argument of connect operation contains the n
 <END_TC>
 :exmp
 
+*---------------------------------------------------------------------*
+:h3. NegSem_220302_GetcallOperation_011 negative test
+.*---------------------------------------------------------------------*
+:xmp tab=0.
+
+<TC - applying @decoded to a forbidden field >
+
+<COMPILE>
+
+<MODULE TTCN NegSem_220302_GetcallOperation_011 NegSem_220302_GetcallOperation_011.ttcn >
+/******************************************************************************
+ ** @version  0.0.1
+ ** @purpose  1:22.3.2, applying @decoded to a forbidden field
+ ** @verdict  pass reject
+ *****************************************************************/
+
+// The following requirements are tested:
+// When assigning individual fields of a message, encoded payload fields can be 
+// decoded prior to assignment using the @decoded modifier. In this case, the 
+// referenced field on the right hand sided of the assignment shall be one of the 
+// bitstring, hexstring, octetstring, charstring or universal charstring types. It 
+// shall be decoded into a value of the same type as the variable on the left hand 
+// side of the assignment.
+
+module NegSem_220302_GetcallOperation_011 {
+    type record of integer RoI (0..255);
+    
+	signature S(RoI p_par);
+    
+	type port P procedure {
+		inout S;
+	} with {extension "internal"}
+	
+    type component GeneralComp {
+		port P p;
+	}
+    
+    function f_server() runs on GeneralComp {
+        var integer v_res;      
+        alt {
+            [] p.getcall(S: {p_par := ?} ) -> param (v_res := @decoded p_par) { 
+                setverdict (pass);
+            }
+            [] p.getcall { setverdict(fail); }
+        }        
+    }
+    
+    testcase TC_NegSem_220302_GetcallOperation_011() runs on GeneralComp system GeneralComp {
+        var GeneralComp v_ptc := GeneralComp.create("PTC");
+        connect(self:p, v_ptc:p);
+        v_ptc.start(f_server());
+        p.call(S:{ p_par := { 0, 0, 0, 0 } }, nowait);
+        v_ptc.done;
+        setverdict(pass);
+    }
+
+    control {
+        execute(TC_NegSem_220302_GetcallOperation_011(), 5.0);
+    }
+} with {encode "RAW"}
+<END_MODULE>
+
+<RESULT COUNT>
+error: The '@decoded' modifier is only available to parameter redirects of string types.
+<END_RESULT>
+
+<END_TC>
+:exmp
+
+
 *---------------------------------------------------------------------*
 :h3. NegSem_220302_GetcallOperation_012 negative test
 .*---------------------------------------------------------------------*
diff --git a/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script b/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script
index 93fb64cd467ebbdc4d4acef4d5f534e5aab65f73..7e837009746872bb1f3a3178522a29a20935e1a5 100644
--- a/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script
+++ b/conformance_test/core_language_tests/negative_tests/23-27-B_folders.script
@@ -6221,10 +6221,6 @@ error: permutation match cannot be used for type `integer'
 <END_TC>
 :exmp
 
-*---------------------------------------------------------------------*
-:h3. B0104_matching_attributes_of_values folder
-.*---------------------------------------------------------------------*
-
 *---------------------------------------------------------------------*
 :h3. NegSem_B010401_length_restrictions_002 negative test
 .*---------------------------------------------------------------------*
diff --git a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn
index e98e3a690534ccc66229f0c0318b26e1809c8ff4..50d4dba5997e8054c964ec98153091925381f090 100755
--- a/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/16_functions_altsteps_testcases/1601_functions/160102_predefined_functions/Sem_160102_predefined_functions_034.ttcn
@@ -45,4 +45,4 @@ module Sem_160102_predefined_functions_034 {
     control{
         execute(TC_Sem_160102_predefined_functions_034());
     }
-}
+} 
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_001.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn
similarity index 88%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_001.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn
index bef7d3b8cfe11c4ad12551d03151b99debeac838..c44b0c5cac573b931faa53b64b24ba9317b69d41 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_001.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn
@@ -17,7 +17,7 @@
 // In the header part of the select union statement a template instance of union 
 // type shall be given.
 
-module NegSem_190301_select_union_statement_001 { 
+module NegSem_190302_select_union_statement_001 { 
 
     type component GeneralComp {
 	}	
@@ -28,7 +28,7 @@ module NegSem_190301_select_union_statement_001 {
         boolean boolOption optional
     }
 
-    testcase TC_NegSem_190301_select_union_statement_001() runs on GeneralComp {
+    testcase TC_NegSem_190302_select_union_statement_001() runs on GeneralComp {
         var R v_rec := { intOption := omit, strOption := "abc", boolOption := omit }
 
         select union (v_rec) {
@@ -43,6 +43,6 @@ module NegSem_190301_select_union_statement_001 {
 	}
 
 	control {
-		execute(TC_NegSem_190301_select_union_statement_001());
+		execute(TC_NegSem_190302_select_union_statement_001());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_002.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn
similarity index 89%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_002.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn
index 39142cbe53b5b7813396708520140f189cf2fb17..c4d0844c4dc8db3e1fce4085db662f83501897ec 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_002.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn
@@ -17,7 +17,7 @@
 // [The TemplateInstance in the header of the select union statement] shall be 
 // at least partially initialized.
 
-module NegSem_190301_select_union_statement_002 { 
+module NegSem_190302_select_union_statement_002 { 
 
     type component GeneralComp {
 	}	
@@ -36,7 +36,7 @@ module NegSem_190301_select_union_statement_002 {
         integer field2
     }
 
-    testcase TC_NegSem_190301_select_union_statement_002() runs on GeneralComp {
+    testcase TC_NegSem_190302_select_union_statement_002() runs on GeneralComp {
         var R v_rec;
         v_rec.field2 := 3;
         select union (v_rec.field1) {
@@ -51,6 +51,6 @@ module NegSem_190301_select_union_statement_002 {
 	}
 
 	control {
-		execute(TC_NegSem_190301_select_union_statement_002());
+		execute(TC_NegSem_190302_select_union_statement_002());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_003.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn
similarity index 89%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_003.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn
index 8d8a8f05c59f154241a8f98bd8bcf000db0e1d66..033cff13c9d13551b598f9a7dc4cfe79b7654ee8 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_003.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn
@@ -18,7 +18,7 @@
 // of an alternative of the union type of the template instance given to the 
 // statement's header.
 
-module NegSem_190301_select_union_statement_003 { 
+module NegSem_190302_select_union_statement_003 { 
 
     type component GeneralComp {
 	}	
@@ -32,7 +32,7 @@ module NegSem_190301_select_union_statement_003 {
         } recOption
     }
 
-    testcase TC_NegSem_190301_select_union_statement_003() runs on GeneralComp {
+    testcase TC_NegSem_190302_select_union_statement_003() runs on GeneralComp {
         var U v_un := { intOption := 5 }
         select union (v_un) {
             case (intOption) {
@@ -48,6 +48,6 @@ module NegSem_190301_select_union_statement_003 {
 	}
 
 	control {
-		execute(TC_NegSem_190301_select_union_statement_003());
+		execute(TC_NegSem_190302_select_union_statement_003());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_004.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn
similarity index 89%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_004.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn
index b99240c37c7b9ffd0e54d5004fab3a187db1629b..a3b073d3fd52f4e2dd180cd68280e4125b0d1d50 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_004.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn
@@ -16,7 +16,7 @@
 // The following requirement is tested:
 // No two cases in a select union statement shall have the same case Identifier.
 
-module NegSem_190301_select_union_statement_004 { 
+module NegSem_190302_select_union_statement_004 { 
 
     type component GeneralComp {
 	}	
@@ -30,7 +30,7 @@ module NegSem_190301_select_union_statement_004 {
         } recOption
     }
 
-    testcase TC_NegSem_190301_select_union_statement_004() runs on GeneralComp {
+    testcase TC_NegSem_190302_select_union_statement_004() runs on GeneralComp {
         var U v_un := { recOption := { field1 := 1, field2 := 2 } }
 
         select union (v_un) {
@@ -47,6 +47,6 @@ module NegSem_190301_select_union_statement_004 {
 	}
 
 	control {
-		execute(TC_NegSem_190301_select_union_statement_004());
+		execute(TC_NegSem_190302_select_union_statement_004());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_005.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn
similarity index 88%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_005.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn
index a4735c9a3321b504a4aa874f1dab9f7e9c6950df..02d815ece7abb569945189c37c0cca915a16b31b 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_005.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn
@@ -16,7 +16,7 @@
 // The following requirement is tested:
 // No two cases in a select union statement shall have the same case Identifier.
 
-module NegSem_190301_select_union_statement_005 { 
+module NegSem_190302_select_union_statement_005 { 
 
     type component GeneralComp {
 	}	
@@ -30,7 +30,7 @@ module NegSem_190301_select_union_statement_005 {
         } recOption
     }
 
-    testcase TC_NegSem_190301_select_union_statement_005() runs on GeneralComp {
+    testcase TC_NegSem_190302_select_union_statement_005() runs on GeneralComp {
         var U v_un := { intOption := 10 }
         select union (v_un) {
             case (intOption, strOption) {
@@ -42,6 +42,6 @@ module NegSem_190301_select_union_statement_005 {
 	}
 
 	control {
-		execute(TC_NegSem_190301_select_union_statement_005());
+		execute(TC_NegSem_190302_select_union_statement_005());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_001.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn
similarity index 88%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_001.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn
index 5adbd1ecc84cd8a0cf15a7617f0f70d239e41e98..9ec571708641e7ce1179d574f90d49b9491991c7 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_001.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn
@@ -16,7 +16,7 @@
 // The following requirement is tested:
 // The statement contains a header part and zero or more branches. 
 
-module Sem_190301_select_union_statement_001 { 
+module Sem_190302_select_union_statement_001 { 
 
     type component GeneralComp {
 	}	
@@ -27,7 +27,7 @@ module Sem_190301_select_union_statement_001 {
         boolean boolOption
     }
 
-    testcase TC_Sem_190301_select_union_statement_001() runs on GeneralComp {
+    testcase TC_Sem_190302_select_union_statement_001() runs on GeneralComp {
         var U v_un := { strOption := "abc" }
         select union (v_un) {
             case (intOption) {
@@ -41,6 +41,6 @@ module Sem_190301_select_union_statement_001 {
 	}
 
 	control {
-		execute(TC_Sem_190301_select_union_statement_001());
+		execute(TC_Sem_190302_select_union_statement_001());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_002.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn
similarity index 89%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_002.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn
index cae4aa7801a734d48c9d6f4ed2a9d362405991f0..05bf92e301b8b16b7cf67497bc91554ab47b87cd 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_002.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn
@@ -18,7 +18,7 @@
 // of the alternatives (fields) of the union type (a list branch) or the else keyword 
 // (an else branch) and a statement block.
 
-module Sem_190301_select_union_statement_002 { 
+module Sem_190302_select_union_statement_002 { 
 
     type component GeneralComp {
 	}	
@@ -30,7 +30,7 @@ module Sem_190301_select_union_statement_002 {
         bitstring bitOption
     }
 
-    testcase TC_Sem_190301_select_union_statement_002() runs on GeneralComp {
+    testcase TC_Sem_190302_select_union_statement_002() runs on GeneralComp {
         var U v_un := { strOption := "abc" }
         select union (v_un) {
             case (intOption, boolOption, strOption) {
@@ -42,6 +42,6 @@ module Sem_190301_select_union_statement_002 {
 	}
 
 	control {
-		execute(TC_Sem_190301_select_union_statement_002());
+		execute(TC_Sem_190302_select_union_statement_002());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_003.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn
similarity index 89%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_003.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn
index 0fc88d1c23989d8d52e81c62ee494d7dd1cde847..f578b962261e49622c0e120acbcc522bddd81c80 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_003.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn
@@ -18,7 +18,7 @@
 // of the alternatives (fields) of the union type (a list branch) or the else keyword 
 // (an else branch) and a statement block.
 
-module Sem_190301_select_union_statement_003 { 
+module Sem_190302_select_union_statement_003 { 
 
     type component GeneralComp {
 	}	
@@ -30,7 +30,7 @@ module Sem_190301_select_union_statement_003 {
         bitstring bitOption
     }
 
-    testcase TC_Sem_190301_select_union_statement_003() runs on GeneralComp {
+    testcase TC_Sem_190302_select_union_statement_003() runs on GeneralComp {
         var U v_un := { strOption := "abc" }
         select union (v_un) {
             case (strOption) {
@@ -44,6 +44,6 @@ module Sem_190301_select_union_statement_003 {
 	}
 
 	control {
-		execute(TC_Sem_190301_select_union_statement_003());
+		execute(TC_Sem_190302_select_union_statement_003());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_004.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn
similarity index 88%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_004.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn
index 65a5300b3a098c5b0e9323cba8c915d281739338..8054aadfd5e3794f082ae9b4893985a3a2b757f8 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_004.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn
@@ -17,7 +17,7 @@
 // If no case exists for the chosen alternative, the StatementBlock of the else 
 // branch, if it is present, is executed.
 
-module Sem_190301_select_union_statement_004 { 
+module Sem_190302_select_union_statement_004 { 
 
     type component GeneralComp {
 	}	
@@ -29,7 +29,7 @@ module Sem_190301_select_union_statement_004 {
         bitstring bitOption
     }
 
-    testcase TC_Sem_190301_select_union_statement_004() runs on GeneralComp {
+    testcase TC_Sem_190302_select_union_statement_004() runs on GeneralComp {
         var U v_un := { strOption := "abc" }
         select union (v_un) {
             case (intOption) {
@@ -43,6 +43,6 @@ module Sem_190301_select_union_statement_004 {
 	}
 
 	control {
-		execute(TC_Sem_190301_select_union_statement_004());
+		execute(TC_Sem_190302_select_union_statement_004());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_005.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn
similarity index 88%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_005.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn
index c3ce1438d7baecbf6ddf20e1d24e3c4e65d1311f..9118f5bd2c00fdfbc4e1999c07238d3119617559 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_005.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn
@@ -17,7 +17,7 @@
 // Otherwise [if no case exists for the chosen alternative and the else branch 
 // is not present], the select union statement has no effect.
 
-module Sem_190301_select_union_statement_005 { 
+module Sem_190302_select_union_statement_005 { 
 
     type component GeneralComp {
 	}	
@@ -29,7 +29,7 @@ module Sem_190301_select_union_statement_005 {
         bitstring bitOption
     }
 
-    testcase TC_Sem_190301_select_union_statement_005() runs on GeneralComp {
+    testcase TC_Sem_190302_select_union_statement_005() runs on GeneralComp {
         var U v_un := { strOption := "abc" }
         select union (v_un) {
             case (intOption) {
@@ -42,6 +42,6 @@ module Sem_190301_select_union_statement_005 {
 	}
 
 	control {
-		execute(TC_Sem_190301_select_union_statement_005());
+		execute(TC_Sem_190302_select_union_statement_005());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_006.ttcn b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn
similarity index 89%
rename from conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_006.ttcn
rename to conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn
index 4b1f30cdd3135eafe804c29fe6fc804d588bdc11..67a347dea60a085b56a6968dbdf24566f391d2c6 100644
--- a/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_006.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn
@@ -17,7 +17,7 @@
 // [The TemplateInstance in the header of the select union statement] shall be 
 // at least partially initialized.
 
-module Sem_190301_select_union_statement_006 { 
+module Sem_190302_select_union_statement_006 { 
 
     type component GeneralComp {
 	}	
@@ -31,7 +31,7 @@ module Sem_190301_select_union_statement_006 {
         } recOption
     }
 
-    testcase TC_Sem_190301_select_union_statement_006() runs on GeneralComp {
+    testcase TC_Sem_190302_select_union_statement_006() runs on GeneralComp {
         var U v_un := { recOption := { field1 := 1, field2 := - } }
         select union (v_un) {
             case (intOption) {
@@ -45,6 +45,6 @@ module Sem_190301_select_union_statement_006 {
 	}
 
 	control {
-		execute(TC_Sem_190301_select_union_statement_006());
+		execute(TC_Sem_190302_select_union_statement_006());
 	}
 }
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn
index 189663e29b4eba96e48e0eab586f4358e6ac0c3e..9abfc98ab510e37980a4126ce7f6844a00727fd8 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_005.ttcn
@@ -53,4 +53,4 @@ module NegSem_220202_ReceiveOperation_005 {
     control {
         execute(TC_NegSem_220202_ReceiveOperation_005(), 5.0);
     }
-}
+} with {encode "RAW"}
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn
index 80aa5d0fbad4d139a23e96b25cc5844f95de4668..6e2a6bcb612234b43b309fe8f54b0b3b911bf47d 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220202_receive_operation/NegSem_220202_ReceiveOperation_023.ttcn
@@ -30,7 +30,7 @@ module NegSem_220202_ReceiveOperation_023 {
     
     type record Wrapped {
         integer num
-    }
+    } with { variant ""}
     
     type port P message {
 		inout R;
@@ -45,11 +45,14 @@ module NegSem_220202_ReceiveOperation_023 {
 
         var Wrapped v_res;
         var R v_rec := { id := 0, payload := bit2oct(encvalue(input)) };
+
+		connect(self:p, self:p);
+
         p.send(v_rec);
         alt {
-            [] p.receive(R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) 			{}
+            [] p.receive(R:{ id := ?, payload := decmatch I:? }) -> value (v_res := @decoded payload) 			{}
             [] p.receive {}
-        }
+        } 
         setverdict(pass);
     }
 
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn
index 42705c9a5a5e1d9a1240fc877d37b7ab3084a979..942a3de18c4a2878c52cf7e05fb65772a918d49f 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_005.ttcn
@@ -51,4 +51,4 @@ module NegSem_220203_TriggerOperation_005 {
     control {
         execute(TC_NegSem_220203_TriggerOperation_005(), 5.0);
     }
-}
+} with {encode "RAW"}
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn
index 0640ac187278a1a45c8681de7e7d9af3efb968bb..ffd4f90389a1845a354bfe839fe43f25fdc87940 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2202_message_based_communication/220203_trigger_operation/NegSem_220203_TriggerOperation_023.ttcn
@@ -30,7 +30,7 @@ module NegSem_220203_TriggerOperation_023 {
     
     type record Wrapped {
         integer num
-    }
+    } with { variant ""};
     
     type port P message {
 		inout R;
@@ -49,7 +49,7 @@ module NegSem_220203_TriggerOperation_023 {
 		connect(self:p, self:p);
         p.send(v_rec);
         alt {
-            [] p.trigger(R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) 			{}
+            [] p.trigger(R:{ id := ?, payload := decmatch I:? }) -> value (v_res := @decoded payload) 			{}
             [else] {}
         }
         setverdict(pass);
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_011.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_011.ttcn
index 24d1db46db03c447a58999efc2258fd0f37e10a3..8c4b55ed9b52e40f5c87119fdf37bdf7ffde8506 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_011.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_011.ttcn
@@ -56,4 +56,4 @@ module NegSem_220302_GetcallOperation_011 {
     control {
         execute(TC_NegSem_220302_GetcallOperation_011(), 5.0);
     }
-}
+} with {encode "RAW"}
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn
index 100d9496a237c9d0f59d0e90795727eec89eb3fc..f07b0637902e9183254de8d698c227d42e83bad2 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn
@@ -35,12 +35,12 @@ module NegSem_220302_GetcallOperation_017 {
     
     type record Wrapped {
         integer num
-    }
+    } with { variant "" }
     
     function f_server() runs on GeneralComp {
         var Wrapped v_res;        
         alt {
-            [] p.getcall(S:{ p_par := decmatch integer:? }) -> param (v_res := @decoded p_par) { 
+            [] p.getcall(S:{ p_par := decmatch I:? }) -> param (v_res := @decoded p_par) { 
                 setverdict (pass);
             }
             [] p.getcall { setverdict(pass); }
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn
index 1fcf5927ba96ae5ffe49e9f116179d967c2eb288..6714a74fb0ccc83d377e4228a525e8c0945fc5b7 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_014.ttcn
@@ -35,7 +35,7 @@ module NegSem_220304_getreply_operation_014 {
     
     type record Wrapped {
         integer num
-    }
+    } with {variant ""}
     
     function f_server() runs on GeneralComp {
         var I v_src := 5;
@@ -52,7 +52,7 @@ module NegSem_220304_getreply_operation_014 {
         v_ptc.start(f_server());
 
         p.call(S:{ p_par := - }) {
-            [] p.getreply(S:{ p_par := decmatch integer:? }) -> param (v_res := @decoded p_par) { 
+            [] p.getreply(S:{ p_par := decmatch I:? }) -> param (v_res := @decoded p_par) { 
                 setverdict (pass);
             }
             [] p.getreply { setverdict(pass); }
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn
index f6a50e76478a1af82cac58ae8c5c66e09361dd36..e69bbb7da9f6521d7825b0943ff0f3f037484fe5 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/NegSem_220304_getreply_operation_020.ttcn
@@ -27,7 +27,7 @@ module NegSem_220304_getreply_operation_020 {
     }
     signature S() return R;
 
-	type integer I with {variant ""};
+	type integer I with {variant "32 bit"};
     
 	type port P procedure {
 		inout S;
@@ -39,7 +39,7 @@ module NegSem_220304_getreply_operation_020 {
     
     type record Wrapped {
         integer num
-    }
+    } with { variant ""}
     
     function f_server() runs on GeneralComp {
         var I v_src := 5;
@@ -54,7 +54,7 @@ module NegSem_220304_getreply_operation_020 {
         connect(self:p, v_ptc:p);
         v_ptc.start(f_server());
         p.call(S:{}) {
-            [] p.getreply(S:{} value R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) { 
+            [] p.getreply(S:{} value R:{ id := ?, payload := decmatch I:? }) -> value (v_res := @decoded payload) { 
                 setverdict (pass);
             }
             [] p.getreply { setverdict(pass); }
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn
index df473b7b13aef02dfa5ad884655dc9a83fadb886..8ce8fa60ef35f364059bb5dab23b1e06c4c7af1a 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220304_getreply_operation/Sem_220304_getreply_operation_014.ttcn
@@ -35,7 +35,7 @@ module Sem_220304_getreply_operation_014 {
     function f_server() runs on GeneralComp {
         var I v_src := 1953719668;
         var universal charstring v_str := encvalue_unichar(v_src, "UTF-16LE");      
-        p.getcall(S: {});
+        p.getcall(S: { p_par := -});
         p.reply(S:{ p_par := v_str });
     }
 	
diff --git a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn
index 417accc5e45e335db94dbb2da0e72b7d1562e122..dc11cd3aa617114e6632ab1418b0b1cbe4106946 100644
--- a/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn
+++ b/conformance_test/core_language_tests/positive_tests/22_communication_operations/2203_procedure_based_communication/220306_catch_operation/NegSem_220306_catch_operation_014.ttcn
@@ -25,7 +25,7 @@ module NegSem_220306_catch_operation_014 {
         integer id,
         bitstring payload
     }
-    signature S() return R;
+    signature S() exception (R);
 
 	type integer I with {variant "32 bit"};
     
@@ -39,13 +39,13 @@ module NegSem_220306_catch_operation_014 {
     
     type record Wrapped {
         integer num
-    }
+    } with { variant ""}
     
     function f_server() runs on GeneralComp {
         var I v_src := 5;
         var R v_rec := { id := 1, payload := encvalue(v_src) };
         p.getcall(S:{});
-        p.reply(S:{} value v_rec);
+        p.raise(S, v_rec);
     }
 	
     testcase TC_NegSem_220306_catch_operation_014() runs on GeneralComp system GeneralComp {
@@ -53,11 +53,12 @@ module NegSem_220306_catch_operation_014 {
         var GeneralComp v_ptc := GeneralComp.create("PTC");
         connect(self:p, v_ptc:p);
         v_ptc.start(f_server());
+
         p.call(S:{}) {
-            [] p.getreply(S:{} value R:{ id := ?, payload := decmatch integer:? }) -> value (v_res := @decoded payload) { 
+            [] p.catch(S, R:{ id := ?, payload := decmatch I:? }) -> value (v_res := @decoded payload) { 
                 setverdict (pass);
             }
-            [] p.getreply { setverdict(pass); }
+            [] p.catch { setverdict(pass); }
         }        
     }
 
diff --git a/conformance_test/core_language_tests/positive_tests/README.txt b/conformance_test/core_language_tests/positive_tests/README.txt
index 6d5c11eb90d4338c6171de052c59d824046e4f92..49636fc93e770535c24dc7d5310001e3b6197666 100644
--- a/conformance_test/core_language_tests/positive_tests/README.txt
+++ b/conformance_test/core_language_tests/positive_tests/README.txt
@@ -1,17 +1,11 @@
 // README to positive conformance tests
 
 How to run:
-A. 
-1. Create bin folder in positive_tests and copy XML_tests.cfg into it
-2. Use the Makefile in positive tests folder
-
-B. (Without the Makefile)
 1. Generate a Makefile from pos_conf_test.tpd in positive_tests folder:
 		ttcn3_makefilegen -f -t pos_conf_tests.tpd
-2. Create bin folder in positive_tests and copy pos_conf_tests.cfg into it
-3. Compile Makefile in bin folder:
+2. Compile Makefile in bin folder:
 		make
-4. Run tests in bin folder:
-		ttcn3_start pos_conf_tests pos_conf_tests.cfg
-5. Clean everything in bin folder:
+3. Run tests in bin folder:
+		ttcn3_start pos_conf_tests
+4. Clean everything in bin folder:
 		make clean
diff --git a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg
index b0a29786f30fd05ece11f91abac4cb99903e4c5a..9171b677af88c5626b04dfa12ba474d0b9d3c770 100644
--- a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg
+++ b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.cfg
@@ -809,6 +809,12 @@ Sem_190301_select_case_statement_001.control
 Sem_190301_select_case_statement_002.control
 Sem_190301_select_case_statement_003.control
 Sem_190301_select_case_statement_004.control
+Sem_190302_select_union_statement_001.control
+Sem_190302_select_union_statement_002.control
+Sem_190302_select_union_statement_003.control
+Sem_190302_select_union_statement_004.control
+Sem_190302_select_union_statement_005.control
+Sem_190302_select_union_statement_006.control
 Sem_1904_for_statement_001.control
 Sem_1904_for_statement_002.control
 Sem_1904_for_statement_003.control
@@ -1283,7 +1289,6 @@ Syn_0802_ModuleDefinitionsPart_001.control
 Syn_0802_ModuleDefinitionsPart_002.control
 Syn_0803_ModuleControlPart_001.control
 Syn_0803_ModuleControlPart_002.control
-Syn_0803_ModuleControlPart_003.control
 Syn_0902_Communication_ports_001.control
 Syn_10_Constants_001.control
 Syn_10_Constants_002.control
diff --git a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd
index 0c068e6ba8148480b68ae9618f5267e80e620267..d6e73eb03c35ca0b14c64a1d1234ad6e1ccb4030 100644
--- a/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd
+++ b/conformance_test/core_language_tests/positive_tests/pos_conf_tests.tpd
@@ -411,7 +411,7 @@
 <!--    <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_002.ttcn"/>-->
 <!--    <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/NegSem_050401_top_level_003.ttcn"/>-->
     <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_001.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_001.ttcn"/>
-    <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn"/>
+<!--    <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_002.ttcn"/>-->
     <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_003.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_003.ttcn"/>
     <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_004.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_004.ttcn"/>
     <FileResource projectRelativePath="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_005.ttcn" relativeURI="05_basic_language_elements/0504_parametrization/050401_formal_parameters/050401_top_level/Sem_050401_top_level_005.ttcn"/>
@@ -1685,7 +1685,7 @@
     <FileResource projectRelativePath="08_modules/0803_module_control_part/Sem_0803_ModuleControlPart_001.ttcn" relativeURI="08_modules/0803_module_control_part/Sem_0803_ModuleControlPart_001.ttcn"/>
     <FileResource projectRelativePath="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_001.ttcn" relativeURI="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_001.ttcn"/>
     <FileResource projectRelativePath="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_002.ttcn" relativeURI="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_002.ttcn"/>
-    <FileResource projectRelativePath="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn" relativeURI="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn"/>
+<!--    <FileResource projectRelativePath="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn" relativeURI="08_modules/0803_module_control_part/Syn_0803_ModuleControlPart_003.ttcn"/>-->
 <!--    <FileResource projectRelativePath="09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_001.ttcn" relativeURI="09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_001.ttcn"/>-->
 <!--    <FileResource projectRelativePath="09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn" relativeURI="09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_002.ttcn"/>-->
 <!--    <FileResource projectRelativePath="09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_003.ttcn" relativeURI="09_test_configurations/0901_communication_ports/NegSem_0901_Communication_ports_003.ttcn"/>-->
@@ -2234,17 +2234,17 @@
     <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_002.ttcn"/>
     <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_003.ttcn"/>
     <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190301_select_case_statement/Sem_190301_select_case_statement_004.ttcn"/>
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_001.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_001.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_002.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_003.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_004.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_005.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190301_select_union_statement_005.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_001.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_001.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_002.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_003.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_004.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_005.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_005.ttcn"/>-->
-<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_006.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190301_select_union_statement_006.ttcn"/>-->
+<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_001.ttcn"/>-->
+<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_002.ttcn"/>-->
+<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_003.ttcn"/>-->
+<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_004.ttcn"/>-->
+<!--    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/NegSem_190302_select_union_statement_005.ttcn"/>-->
+    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_001.ttcn"/>
+    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_002.ttcn"/>
+    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_003.ttcn"/>
+    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_004.ttcn"/>
+    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_005.ttcn"/>
+    <FileResource projectRelativePath="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn" relativeURI="19_basic_program_statements/1903_select_statements/190302_select_union_statement/Sem_190302_select_union_statement_006.ttcn"/>
 <!--    <FileResource projectRelativePath="19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn" relativeURI="19_basic_program_statements/1904_for_statement/NegSem_1904_for_statement_001.ttcn"/>-->
     <FileResource projectRelativePath="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn" relativeURI="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_001.ttcn"/>
     <FileResource projectRelativePath="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn" relativeURI="19_basic_program_statements/1904_for_statement/Sem_1904_for_statement_002.ttcn"/>
@@ -2727,22 +2727,22 @@
 <!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_001.ttcn"/>-->
 <!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_002.ttcn"/>-->
 <!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_003.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_004.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_004.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_005.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_005.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_006.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_006.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_007.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_007.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_008.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_008.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_009.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_009.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_010.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_010.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_011.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_011.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_012.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_012.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_013.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_013.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_014.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_014.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_015.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_015.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_016.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_016.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_017.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_getcall_operation_017.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_001.ttcn"/>-->
-<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_getcall_operation_002.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_004.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_004.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_005.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_005.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_006.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_006.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_007.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_007.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_008.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_008.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_009.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_009.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_010.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_010.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_011.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_011.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_012.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_012.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_013.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_013.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_014.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_014.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_015.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_015.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_016.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_016.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSem_220302_GetcallOperation_017.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_GetcallOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_GetcallOperation_001.ttcn"/>-->
+<!--    <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_GetcallOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/NegSyn_220302_GetcallOperation_002.ttcn"/>-->
     <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_001.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_001.ttcn"/>
     <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_002.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_002.ttcn"/>
     <FileResource projectRelativePath="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_003.ttcn" relativeURI="22_communication_operations/2203_procedure_based_communication/220302_getcall_operation/Sem_220302_GetcallOperation_003.ttcn"/>
diff --git a/core/Addfunc.cc b/core/Addfunc.cc
index b428d4fbfa6ca2170a275c0f49bf5df628313c1a..457f79f04c0ca0edfa36f64ac7d67744295f8da2 100644
--- a/core/Addfunc.cc
+++ b/core/Addfunc.cc
@@ -33,6 +33,7 @@
 #include "Logger.hh"
 #include "Snapshot.hh"
 #include "TitanLoggerApi.hh"
+#include "../common/UnicharPattern.hh"
 
 #include <openssl/bn.h>
 
@@ -1355,7 +1356,7 @@ double str2float(const CHARSTRING& value)
 // C.33 - regexp
 
 CHARSTRING regexp(const CHARSTRING& instr, const CHARSTRING& expression,
-  int groupno)
+  int groupno, boolean nocase)
 {
   instr.must_bound("The first argument (instr) of function regexp() is an "
     "unbound charstring value.");
@@ -1402,13 +1403,14 @@ CHARSTRING regexp(const CHARSTRING& instr, const CHARSTRING& expression,
   if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_UNQUALIFIED)) {
     TTCN_Logger::begin_event(TTCN_Logger::DEBUG_UNQUALIFIED);
     TTCN_Logger::log_event_str("regexp(): POSIX ERE equivalent of ");
-    CHARSTRING_template(STRING_PATTERN, expression).log();
+    CHARSTRING_template(STRING_PATTERN, expression, nocase).log();
     TTCN_Logger::log_event_str(" is: ");
     CHARSTRING(posix_str).log();
     TTCN_Logger::end_event();
   }
   regex_t posix_regexp;
-  int ret_val = regcomp(&posix_regexp, posix_str, REG_EXTENDED);
+  int ret_val = regcomp(&posix_regexp, posix_str, REG_EXTENDED |
+    (nocase ? REG_ICASE : 0));
   Free(posix_str);
   if (ret_val != 0) {
     char msg[ERRMSG_BUFSIZE];
@@ -1464,42 +1466,17 @@ CHARSTRING regexp(const CHARSTRING& instr, const CHARSTRING& expression,
 }
 
 CHARSTRING regexp(const CHARSTRING& instr, const CHARSTRING& expression,
-  const INTEGER& groupno)
+  const INTEGER& groupno, boolean nocase)
 {
   groupno.must_bound("The third argument (groupno) of function regexp() is an "
     "unbound integer value.");
-  return regexp(instr, expression, (int)groupno);
-}
-
-/* Needed by regexp() */
-UNIVERSAL_CHARSTRING convert_from_pattern_form(char* str, int num) {
-  if (num % 8 != 0)
-    TTCN_error("Internal error: Cannot convert string from pattern form.");
-
-  unsigned char c1, c2;
-  universal_char * const res = new universal_char[num/8];
-  unsigned char* ptr = (unsigned char*)res;
-  int index = 0;
-  while (index < num) {
-    for (int j = 0; j < 4; j++) {
-      c1 = str[index++];
-      c2 = str[index++];
-      if (c1 >= 'A' && c1 <= 'P' && c2 >= 'A' && c2 <= 'P') {
-        *(ptr++) = ((c1 - 'A') << 4) | (c2 - 'A');
-      } else
-        TTCN_error("Internal error: Cannot convert string containing illegal "
-          "character.");
-    }
-  }
-  UNIVERSAL_CHARSTRING retval(num / 8, res);
-  delete[] res;
-  return retval;
+  return regexp(instr, expression, (int)groupno, nocase);
 }
 
 UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
   const UNIVERSAL_CHARSTRING* expression_val,
   const UNIVERSAL_CHARSTRING_template* expression_tmpl,
-  int groupno)
+  int groupno, boolean nocase)
 {
   if ( (expression_val && expression_tmpl) ||
     (!expression_val && !expression_tmpl) )
@@ -1524,7 +1501,7 @@ UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
   else
     expression_str = expression_tmpl->get_single_value();
   char *posix_str = TTCN_pattern_to_regexp_uni((const char*)expression_str,
-    &user_groups);
+    nocase, &user_groups);
   if (user_groups == 0) {
     Free(user_groups);
     Free(posix_str);
@@ -1540,12 +1517,12 @@ UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
   if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_UNQUALIFIED)) {
     TTCN_Logger::begin_event(TTCN_Logger::DEBUG_UNQUALIFIED);
     TTCN_Logger::log_event_str("regexp(): POSIX ERE equivalent of ");
-    CHARSTRING_template(STRING_PATTERN, expression_str).log();
+    CHARSTRING_template(STRING_PATTERN, expression_str, nocase).log();
     TTCN_Logger::log_event_str(" is: ");
     CHARSTRING(posix_str).log();
     TTCN_Logger::end_event();
   }
-
+  
   regex_t posix_regexp;
   int ret_val = regcomp(&posix_regexp, posix_str, REG_EXTENDED);
   Free(posix_str);
@@ -1588,8 +1565,13 @@ UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
 
   char* instr_conv = instr.convert_to_regexp_form();
   int instr_len = instr.lengthof() * 8;
+  
+  if (nocase) {
+    unichar_pattern.convert_regex_str_to_lowercase(instr_conv);
+  }
 
   ret_val = regexec(&posix_regexp, instr_conv, nmatch + 1, pmatch, 0);
+  Free(instr_conv);
   if (ret_val == 0) {
     int begin_index = pmatch[nmatch].rm_so, end_index = pmatch[nmatch].rm_eo;
     Free(pmatch);
@@ -1600,12 +1582,8 @@ UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
     if (begin_index > end_index) TTCN_error("Internal error: The start index "
       "of the substring (%d) to be returned in function regexp() is greater "
       "than the end index (%d).", begin_index, end_index);
-    UNIVERSAL_CHARSTRING res = convert_from_pattern_form(
-      instr_conv + begin_index, end_index - begin_index);
-    Free(instr_conv);
-    return res;
+    return instr.extract_matched_section(begin_index, end_index);
   } else {
-    Free(instr_conv);
     Free(pmatch);
     if (ret_val != REG_NOMATCH) {
       char msg[ERRMSG_BUFSIZE];
@@ -1619,65 +1597,66 @@ UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
 }
 
 UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
-  const UNIVERSAL_CHARSTRING& expression, int groupno)
+  const UNIVERSAL_CHARSTRING& expression, int groupno, boolean nocase)
 {
-  return regexp(instr, &expression, NULL, groupno);
+  return regexp(instr, &expression, NULL, groupno, nocase);
 }
 
 UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
-  const UNIVERSAL_CHARSTRING& expression, const INTEGER& groupno)
+  const UNIVERSAL_CHARSTRING& expression, const INTEGER& groupno, boolean nocase)
 {
   groupno.must_bound("The third argument (groupno) of function regexp() is an "
     "unbound integer value.");
-  return regexp(instr, expression, (int)groupno);
+  return regexp(instr, expression, (int)groupno, nocase);
 }
 
 // regexp() on templates
 
 CHARSTRING regexp(const CHARSTRING_template& instr,
-  const CHARSTRING_template& expression, int groupno)
+  const CHARSTRING_template& expression, int groupno, boolean nocase)
 {
   if (!instr.is_value())
     TTCN_error("The first argument of function regexp() is a "
       "template with non-specific value.");
   if (expression.is_value())
-    return regexp(instr.valueof(), expression.valueof(), groupno);
+    return regexp(instr.valueof(), expression.valueof(), groupno, nocase);
   // pattern matching to specific value
   if (expression.get_selection()==STRING_PATTERN)
-    return regexp(instr.valueof(), expression.get_single_value(), groupno);
+    return regexp(instr.valueof(), expression.get_single_value(), groupno, nocase);
   TTCN_error("The second argument of function regexp() should be "
     "specific value or pattern matching template.");
 }
 
 CHARSTRING regexp(const CHARSTRING_template& instr,
-  const CHARSTRING_template& expression, const INTEGER& groupno)
+  const CHARSTRING_template& expression, const INTEGER& groupno, boolean nocase)
 {
   groupno.must_bound("The third argument (groupno) of function regexp() is an "
     "unbound integer value.");
-  return regexp(instr, expression, (int)groupno);
+  return regexp(instr, expression, (int)groupno, nocase);
 }
 
 UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING_template& instr,
-  const UNIVERSAL_CHARSTRING_template& expression, int groupno)
+  const UNIVERSAL_CHARSTRING_template& expression, int groupno, boolean nocase)
 {
   if (!instr.is_value())
     TTCN_error("The first argument of function regexp() is a "
       "template with non-specific value.");
   if (expression.is_value())
-    return regexp(instr.valueof(), expression.valueof(), groupno);
+    return regexp(instr.valueof(), expression.valueof(), groupno, nocase);
   // pattern matching to specific value
   if (expression.get_selection()==STRING_PATTERN)
-    return regexp(instr.valueof(), NULL, &expression, groupno);
+    return regexp(instr.valueof(), NULL, &expression, groupno, nocase);
   TTCN_error("The second argument of function regexp() should be "
     "specific value or pattern matching template.");
 }
 
 UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING_template& instr,
-  const UNIVERSAL_CHARSTRING_template& expression, const INTEGER& groupno)
+  const UNIVERSAL_CHARSTRING_template& expression, const INTEGER& groupno,
+  boolean nocase)
 {
   groupno.must_bound("The third argument (groupno) of function regexp() is an "
     "unbound integer value.");
-  return regexp(instr, expression, (int)groupno);
+  return regexp(instr, expression, (int)groupno, nocase);
 }
 
 // C.34 - substr
diff --git a/core/Addfunc.hh b/core/Addfunc.hh
index c2a7dc073eaca7ea0fa5c27792bf6808bd294c94..e10d34ba303904e70b1e0863e511a66d4f2bcbbb 100644
--- a/core/Addfunc.hh
+++ b/core/Addfunc.hh
@@ -173,26 +173,30 @@ extern double str2float(const CHARSTRING& value);
 
 // C.33 - regexp
 extern CHARSTRING regexp(const CHARSTRING& instr, const CHARSTRING& expression,
-    int groupno);
+    int groupno, boolean nocase);
 extern CHARSTRING regexp(const CHARSTRING& instr, const CHARSTRING& expression,
-    const INTEGER& groupno);
+    const INTEGER& groupno, boolean nocase);
 extern UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
     const UNIVERSAL_CHARSTRING* expression_val,
     const UNIVERSAL_CHARSTRING_template* expression_tmpl,
-    int groupno);
+    int groupno, boolean nocase);
 extern UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
-    const UNIVERSAL_CHARSTRING& expression, int groupno);
+    const UNIVERSAL_CHARSTRING& expression, int groupno, boolean nocase);
 extern UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
-    const UNIVERSAL_CHARSTRING& expression, const INTEGER& groupno);
+    const UNIVERSAL_CHARSTRING& expression, const INTEGER& groupno,
+    boolean nocase);
 // regexp on templates
 extern CHARSTRING regexp(const CHARSTRING_template& instr,
-    const CHARSTRING_template& expression, int groupno);
+    const CHARSTRING_template& expression, int groupno, boolean nocase);
 extern CHARSTRING regexp(const CHARSTRING_template& instr,
-    const CHARSTRING_template& expression, const INTEGER& groupno);
+    const CHARSTRING_template& expression, const INTEGER& groupno,
+    boolean nocase);
 extern UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING_template& instr,
-    const UNIVERSAL_CHARSTRING_template& expression, int groupno);
+    const UNIVERSAL_CHARSTRING_template& expression, int groupno,
+    boolean nocase);
 extern UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING_template& instr,
-    const UNIVERSAL_CHARSTRING_template& expression, const INTEGER& groupno);
+    const UNIVERSAL_CHARSTRING_template& expression, const INTEGER& groupno,
+    boolean nocase);
 
 // C.34 - substr
 extern void check_substr_arguments(int value_length, int index,
diff --git a/core/Charstring.cc b/core/Charstring.cc
index 286b4f246ece70cf2c92d03ab9eaa0b107d95ec4..49924ddab0ecd45c3fbf3b7c180c8043cc9356f2 100644
--- a/core/Charstring.cc
+++ b/core/Charstring.cc
@@ -644,7 +644,8 @@ void CHARSTRING::log() const
   }
 }
 
-boolean CHARSTRING::set_param_internal(Module_Param& param, boolean allow_pattern) {
+boolean CHARSTRING::set_param_internal(Module_Param& param, boolean allow_pattern,
+                                       boolean* is_nocase_pattern) {
   boolean is_pattern = FALSE;
   param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "charstring value");
   Module_Param_Ptr mp = &param;
@@ -697,7 +698,8 @@ boolean CHARSTRING::set_param_internal(Module_Param& param, boolean allow_patter
     if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) {
       // only allow string patterns for the first operand
       CHARSTRING operand1, operand2;
-      is_pattern = operand1.set_param_internal(*mp->get_operand1(), allow_pattern);
+      is_pattern = operand1.set_param_internal(*mp->get_operand1(), allow_pattern,
+        is_nocase_pattern);
       operand2.set_param(*mp->get_operand2());
       if (param.get_operation_type() == Module_Param::OT_CONCAT) {
         *this = *this + operand1 + operand2;
@@ -714,6 +716,9 @@ boolean CHARSTRING::set_param_internal(Module_Param& param, boolean allow_patter
     if (allow_pattern) {
       *this = CHARSTRING(mp->get_pattern());
       is_pattern = TRUE;
+      if (is_nocase_pattern != NULL) {
+        *is_nocase_pattern = mp->get_nocase();
+      }
       break;
     }
     // else fall through
@@ -2031,6 +2036,7 @@ void CHARSTRING_template::copy_template(const CHARSTRING_template& other_value)
   switch (other_value.template_selection) {
   case STRING_PATTERN:
     pattern_value.regexp_init = FALSE;
+    pattern_value.nocase = other_value.pattern_value.nocase;
     /* no break */
   case SPECIFIC_VALUE:
     single_value = other_value.single_value;
@@ -2101,13 +2107,15 @@ CHARSTRING_template::CHARSTRING_template(const OPTIONAL<CHARSTRING>& other_value
 }
 
 CHARSTRING_template::CHARSTRING_template(template_sel p_sel,
-                                         const CHARSTRING& p_str)
+                                         const CHARSTRING& p_str,
+                                         boolean p_nocase)
   : Restricted_Length_Template(STRING_PATTERN), single_value(p_str)
 {
   if(p_sel!=STRING_PATTERN)
     TTCN_error("Internal error: Initializing a charstring pattern template "
                "with invalid selection.");
   pattern_value.regexp_init=FALSE;
+  pattern_value.nocase = p_nocase;
 }
 
 CHARSTRING_template::CHARSTRING_template(const CHARSTRING_template& other_value)
@@ -2233,8 +2241,11 @@ boolean CHARSTRING_template::match(const CHARSTRING& other_value,
       TTCN_Logger::log_event(" is: \"%s\"", posix_str);
       //TTCN_Logger::end_event();
       */
-      int ret_val=regcomp(&pattern_value.posix_regexp, posix_str,
-                      REG_EXTENDED|REG_NOSUB);
+      int flags = REG_EXTENDED|REG_NOSUB;
+      if (pattern_value.nocase) {
+        flags |= REG_ICASE;
+      }
+      int ret_val=regcomp(&pattern_value.posix_regexp, posix_str, flags);
       Free(posix_str);
       if(ret_val!=0) {
         /* regexp error */
@@ -2463,9 +2474,14 @@ const TTCN_Typedescriptor_t* CHARSTRING_template::get_decmatch_type_descr() cons
   return dec_match->instance->get_type_descr();
 }
 
-void CHARSTRING_template::log_pattern(int n_chars, const char *chars_ptr)
+void CHARSTRING_template::log_pattern(int n_chars, const char *chars_ptr,
+                                      boolean nocase)
 {
-  TTCN_Logger::log_event_str("pattern \"");
+  TTCN_Logger::log_event_str("pattern ");
+  if (nocase) {
+    TTCN_Logger::log_event_str("@nocase ");
+  }
+  TTCN_Logger::log_event_str("\"");
   enum { INITIAL, BACKSLASH, BACKSLASH_Q, QUADRUPLE, HASHMARK, REPETITIONS }
     state = INITIAL;
   for (int i = 0; i < n_chars; i++) {
@@ -2590,7 +2606,8 @@ void CHARSTRING_template::log() const
 {
   switch (template_selection) {
   case STRING_PATTERN:
-    log_pattern(single_value.lengthof(), (const char*)single_value);
+    log_pattern(single_value.lengthof(), (const char*)single_value,
+      pattern_value.nocase);
     break;
   case SPECIFIC_VALUE:
     single_value.log();
@@ -2698,19 +2715,23 @@ void CHARSTRING_template::set_param(Module_Param& param) {
     clean_up();
     single_value = CHARSTRING(mp->get_pattern());
     pattern_value.regexp_init = FALSE;
+    pattern_value.nocase = mp->get_nocase();
     set_selection(STRING_PATTERN);
     break;
   case Module_Param::MP_Expression:
     if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) {
       // only allow string patterns for the first operand
       CHARSTRING operand1, operand2, result;
-      boolean is_pattern = operand1.set_param_internal(*mp->get_operand1(), TRUE);
+      boolean nocase;
+      boolean is_pattern = operand1.set_param_internal(*mp->get_operand1(),
+        TRUE, &nocase);
       operand2.set_param(*mp->get_operand2());
       result = operand1 + operand2;
       if (is_pattern) {
         clean_up();
         single_value = result;
         pattern_value.regexp_init = FALSE;
+        pattern_value.nocase = nocase;
         set_selection(STRING_PATTERN);
       }
       else {
@@ -2770,7 +2791,7 @@ Module_Param* CHARSTRING_template::get_param(Module_Param_Name& param_name) cons
     mp = new Module_Param_StringRange(lower_bound, upper_bound);
     break; }
   case STRING_PATTERN:
-    mp = new Module_Param_Pattern(mcopystr(single_value));
+    mp = new Module_Param_Pattern(mcopystr(single_value), pattern_value.nocase);
     break;
   case DECODE_MATCH:
     mp->error("Referencing a decoded content matching template is not supported.");
@@ -2793,8 +2814,10 @@ void CHARSTRING_template::encode_text(Text_Buf& text_buf) const
   case ANY_VALUE:
   case ANY_OR_OMIT:
     break;
-  case SPECIFIC_VALUE:
   case STRING_PATTERN:
+    text_buf.push_int(pattern_value.nocase);
+    // no break;
+  case SPECIFIC_VALUE:
     single_value.encode_text(text_buf);
     break;
   case VALUE_LIST:
@@ -2828,6 +2851,7 @@ void CHARSTRING_template::decode_text(Text_Buf& text_buf)
     break;
   case STRING_PATTERN:
     pattern_value.regexp_init=FALSE;
+    pattern_value.nocase = text_buf.pull_int().get_val();
     /* no break */
   case SPECIFIC_VALUE:
     single_value.decode_text(text_buf);
diff --git a/core/Charstring.hh b/core/Charstring.hh
index a74ae9ea75484d583a788dc1a380b7cec31f7237..90cf64e215d284c1af05c445e2ae743330b48cb5 100644
--- a/core/Charstring.hh
+++ b/core/Charstring.hh
@@ -106,7 +106,8 @@ class CHARSTRING : public Base_Type {
     * the second parameter is set (needed by CHARSTRING_template to concatenate
     * string patterns). 
     * @return TRUE, if the module parameter was a string pattern, otherwise FALSE */
-  boolean set_param_internal(Module_Param& param, boolean allow_pattern);
+  boolean set_param_internal(Module_Param& param, boolean allow_pattern,
+    boolean* is_nocase_pattern = NULL);
   
 public:
   /** Construct an unbound CHARSTRING object */
@@ -368,12 +369,13 @@ private:
     mutable struct {
       boolean regexp_init;
       regex_t posix_regexp;
+      boolean nocase;
     } pattern_value;
     unichar_decmatch_struct* dec_match;
   };
 
   void copy_template(const CHARSTRING_template& other_value);
-  static void log_pattern(int n_chars, const char *chars_ptr);
+  static void log_pattern(int n_chars, const char *chars_ptr, boolean nocase);
 
 public:
   CHARSTRING_template();
@@ -400,7 +402,7 @@ public:
    * @param p_sel must be STRING_PATTERN or else Dynamic Testcase Error
    * @param p_str pattern string
    */
-  CHARSTRING_template(template_sel p_sel, const CHARSTRING& p_str);
+  CHARSTRING_template(template_sel p_sel, const CHARSTRING& p_str, boolean p_nocase);
   /// Copy constructor
   CHARSTRING_template(const CHARSTRING_template& other_value);
 
diff --git a/core/Makefile b/core/Makefile
index 138423bf5aba8c94e2c29dc68690e3c07781372c..5466bf80693cec3774f61c76667cc4d10e7fcdec 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -160,7 +160,7 @@ PROFMERGE_OBJECTS := ProfMerge_main.o ProfilerTools.profmerge.o \
 COMMON_OBJECTS := $(addprefix ../common/, memory.o pattern_la.o pattern_p.o \
 	            config_preproc.o config_preproc_la.o config_preproc_p.tab.o \
 	            path.o pattern_uni.o Quadruple.o NetworkHandler.o Path2.o \
-	            ModuleVersion.o JSON_Tokenizer.o)
+	            ModuleVersion.o JSON_Tokenizer.o UnicharPattern.o)
 
 ifeq ($(DEBUG), yes)
   COMMON_OBJECTS += ../common/new.o
diff --git a/core/Param_Types.cc b/core/Param_Types.cc
index 8926f32baa14a1d6e61edee7c71fb33b23f0aa45..0b8a2bfc6b6fc4c2aa9f2e3f5b2528536d0313ca 100644
--- a/core/Param_Types.cc
+++ b/core/Param_Types.cc
@@ -245,6 +245,11 @@ char* Module_Param::get_pattern() const {
   return NULL;
 }
 
+boolean Module_Param::get_nocase() const {
+  TTCN_error("Internal error: Module_Param::get_nocase()");
+  return FALSE;
+}
+
 verdicttype Module_Param::get_verdict() const {
   TTCN_error("Internal error: Module_Param::get_verdict()");
   return NONE;
@@ -542,7 +547,11 @@ void Module_Param_StringRange::log_value() const {
 }
 
 void Module_Param_Pattern::log_value() const {
-  TTCN_Logger::log_event_str("pattern \"");
+  TTCN_Logger::log_event_str("pattern ");
+  if (nocase) {
+    TTCN_Logger::log_event_str("@nocase ");
+  }
+  TTCN_Logger::log_event_str("\"");
   TTCN_Logger::log_event_str(pattern);
   TTCN_Logger::log_event_str("\"");
 }
diff --git a/core/Param_Types.hh b/core/Param_Types.hh
index d85ab420294881afc6d7afdc496421183f860cac..b677c3fe257b8527ecb6db45a91e134edf2fa675 100644
--- a/core/Param_Types.hh
+++ b/core/Param_Types.hh
@@ -281,6 +281,7 @@ public:
   virtual int_val_t* get_integer() const;
   virtual double get_float() const;
   virtual char* get_pattern() const;
+  virtual boolean get_nocase() const;
   virtual verdicttype get_verdict() const;
   virtual char* get_enumerated() const;
   virtual Module_Param_Ptr get_referenced_param() const;
@@ -573,11 +574,13 @@ public:
 
 class Module_Param_Pattern : public Module_Param {
   char* pattern;
+  boolean nocase;
 public:
   type_t get_type() const { return MP_Pattern; }
-  Module_Param_Pattern(char* p_p): pattern(p_p) {}
+  Module_Param_Pattern(char* p_p, boolean p_nc): pattern(p_p), nocase(p_nc) {}
   ~Module_Param_Pattern() { Free(pattern); }
   char* get_pattern() const { return pattern; }
+  boolean get_nocase() const { return nocase; }
   const char* get_type_str() const { return "pattern"; }
   void log_value() const;
 };
diff --git a/core/Universal_charstring.cc b/core/Universal_charstring.cc
index c8668206e341921a740566a037d63d247b0e18e8..8f25162a8755bc9d63cf23d38a312c5d55efd57a 100644
--- a/core/Universal_charstring.cc
+++ b/core/Universal_charstring.cc
@@ -27,6 +27,7 @@
 #include "../common/memory.h"
 #include "../common/pattern.hh"
 #include "../common/Quadruple.hh"
+#include "../common/UnicharPattern.hh"
 #include "Integer.hh"
 #include "Octetstring.hh"
 #include "String_struct.hh"
@@ -817,6 +818,18 @@ static inline boolean is_printable(const universal_char& uchar)
     TTCN_Logger::is_printable(uchar.uc_cell);
 }
 
+UNIVERSAL_CHARSTRING UNIVERSAL_CHARSTRING::extract_matched_section(int start, int end) const
+{
+  // the indexes refer to the string's regexp form, which contains 8 characters
+  // for every universal character in the original string
+  start /= 8;
+  end /= 8;
+  if (charstring) {
+    return UNIVERSAL_CHARSTRING(end - start, cstr.val_ptr->chars_ptr + start);
+  }
+  return UNIVERSAL_CHARSTRING(end - start, val_ptr->uchars_ptr + start);
+}
+
 CHARSTRING UNIVERSAL_CHARSTRING::get_stringRepr_for_pattern() const {
   must_bound("Performing pattern conversion operation on an unbound"
     "universal charstring value.");
@@ -949,7 +962,8 @@ UNIVERSAL_CHARSTRING UNIVERSAL_CHARSTRING::from_UTF8_buffer(TTCN_Buffer& p_buff)
   }
 }
 
-boolean UNIVERSAL_CHARSTRING::set_param_internal(Module_Param& param, boolean allow_pattern) {
+boolean UNIVERSAL_CHARSTRING::set_param_internal(Module_Param& param, boolean allow_pattern,
+                                                 boolean* is_nocase_pattern) {
   boolean is_pattern = FALSE;
   param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "universal charstring value");
   Module_Param_Ptr mp = &param;
@@ -994,7 +1008,8 @@ boolean UNIVERSAL_CHARSTRING::set_param_internal(Module_Param& param, boolean al
   case Module_Param::MP_Expression:
     if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) {
       UNIVERSAL_CHARSTRING operand1, operand2;
-      is_pattern = operand1.set_param_internal(*mp->get_operand1(), allow_pattern);
+      is_pattern = operand1.set_param_internal(*mp->get_operand1(), allow_pattern,
+        is_nocase_pattern);
       operand2.set_param(*mp->get_operand2());
       if (param.get_operation_type() == Module_Param::OT_CONCAT) {
         *this = *this + operand1 + operand2;
@@ -1011,6 +1026,9 @@ boolean UNIVERSAL_CHARSTRING::set_param_internal(Module_Param& param, boolean al
     if (allow_pattern) {
       *this = CHARSTRING(mp->get_pattern());
       is_pattern = TRUE;
+      if (is_nocase_pattern != NULL) {
+        *is_nocase_pattern = mp->get_nocase();
+      }
       break;
     }
     // else fall through
@@ -3664,6 +3682,7 @@ void UNIVERSAL_CHARSTRING_template::copy_template
   case STRING_PATTERN:
     pattern_string = new CHARSTRING(other_value.single_value);
     pattern_value.regexp_init=FALSE;
+    pattern_value.nocase = other_value.pattern_value.nocase;
     break;
   case DECODE_MATCH:
     dec_match = other_value.dec_match;
@@ -3706,6 +3725,7 @@ void UNIVERSAL_CHARSTRING_template::copy_template
   case STRING_PATTERN:
     pattern_string = new CHARSTRING(*(other_value.pattern_string));
     pattern_value.regexp_init=FALSE;
+    pattern_value.nocase = other_value.pattern_value.nocase;
     break;
   case DECODE_MATCH:
     dec_match = other_value.dec_match;
@@ -3802,7 +3822,7 @@ UNIVERSAL_CHARSTRING_template::UNIVERSAL_CHARSTRING_template
 }
 
 UNIVERSAL_CHARSTRING_template::UNIVERSAL_CHARSTRING_template
-  (template_sel p_sel, const CHARSTRING& p_str)
+  (template_sel p_sel, const CHARSTRING& p_str, boolean p_nocase)
 : Restricted_Length_Template(STRING_PATTERN)
 {
   if(p_sel!=STRING_PATTERN)
@@ -3810,6 +3830,7 @@ UNIVERSAL_CHARSTRING_template::UNIVERSAL_CHARSTRING_template
       "pattern template with invalid selection.");
   pattern_string = new CHARSTRING(p_str);
   pattern_value.regexp_init=FALSE;
+  pattern_value.nocase = p_nocase;
 }
 
 UNIVERSAL_CHARSTRING_template::~UNIVERSAL_CHARSTRING_template()
@@ -3993,7 +4014,8 @@ boolean UNIVERSAL_CHARSTRING_template::match
   case STRING_PATTERN: {
     if (!pattern_value.regexp_init) {
       char *posix_str =
-        TTCN_pattern_to_regexp_uni((const char*)(*pattern_string));
+        TTCN_pattern_to_regexp_uni((const char*)(*pattern_string),
+          pattern_value.nocase);
       if(posix_str==NULL) {
         TTCN_error("Cannot convert pattern \"%s\" to POSIX-equivalent.",
           (const char*)(*pattern_string));
@@ -4011,6 +4033,9 @@ boolean UNIVERSAL_CHARSTRING_template::match
       pattern_value.regexp_init=TRUE;
     }
     char* other_value_converted = other_value.convert_to_regexp_form();
+    if (pattern_value.nocase) {
+      unichar_pattern.convert_regex_str_to_lowercase(other_value_converted);
+    }
     int ret_val=regexec(&pattern_value.posix_regexp, other_value_converted, 0,
       NULL, 0);
     Free(other_value_converted);
@@ -4237,7 +4262,7 @@ void UNIVERSAL_CHARSTRING_template::log() const
   switch (template_selection) {
   case STRING_PATTERN:
     CHARSTRING_template::log_pattern(pattern_string->lengthof(),
-      (const char*)*pattern_string);
+      (const char*)*pattern_string, pattern_value.nocase);
     break;
   case SPECIFIC_VALUE:
     single_value.log();
@@ -4382,12 +4407,15 @@ void UNIVERSAL_CHARSTRING_template::set_param(Module_Param& param) {
     clean_up();
     pattern_string = new CHARSTRING(mp->get_pattern());
     pattern_value.regexp_init = FALSE;
+    pattern_value.nocase = mp->get_nocase();
     set_selection(STRING_PATTERN);
     break;
   case Module_Param::MP_Expression:
     if (mp->get_expr_type() == Module_Param::EXPR_CONCATENATE) {
       UNIVERSAL_CHARSTRING operand1, operand2, result;
-      boolean is_pattern = operand1.set_param_internal(*mp->get_operand1(), TRUE);
+      boolean nocase;
+      boolean is_pattern = operand1.set_param_internal(*mp->get_operand1(),
+        TRUE, &nocase);
       operand2.set_param(*mp->get_operand2());
       result = operand1 + operand2;
       if (is_pattern) {
@@ -4399,6 +4427,7 @@ void UNIVERSAL_CHARSTRING_template::set_param(Module_Param& param) {
           pattern_string = new CHARSTRING(result.get_stringRepr_for_pattern());
         }
         pattern_value.regexp_init = FALSE;
+        pattern_value.nocase = nocase;
         set_selection(STRING_PATTERN);
       }
       else {
@@ -4456,7 +4485,7 @@ Module_Param* UNIVERSAL_CHARSTRING_template::get_param(Module_Param_Name& param_
     mp = new Module_Param_StringRange(value_range.min_value, value_range.max_value);
     break;
   case STRING_PATTERN:
-    mp = new Module_Param_Pattern(mcopystr(*pattern_string));
+    mp = new Module_Param_Pattern(mcopystr(*pattern_string), pattern_value.nocase);
     break;
   case DECODE_MATCH:
     mp->error("Referencing a decoded content matching template is not supported.");
@@ -4504,6 +4533,10 @@ void UNIVERSAL_CHARSTRING_template::encode_text(Text_Buf& text_buf) const
     buf[7] = value_range.max_value.uc_cell;
     text_buf.push_raw(8, buf);
     break; }
+  case STRING_PATTERN:
+    text_buf.push_int(pattern_value.nocase);
+    pattern_string->encode_text(text_buf);
+    break;
   default:
     TTCN_error("Text encoder: Encoding an uninitialized/unsupported universal "
       "charstring template.");
@@ -4547,6 +4580,12 @@ void UNIVERSAL_CHARSTRING_template::decode_text(Text_Buf& text_buf)
     value_range.min_is_set = TRUE;
     value_range.max_is_set = TRUE;
     break; }
+  case STRING_PATTERN:
+    pattern_value.regexp_init = FALSE;
+    pattern_value.nocase = text_buf.pull_int().get_val();
+    pattern_string = new CHARSTRING;
+    pattern_string->decode_text(text_buf);
+    break;
   default:
     TTCN_error("Text decoder: An unknown/unsupported selection was "
       "received for a universal charstring template.");
diff --git a/core/Universal_charstring.hh b/core/Universal_charstring.hh
index 8a48df6b45a64c64cadf4cce4d97ac17e766f46c..fc1d56882f55a172183295a011c2617ef15c1a25 100644
--- a/core/Universal_charstring.hh
+++ b/core/Universal_charstring.hh
@@ -80,7 +80,7 @@ class UNIVERSAL_CHARSTRING : public Base_Type {
   friend UNIVERSAL_CHARSTRING regexp(const UNIVERSAL_CHARSTRING& instr,
     const UNIVERSAL_CHARSTRING* expression_val,
     const UNIVERSAL_CHARSTRING_template* expression_tmpl,
-    int groupno);
+    int groupno, boolean nocase);
 
   friend boolean operator==(const universal_char& uchar_value,
     const UNIVERSAL_CHARSTRING& other_value);
@@ -113,7 +113,8 @@ class UNIVERSAL_CHARSTRING : public Base_Type {
     * the second parameter is set (needed by UNIVERSAL_CHARSTRING_template to
     * concatenate string patterns). 
     * @return TRUE, if the module parameter was a string pattern, otherwise FALSE */
-  boolean set_param_internal(Module_Param& param, boolean allow_pattern);
+  boolean set_param_internal(Module_Param& param, boolean allow_pattern,
+    boolean* is_nocase_pattern = NULL);
 
 public:
 
@@ -266,6 +267,8 @@ public:
 private:
   // convert this string to character string for pattern matching: ([A-P]{8})*
   char* convert_to_regexp_form() const;
+  
+  UNIVERSAL_CHARSTRING extract_matched_section(int start, int end) const;
 
   /* returns the CHARSTRING representation of this. Quadruples are converted
      into the form: \q{group,plane,row,cell} */
@@ -548,6 +551,7 @@ private:
     mutable struct {
       boolean regexp_init;
       regex_t posix_regexp;
+      boolean nocase;
     } pattern_value;
     unichar_decmatch_struct* dec_match;
   };
@@ -570,7 +574,8 @@ public:
     (const CHARSTRING_template& other_value);
   UNIVERSAL_CHARSTRING_template
     (const UNIVERSAL_CHARSTRING_template& other_value);
-  UNIVERSAL_CHARSTRING_template(template_sel p_sel, const CHARSTRING& p_str);
+  UNIVERSAL_CHARSTRING_template(template_sel p_sel, const CHARSTRING& p_str,
+    boolean p_nocase);
 
   ~UNIVERSAL_CHARSTRING_template();
   void clean_up();
diff --git a/core/config_process.l b/core/config_process.l
index a0396e971df43aabccb45920e189158761201dbf..bf2acbd460fc7b973cd5ad9bb7b4d86457d39593 100644
--- a/core/config_process.l
+++ b/core/config_process.l
@@ -566,6 +566,7 @@ permutation return PermutationKeyword;
 length      return LengthKeyword;
 ifpresent   return IfpresentKeyword;
 infinity    return InfinityKeyword;
+"@nocase"   return NocaseKeyword;
 }
 
 <SC_MODULE_PARAMETERS,SC_LOGGING,SC_PROFILER>
diff --git a/core/config_process.y b/core/config_process.y
index f9bc7948882e7f8d46b2b5d6a895d162953c93ac..d08b1a45f7d3dec5fc6abee921b79bd27ff5d2db 100644
--- a/core/config_process.y
+++ b/core/config_process.y
@@ -183,6 +183,7 @@ string_map_t *config_defines;
 %token LengthKeyword "length"
 %token IfpresentKeyword "ifpresent"
 %token InfinityKeyword "infinity"
+%token NocaseKeyword "@nocase"
 %token AssignmentChar ":= or ="
 %token ConcatChar "&="
 %token LogFile "LogFile or FileName"
@@ -658,7 +659,11 @@ SimpleParameterValue:
   }
 | PatternKeyword PatternChunk
   {
-    $$ = new Module_Param_Pattern($2);
+    $$ = new Module_Param_Pattern($2, FALSE);
+  }
+| PatternKeyword NocaseKeyword PatternChunk
+  {
+    $$ = new Module_Param_Pattern($3, TRUE);
   }
 | BstringMatch
   {
diff --git a/etc/CaseFolding.txt b/etc/CaseFolding.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5c811a889e16170af528b5fa94392a1715775468
--- /dev/null
+++ b/etc/CaseFolding.txt
@@ -0,0 +1,1495 @@
+# CaseFolding-9.0.0.txt
+# Date: 2016-03-02, 18:54:54 GMT
+# © 2016 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+#   For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Case Folding Properties
+#
+# This file is a supplement to the UnicodeData file.
+# It provides a case folding mapping generated from the Unicode Character Database.
+# If all characters are mapped according to the full mapping below, then
+# case differences (according to UnicodeData.txt and SpecialCasing.txt)
+# are eliminated.
+#
+# The data supports both implementations that require simple case foldings
+# (where string lengths don't change), and implementations that allow full case folding
+# (where string lengths may grow). Note that where they can be supported, the
+# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
+#
+# All code points not listed in this file map to themselves.
+#
+# NOTE: case folding does not preserve normalization formats!
+#
+# For information on case folding, including how to have case folding 
+# preserve normalization formats, see Section 3.13 Default Case Algorithms in
+# The Unicode Standard.
+#
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <code>; <status>; <mapping>; # <name>
+#
+# The status field is:
+# C: common case folding, common mappings shared by both simple and full mappings.
+# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
+# S: simple case folding, mappings to single characters where different from F.
+# T: special case for uppercase I and dotted uppercase I
+#    - For non-Turkic languages, this mapping is normally not used.
+#    - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
+#      Note that the Turkic mappings do not maintain canonical equivalence without additional processing.
+#      See the discussions of case mapping in the Unicode Standard for more information.
+#
+# Usage:
+#  A. To do a simple case folding, use the mappings with status C + S.
+#  B. To do a full case folding, use the mappings with status C + F.
+#
+#    The mappings with status T can be used or omitted depending on the desired case-folding
+#    behavior. (The default option is to exclude them.)
+#
+# =================================================================
+
+# Property: Case_Folding
+
+#  All code points not explicitly listed for Case_Folding
+#  have the value C for the status field, and the code point itself for the mapping field.
+
+# =================================================================
+0041; C; 0061; # LATIN CAPITAL LETTER A
+0042; C; 0062; # LATIN CAPITAL LETTER B
+0043; C; 0063; # LATIN CAPITAL LETTER C
+0044; C; 0064; # LATIN CAPITAL LETTER D
+0045; C; 0065; # LATIN CAPITAL LETTER E
+0046; C; 0066; # LATIN CAPITAL LETTER F
+0047; C; 0067; # LATIN CAPITAL LETTER G
+0048; C; 0068; # LATIN CAPITAL LETTER H
+0049; C; 0069; # LATIN CAPITAL LETTER I
+0049; T; 0131; # LATIN CAPITAL LETTER I
+004A; C; 006A; # LATIN CAPITAL LETTER J
+004B; C; 006B; # LATIN CAPITAL LETTER K
+004C; C; 006C; # LATIN CAPITAL LETTER L
+004D; C; 006D; # LATIN CAPITAL LETTER M
+004E; C; 006E; # LATIN CAPITAL LETTER N
+004F; C; 006F; # LATIN CAPITAL LETTER O
+0050; C; 0070; # LATIN CAPITAL LETTER P
+0051; C; 0071; # LATIN CAPITAL LETTER Q
+0052; C; 0072; # LATIN CAPITAL LETTER R
+0053; C; 0073; # LATIN CAPITAL LETTER S
+0054; C; 0074; # LATIN CAPITAL LETTER T
+0055; C; 0075; # LATIN CAPITAL LETTER U
+0056; C; 0076; # LATIN CAPITAL LETTER V
+0057; C; 0077; # LATIN CAPITAL LETTER W
+0058; C; 0078; # LATIN CAPITAL LETTER X
+0059; C; 0079; # LATIN CAPITAL LETTER Y
+005A; C; 007A; # LATIN CAPITAL LETTER Z
+00B5; C; 03BC; # MICRO SIGN
+00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
+00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
+00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
+00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6; C; 00E6; # LATIN CAPITAL LETTER AE
+00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
+00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
+00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
+00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
+00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
+00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
+00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
+00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
+00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
+00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
+00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
+00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
+00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
+00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
+00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
+0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON
+0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE
+0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK
+0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE
+0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON
+010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON
+0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE
+0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON
+0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE
+0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK
+011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON
+011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE
+0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA
+0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE
+0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE
+012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON
+012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE
+012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK
+0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132; C; 0133; # LATIN CAPITAL LIGATURE IJ
+0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA
+0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE
+013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA
+013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON
+013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE
+0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE
+0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA
+0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON
+0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A; C; 014B; # LATIN CAPITAL LETTER ENG
+014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON
+014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE
+0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152; C; 0153; # LATIN CAPITAL LIGATURE OE
+0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE
+0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA
+0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON
+015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE
+015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA
+0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON
+0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA
+0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON
+0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE
+0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE
+016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON
+016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE
+016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE
+0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK
+0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE
+017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON
+017F; C; 0073; # LATIN SMALL LETTER LONG S
+0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK
+0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR
+0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX
+0186; C; 0254; # LATIN CAPITAL LETTER OPEN O
+0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK
+0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D
+018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK
+018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR
+018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E
+018F; C; 0259; # LATIN CAPITAL LETTER SCHWA
+0190; C; 025B; # LATIN CAPITAL LETTER OPEN E
+0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK
+0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK
+0194; C; 0263; # LATIN CAPITAL LETTER GAMMA
+0196; C; 0269; # LATIN CAPITAL LETTER IOTA
+0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE
+0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK
+019C; C; 026F; # LATIN CAPITAL LETTER TURNED M
+019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN
+01A2; C; 01A3; # LATIN CAPITAL LETTER OI
+01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK
+01A6; C; 0280; # LATIN LETTER YR
+01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO
+01A9; C; 0283; # LATIN CAPITAL LETTER ESH
+01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK
+01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN
+01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON
+01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK
+01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK
+01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE
+01B7; C; 0292; # LATIN CAPITAL LETTER EZH
+01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED
+01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE
+01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON
+01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7; C; 01C9; # LATIN CAPITAL LETTER LJ
+01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA; C; 01CC; # LATIN CAPITAL LETTER NJ
+01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON
+01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON
+01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON
+01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON
+01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON
+01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE
+01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON
+01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON
+01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK
+01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON
+01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
+01F1; C; 01F3; # LATIN CAPITAL LETTER DZ
+01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE
+01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR
+01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN
+01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE
+01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE
+01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C; C; 021D; # LATIN CAPITAL LETTER YOGH
+021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON
+0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222; C; 0223; # LATIN CAPITAL LETTER OU
+0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK
+0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA
+022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
+023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE
+023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
+023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
+023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP
+0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE
+0244; C; 0289; # LATIN CAPITAL LETTER U BAR
+0245; C; 028C; # LATIN CAPITAL LETTER TURNED V
+0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE
+0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE
+024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE
+024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE
+0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
+0370; C; 0371; # GREEK CAPITAL LETTER HETA
+0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+037F; C; 03F3; # GREEK CAPITAL LETTER YOT
+0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS
+038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS
+038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA
+0392; C; 03B2; # GREEK CAPITAL LETTER BETA
+0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA
+0394; C; 03B4; # GREEK CAPITAL LETTER DELTA
+0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON
+0396; C; 03B6; # GREEK CAPITAL LETTER ZETA
+0397; C; 03B7; # GREEK CAPITAL LETTER ETA
+0398; C; 03B8; # GREEK CAPITAL LETTER THETA
+0399; C; 03B9; # GREEK CAPITAL LETTER IOTA
+039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA
+039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA
+039C; C; 03BC; # GREEK CAPITAL LETTER MU
+039D; C; 03BD; # GREEK CAPITAL LETTER NU
+039E; C; 03BE; # GREEK CAPITAL LETTER XI
+039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON
+03A0; C; 03C0; # GREEK CAPITAL LETTER PI
+03A1; C; 03C1; # GREEK CAPITAL LETTER RHO
+03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA
+03A4; C; 03C4; # GREEK CAPITAL LETTER TAU
+03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON
+03A6; C; 03C6; # GREEK CAPITAL LETTER PHI
+03A7; C; 03C7; # GREEK CAPITAL LETTER CHI
+03A8; C; 03C8; # GREEK CAPITAL LETTER PSI
+03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA
+03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA
+03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL
+03D0; C; 03B2; # GREEK BETA SYMBOL
+03D1; C; 03B8; # GREEK THETA SYMBOL
+03D5; C; 03C6; # GREEK PHI SYMBOL
+03D6; C; 03C0; # GREEK PI SYMBOL
+03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA
+03DA; C; 03DB; # GREEK LETTER STIGMA
+03DC; C; 03DD; # GREEK LETTER DIGAMMA
+03DE; C; 03DF; # GREEK LETTER KOPPA
+03E0; C; 03E1; # GREEK LETTER SAMPI
+03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI
+03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI
+03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI
+03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI
+03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA
+03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA
+03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI
+03F0; C; 03BA; # GREEK KAPPA SYMBOL
+03F1; C; 03C1; # GREEK RHO SYMBOL
+03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL
+03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL
+03F7; C; 03F8; # GREEK CAPITAL LETTER SHO
+03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA; C; 03FB; # GREEK CAPITAL LETTER SAN
+03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401; C; 0451; # CYRILLIC CAPITAL LETTER IO
+0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE
+0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE
+0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE
+0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407; C; 0457; # CYRILLIC CAPITAL LETTER YI
+0408; C; 0458; # CYRILLIC CAPITAL LETTER JE
+0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE
+040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE
+040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE
+040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE
+040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U
+040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE
+0410; C; 0430; # CYRILLIC CAPITAL LETTER A
+0411; C; 0431; # CYRILLIC CAPITAL LETTER BE
+0412; C; 0432; # CYRILLIC CAPITAL LETTER VE
+0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE
+0414; C; 0434; # CYRILLIC CAPITAL LETTER DE
+0415; C; 0435; # CYRILLIC CAPITAL LETTER IE
+0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE
+0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE
+0418; C; 0438; # CYRILLIC CAPITAL LETTER I
+0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I
+041A; C; 043A; # CYRILLIC CAPITAL LETTER KA
+041B; C; 043B; # CYRILLIC CAPITAL LETTER EL
+041C; C; 043C; # CYRILLIC CAPITAL LETTER EM
+041D; C; 043D; # CYRILLIC CAPITAL LETTER EN
+041E; C; 043E; # CYRILLIC CAPITAL LETTER O
+041F; C; 043F; # CYRILLIC CAPITAL LETTER PE
+0420; C; 0440; # CYRILLIC CAPITAL LETTER ER
+0421; C; 0441; # CYRILLIC CAPITAL LETTER ES
+0422; C; 0442; # CYRILLIC CAPITAL LETTER TE
+0423; C; 0443; # CYRILLIC CAPITAL LETTER U
+0424; C; 0444; # CYRILLIC CAPITAL LETTER EF
+0425; C; 0445; # CYRILLIC CAPITAL LETTER HA
+0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE
+0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE
+0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA
+0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA
+042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN
+042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU
+042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN
+042D; C; 044D; # CYRILLIC CAPITAL LETTER E
+042E; C; 044E; # CYRILLIC CAPITAL LETTER YU
+042F; C; 044F; # CYRILLIC CAPITAL LETTER YA
+0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA
+0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT
+0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E
+0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS
+0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS
+046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI
+0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI
+0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA
+0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA
+0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478; C; 0479; # CYRILLIC CAPITAL LETTER UK
+047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E; C; 047F; # CYRILLIC CAPITAL LETTER OT
+0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA
+048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK
+0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE
+04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE
+04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA
+04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA
+04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE
+04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA
+04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O
+04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
+0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
+0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE
+0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE
+0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE
+050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE
+050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE
+050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE
+0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE
+0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA
+0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA
+0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE
+051A; C; 051B; # CYRILLIC CAPITAL LETTER QA
+051C; C; 051D; # CYRILLIC CAPITAL LETTER WE
+051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA
+0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0528; C; 0529; # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+052A; C; 052B; # CYRILLIC CAPITAL LETTER DZZHE
+052C; C; 052D; # CYRILLIC CAPITAL LETTER DCHE
+052E; C; 052F; # CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB
+0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN
+0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM
+0534; C; 0564; # ARMENIAN CAPITAL LETTER DA
+0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH
+0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA
+0537; C; 0567; # ARMENIAN CAPITAL LETTER EH
+0538; C; 0568; # ARMENIAN CAPITAL LETTER ET
+0539; C; 0569; # ARMENIAN CAPITAL LETTER TO
+053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE
+053B; C; 056B; # ARMENIAN CAPITAL LETTER INI
+053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN
+053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH
+053E; C; 056E; # ARMENIAN CAPITAL LETTER CA
+053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN
+0540; C; 0570; # ARMENIAN CAPITAL LETTER HO
+0541; C; 0571; # ARMENIAN CAPITAL LETTER JA
+0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD
+0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH
+0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN
+0545; C; 0575; # ARMENIAN CAPITAL LETTER YI
+0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW
+0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA
+0548; C; 0578; # ARMENIAN CAPITAL LETTER VO
+0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA
+054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH
+054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH
+054C; C; 057C; # ARMENIAN CAPITAL LETTER RA
+054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH
+054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW
+054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN
+0550; C; 0580; # ARMENIAN CAPITAL LETTER REH
+0551; C; 0581; # ARMENIAN CAPITAL LETTER CO
+0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN
+0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR
+0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH
+0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
+0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
+0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
+10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
+10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
+10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
+10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
+10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
+10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
+10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
+10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
+10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
+10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
+10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
+10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
+10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
+10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
+10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
+10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
+10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
+10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
+10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
+10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
+10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
+10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
+10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
+10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
+10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
+10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
+10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
+10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
+10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
+10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
+10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
+10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
+10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
+10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
+10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
+10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
+10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
+10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
+10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN
+10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN
+13F8; C; 13F0; # CHEROKEE SMALL LETTER YE
+13F9; C; 13F1; # CHEROKEE SMALL LETTER YI
+13FA; C; 13F2; # CHEROKEE SMALL LETTER YO
+13FB; C; 13F3; # CHEROKEE SMALL LETTER YU
+13FC; C; 13F4; # CHEROKEE SMALL LETTER YV
+13FD; C; 13F5; # CHEROKEE SMALL LETTER MV
+1C80; C; 0432; # CYRILLIC SMALL LETTER ROUNDED VE
+1C81; C; 0434; # CYRILLIC SMALL LETTER LONG-LEGGED DE
+1C82; C; 043E; # CYRILLIC SMALL LETTER NARROW O
+1C83; C; 0441; # CYRILLIC SMALL LETTER WIDE ES
+1C84; C; 0442; # CYRILLIC SMALL LETTER TALL TE
+1C85; C; 0442; # CYRILLIC SMALL LETTER THREE-LEGGED TE
+1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN
+1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT
+1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK
+1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
+1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA
+1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON
+1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE
+1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE
+1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE
+1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE
+1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE
+1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE
+1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
+1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S
+1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE
+1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE
+1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP
+1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI
+1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE; C; 03B9; # GREEK PROSGEGRAMMENI
+1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126; C; 03C9; # OHM SIGN
+212A; C; 006B; # KELVIN SIGN
+212B; C; 00E5; # ANGSTROM SIGN
+2132; C; 214E; # TURNED CAPITAL F
+2160; C; 2170; # ROMAN NUMERAL ONE
+2161; C; 2171; # ROMAN NUMERAL TWO
+2162; C; 2172; # ROMAN NUMERAL THREE
+2163; C; 2173; # ROMAN NUMERAL FOUR
+2164; C; 2174; # ROMAN NUMERAL FIVE
+2165; C; 2175; # ROMAN NUMERAL SIX
+2166; C; 2176; # ROMAN NUMERAL SEVEN
+2167; C; 2177; # ROMAN NUMERAL EIGHT
+2168; C; 2178; # ROMAN NUMERAL NINE
+2169; C; 2179; # ROMAN NUMERAL TEN
+216A; C; 217A; # ROMAN NUMERAL ELEVEN
+216B; C; 217B; # ROMAN NUMERAL TWELVE
+216C; C; 217C; # ROMAN NUMERAL FIFTY
+216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED
+216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED
+216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND
+2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A
+24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B
+24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C
+24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D
+24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E
+24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F
+24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G
+24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H
+24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I
+24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J
+24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K
+24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L
+24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M
+24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N
+24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O
+24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P
+24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q
+24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R
+24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S
+24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T
+24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U
+24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V
+24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W
+24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
+24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
+24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
+2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
+2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
+2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
+2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
+2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
+2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
+2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
+2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
+2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
+2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
+2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
+2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
+2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
+2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
+2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
+2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
+2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
+2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
+2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
+2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
+2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
+2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
+2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE
+2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL
+2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER
+2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA
+2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK
+2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A
+2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA
+2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK
+2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H
+2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL
+2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
+2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
+2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
+2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
+2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
+2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
+2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
+2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
+2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
+2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
+2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
+2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
+2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
+2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
+2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
+2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
+2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
+2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
+2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
+2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
+2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
+2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
+2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
+2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
+2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
+2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
+2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI
+A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA
+A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO
+A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE
+A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA
+A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV
+A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU
+A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A
+A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN
+A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE
+A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE
+A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL
+A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM
+A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680; C; A681; # CYRILLIC CAPITAL LETTER DWE
+A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE
+A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE
+A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE
+A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE
+A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE
+A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE
+A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE
+A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE
+A694; C; A695; # CYRILLIC CAPITAL LETTER HWE
+A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE
+A698; C; A699; # CYRILLIC CAPITAL LETTER DOUBLE O
+A69A; C; A69B; # CYRILLIC CAPITAL LETTER CROSSED O
+A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726; C; A727; # LATIN CAPITAL LETTER HENG
+A728; C; A729; # LATIN CAPITAL LETTER TZ
+A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO
+A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO
+A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732; C; A733; # LATIN CAPITAL LETTER AA
+A734; C; A735; # LATIN CAPITAL LETTER AO
+A736; C; A737; # LATIN CAPITAL LETTER AU
+A738; C; A739; # LATIN CAPITAL LETTER AV
+A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C; C; A73D; # LATIN CAPITAL LETTER AY
+A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE
+A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746; C; A747; # LATIN CAPITAL LETTER BROKEN L
+A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP
+A74E; C; A74F; # LATIN CAPITAL LETTER OO
+A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH
+A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA
+A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA
+A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760; C; A761; # LATIN CAPITAL LETTER VY
+A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z
+A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE
+A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768; C; A769; # LATIN CAPITAL LETTER VEND
+A76A; C; A76B; # LATIN CAPITAL LETTER ET
+A76C; C; A76D; # LATIN CAPITAL LETTER IS
+A76E; C; A76F; # LATIN CAPITAL LETTER CON
+A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D
+A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F
+A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G
+A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G
+A780; C; A781; # LATIN CAPITAL LETTER TURNED L
+A782; C; A783; # LATIN CAPITAL LETTER INSULAR R
+A784; C; A785; # LATIN CAPITAL LETTER INSULAR S
+A786; C; A787; # LATIN CAPITAL LETTER INSULAR T
+A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO
+A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H
+A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER
+A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR
+A796; C; A797; # LATIN CAPITAL LETTER B WITH FLOURISH
+A798; C; A799; # LATIN CAPITAL LETTER F WITH STROKE
+A79A; C; A79B; # LATIN CAPITAL LETTER VOLAPUK AE
+A79C; C; A79D; # LATIN CAPITAL LETTER VOLAPUK OE
+A79E; C; A79F; # LATIN CAPITAL LETTER VOLAPUK UE
+A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK
+A7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E
+A7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G
+A7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT
+A7AE; C; 026A; # LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K
+A7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T
+A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+A7B3; C; AB53; # LATIN CAPITAL LETTER CHI
+A7B4; C; A7B5; # LATIN CAPITAL LETTER BETA
+A7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA
+AB70; C; 13A0; # CHEROKEE SMALL LETTER A
+AB71; C; 13A1; # CHEROKEE SMALL LETTER E
+AB72; C; 13A2; # CHEROKEE SMALL LETTER I
+AB73; C; 13A3; # CHEROKEE SMALL LETTER O
+AB74; C; 13A4; # CHEROKEE SMALL LETTER U
+AB75; C; 13A5; # CHEROKEE SMALL LETTER V
+AB76; C; 13A6; # CHEROKEE SMALL LETTER GA
+AB77; C; 13A7; # CHEROKEE SMALL LETTER KA
+AB78; C; 13A8; # CHEROKEE SMALL LETTER GE
+AB79; C; 13A9; # CHEROKEE SMALL LETTER GI
+AB7A; C; 13AA; # CHEROKEE SMALL LETTER GO
+AB7B; C; 13AB; # CHEROKEE SMALL LETTER GU
+AB7C; C; 13AC; # CHEROKEE SMALL LETTER GV
+AB7D; C; 13AD; # CHEROKEE SMALL LETTER HA
+AB7E; C; 13AE; # CHEROKEE SMALL LETTER HE
+AB7F; C; 13AF; # CHEROKEE SMALL LETTER HI
+AB80; C; 13B0; # CHEROKEE SMALL LETTER HO
+AB81; C; 13B1; # CHEROKEE SMALL LETTER HU
+AB82; C; 13B2; # CHEROKEE SMALL LETTER HV
+AB83; C; 13B3; # CHEROKEE SMALL LETTER LA
+AB84; C; 13B4; # CHEROKEE SMALL LETTER LE
+AB85; C; 13B5; # CHEROKEE SMALL LETTER LI
+AB86; C; 13B6; # CHEROKEE SMALL LETTER LO
+AB87; C; 13B7; # CHEROKEE SMALL LETTER LU
+AB88; C; 13B8; # CHEROKEE SMALL LETTER LV
+AB89; C; 13B9; # CHEROKEE SMALL LETTER MA
+AB8A; C; 13BA; # CHEROKEE SMALL LETTER ME
+AB8B; C; 13BB; # CHEROKEE SMALL LETTER MI
+AB8C; C; 13BC; # CHEROKEE SMALL LETTER MO
+AB8D; C; 13BD; # CHEROKEE SMALL LETTER MU
+AB8E; C; 13BE; # CHEROKEE SMALL LETTER NA
+AB8F; C; 13BF; # CHEROKEE SMALL LETTER HNA
+AB90; C; 13C0; # CHEROKEE SMALL LETTER NAH
+AB91; C; 13C1; # CHEROKEE SMALL LETTER NE
+AB92; C; 13C2; # CHEROKEE SMALL LETTER NI
+AB93; C; 13C3; # CHEROKEE SMALL LETTER NO
+AB94; C; 13C4; # CHEROKEE SMALL LETTER NU
+AB95; C; 13C5; # CHEROKEE SMALL LETTER NV
+AB96; C; 13C6; # CHEROKEE SMALL LETTER QUA
+AB97; C; 13C7; # CHEROKEE SMALL LETTER QUE
+AB98; C; 13C8; # CHEROKEE SMALL LETTER QUI
+AB99; C; 13C9; # CHEROKEE SMALL LETTER QUO
+AB9A; C; 13CA; # CHEROKEE SMALL LETTER QUU
+AB9B; C; 13CB; # CHEROKEE SMALL LETTER QUV
+AB9C; C; 13CC; # CHEROKEE SMALL LETTER SA
+AB9D; C; 13CD; # CHEROKEE SMALL LETTER S
+AB9E; C; 13CE; # CHEROKEE SMALL LETTER SE
+AB9F; C; 13CF; # CHEROKEE SMALL LETTER SI
+ABA0; C; 13D0; # CHEROKEE SMALL LETTER SO
+ABA1; C; 13D1; # CHEROKEE SMALL LETTER SU
+ABA2; C; 13D2; # CHEROKEE SMALL LETTER SV
+ABA3; C; 13D3; # CHEROKEE SMALL LETTER DA
+ABA4; C; 13D4; # CHEROKEE SMALL LETTER TA
+ABA5; C; 13D5; # CHEROKEE SMALL LETTER DE
+ABA6; C; 13D6; # CHEROKEE SMALL LETTER TE
+ABA7; C; 13D7; # CHEROKEE SMALL LETTER DI
+ABA8; C; 13D8; # CHEROKEE SMALL LETTER TI
+ABA9; C; 13D9; # CHEROKEE SMALL LETTER DO
+ABAA; C; 13DA; # CHEROKEE SMALL LETTER DU
+ABAB; C; 13DB; # CHEROKEE SMALL LETTER DV
+ABAC; C; 13DC; # CHEROKEE SMALL LETTER DLA
+ABAD; C; 13DD; # CHEROKEE SMALL LETTER TLA
+ABAE; C; 13DE; # CHEROKEE SMALL LETTER TLE
+ABAF; C; 13DF; # CHEROKEE SMALL LETTER TLI
+ABB0; C; 13E0; # CHEROKEE SMALL LETTER TLO
+ABB1; C; 13E1; # CHEROKEE SMALL LETTER TLU
+ABB2; C; 13E2; # CHEROKEE SMALL LETTER TLV
+ABB3; C; 13E3; # CHEROKEE SMALL LETTER TSA
+ABB4; C; 13E4; # CHEROKEE SMALL LETTER TSE
+ABB5; C; 13E5; # CHEROKEE SMALL LETTER TSI
+ABB6; C; 13E6; # CHEROKEE SMALL LETTER TSO
+ABB7; C; 13E7; # CHEROKEE SMALL LETTER TSU
+ABB8; C; 13E8; # CHEROKEE SMALL LETTER TSV
+ABB9; C; 13E9; # CHEROKEE SMALL LETTER WA
+ABBA; C; 13EA; # CHEROKEE SMALL LETTER WE
+ABBB; C; 13EB; # CHEROKEE SMALL LETTER WI
+ABBC; C; 13EC; # CHEROKEE SMALL LETTER WO
+ABBD; C; 13ED; # CHEROKEE SMALL LETTER WU
+ABBE; C; 13EE; # CHEROKEE SMALL LETTER WV
+ABBF; C; 13EF; # CHEROKEE SMALL LETTER YA
+FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
+FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
+FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL
+FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI
+FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL
+FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T
+FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST
+FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH
+FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A
+FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B
+FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C
+FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D
+FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E
+FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F
+FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G
+FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H
+FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I
+FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J
+FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K
+FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L
+FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M
+FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N
+FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O
+FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P
+FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q
+FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R
+FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S
+FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T
+FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U
+FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V
+FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W
+FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X
+FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
+10400; C; 10428; # DESERET CAPITAL LETTER LONG I
+10401; C; 10429; # DESERET CAPITAL LETTER LONG E
+10402; C; 1042A; # DESERET CAPITAL LETTER LONG A
+10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH
+10404; C; 1042C; # DESERET CAPITAL LETTER LONG O
+10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO
+10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I
+10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E
+10408; C; 10430; # DESERET CAPITAL LETTER SHORT A
+10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH
+1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O
+1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO
+1040C; C; 10434; # DESERET CAPITAL LETTER AY
+1040D; C; 10435; # DESERET CAPITAL LETTER OW
+1040E; C; 10436; # DESERET CAPITAL LETTER WU
+1040F; C; 10437; # DESERET CAPITAL LETTER YEE
+10410; C; 10438; # DESERET CAPITAL LETTER H
+10411; C; 10439; # DESERET CAPITAL LETTER PEE
+10412; C; 1043A; # DESERET CAPITAL LETTER BEE
+10413; C; 1043B; # DESERET CAPITAL LETTER TEE
+10414; C; 1043C; # DESERET CAPITAL LETTER DEE
+10415; C; 1043D; # DESERET CAPITAL LETTER CHEE
+10416; C; 1043E; # DESERET CAPITAL LETTER JEE
+10417; C; 1043F; # DESERET CAPITAL LETTER KAY
+10418; C; 10440; # DESERET CAPITAL LETTER GAY
+10419; C; 10441; # DESERET CAPITAL LETTER EF
+1041A; C; 10442; # DESERET CAPITAL LETTER VEE
+1041B; C; 10443; # DESERET CAPITAL LETTER ETH
+1041C; C; 10444; # DESERET CAPITAL LETTER THEE
+1041D; C; 10445; # DESERET CAPITAL LETTER ES
+1041E; C; 10446; # DESERET CAPITAL LETTER ZEE
+1041F; C; 10447; # DESERET CAPITAL LETTER ESH
+10420; C; 10448; # DESERET CAPITAL LETTER ZHEE
+10421; C; 10449; # DESERET CAPITAL LETTER ER
+10422; C; 1044A; # DESERET CAPITAL LETTER EL
+10423; C; 1044B; # DESERET CAPITAL LETTER EM
+10424; C; 1044C; # DESERET CAPITAL LETTER EN
+10425; C; 1044D; # DESERET CAPITAL LETTER ENG
+10426; C; 1044E; # DESERET CAPITAL LETTER OI
+10427; C; 1044F; # DESERET CAPITAL LETTER EW
+104B0; C; 104D8; # OSAGE CAPITAL LETTER A
+104B1; C; 104D9; # OSAGE CAPITAL LETTER AI
+104B2; C; 104DA; # OSAGE CAPITAL LETTER AIN
+104B3; C; 104DB; # OSAGE CAPITAL LETTER AH
+104B4; C; 104DC; # OSAGE CAPITAL LETTER BRA
+104B5; C; 104DD; # OSAGE CAPITAL LETTER CHA
+104B6; C; 104DE; # OSAGE CAPITAL LETTER EHCHA
+104B7; C; 104DF; # OSAGE CAPITAL LETTER E
+104B8; C; 104E0; # OSAGE CAPITAL LETTER EIN
+104B9; C; 104E1; # OSAGE CAPITAL LETTER HA
+104BA; C; 104E2; # OSAGE CAPITAL LETTER HYA
+104BB; C; 104E3; # OSAGE CAPITAL LETTER I
+104BC; C; 104E4; # OSAGE CAPITAL LETTER KA
+104BD; C; 104E5; # OSAGE CAPITAL LETTER EHKA
+104BE; C; 104E6; # OSAGE CAPITAL LETTER KYA
+104BF; C; 104E7; # OSAGE CAPITAL LETTER LA
+104C0; C; 104E8; # OSAGE CAPITAL LETTER MA
+104C1; C; 104E9; # OSAGE CAPITAL LETTER NA
+104C2; C; 104EA; # OSAGE CAPITAL LETTER O
+104C3; C; 104EB; # OSAGE CAPITAL LETTER OIN
+104C4; C; 104EC; # OSAGE CAPITAL LETTER PA
+104C5; C; 104ED; # OSAGE CAPITAL LETTER EHPA
+104C6; C; 104EE; # OSAGE CAPITAL LETTER SA
+104C7; C; 104EF; # OSAGE CAPITAL LETTER SHA
+104C8; C; 104F0; # OSAGE CAPITAL LETTER TA
+104C9; C; 104F1; # OSAGE CAPITAL LETTER EHTA
+104CA; C; 104F2; # OSAGE CAPITAL LETTER TSA
+104CB; C; 104F3; # OSAGE CAPITAL LETTER EHTSA
+104CC; C; 104F4; # OSAGE CAPITAL LETTER TSHA
+104CD; C; 104F5; # OSAGE CAPITAL LETTER DHA
+104CE; C; 104F6; # OSAGE CAPITAL LETTER U
+104CF; C; 104F7; # OSAGE CAPITAL LETTER WA
+104D0; C; 104F8; # OSAGE CAPITAL LETTER KHA
+104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA
+104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA
+104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA
+10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A
+10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA
+10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB
+10C83; C; 10CC3; # OLD HUNGARIAN CAPITAL LETTER AMB
+10C84; C; 10CC4; # OLD HUNGARIAN CAPITAL LETTER EC
+10C85; C; 10CC5; # OLD HUNGARIAN CAPITAL LETTER ENC
+10C86; C; 10CC6; # OLD HUNGARIAN CAPITAL LETTER ECS
+10C87; C; 10CC7; # OLD HUNGARIAN CAPITAL LETTER ED
+10C88; C; 10CC8; # OLD HUNGARIAN CAPITAL LETTER AND
+10C89; C; 10CC9; # OLD HUNGARIAN CAPITAL LETTER E
+10C8A; C; 10CCA; # OLD HUNGARIAN CAPITAL LETTER CLOSE E
+10C8B; C; 10CCB; # OLD HUNGARIAN CAPITAL LETTER EE
+10C8C; C; 10CCC; # OLD HUNGARIAN CAPITAL LETTER EF
+10C8D; C; 10CCD; # OLD HUNGARIAN CAPITAL LETTER EG
+10C8E; C; 10CCE; # OLD HUNGARIAN CAPITAL LETTER EGY
+10C8F; C; 10CCF; # OLD HUNGARIAN CAPITAL LETTER EH
+10C90; C; 10CD0; # OLD HUNGARIAN CAPITAL LETTER I
+10C91; C; 10CD1; # OLD HUNGARIAN CAPITAL LETTER II
+10C92; C; 10CD2; # OLD HUNGARIAN CAPITAL LETTER EJ
+10C93; C; 10CD3; # OLD HUNGARIAN CAPITAL LETTER EK
+10C94; C; 10CD4; # OLD HUNGARIAN CAPITAL LETTER AK
+10C95; C; 10CD5; # OLD HUNGARIAN CAPITAL LETTER UNK
+10C96; C; 10CD6; # OLD HUNGARIAN CAPITAL LETTER EL
+10C97; C; 10CD7; # OLD HUNGARIAN CAPITAL LETTER ELY
+10C98; C; 10CD8; # OLD HUNGARIAN CAPITAL LETTER EM
+10C99; C; 10CD9; # OLD HUNGARIAN CAPITAL LETTER EN
+10C9A; C; 10CDA; # OLD HUNGARIAN CAPITAL LETTER ENY
+10C9B; C; 10CDB; # OLD HUNGARIAN CAPITAL LETTER O
+10C9C; C; 10CDC; # OLD HUNGARIAN CAPITAL LETTER OO
+10C9D; C; 10CDD; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
+10C9E; C; 10CDE; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
+10C9F; C; 10CDF; # OLD HUNGARIAN CAPITAL LETTER OEE
+10CA0; C; 10CE0; # OLD HUNGARIAN CAPITAL LETTER EP
+10CA1; C; 10CE1; # OLD HUNGARIAN CAPITAL LETTER EMP
+10CA2; C; 10CE2; # OLD HUNGARIAN CAPITAL LETTER ER
+10CA3; C; 10CE3; # OLD HUNGARIAN CAPITAL LETTER SHORT ER
+10CA4; C; 10CE4; # OLD HUNGARIAN CAPITAL LETTER ES
+10CA5; C; 10CE5; # OLD HUNGARIAN CAPITAL LETTER ESZ
+10CA6; C; 10CE6; # OLD HUNGARIAN CAPITAL LETTER ET
+10CA7; C; 10CE7; # OLD HUNGARIAN CAPITAL LETTER ENT
+10CA8; C; 10CE8; # OLD HUNGARIAN CAPITAL LETTER ETY
+10CA9; C; 10CE9; # OLD HUNGARIAN CAPITAL LETTER ECH
+10CAA; C; 10CEA; # OLD HUNGARIAN CAPITAL LETTER U
+10CAB; C; 10CEB; # OLD HUNGARIAN CAPITAL LETTER UU
+10CAC; C; 10CEC; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
+10CAD; C; 10CED; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
+10CAE; C; 10CEE; # OLD HUNGARIAN CAPITAL LETTER EV
+10CAF; C; 10CEF; # OLD HUNGARIAN CAPITAL LETTER EZ
+10CB0; C; 10CF0; # OLD HUNGARIAN CAPITAL LETTER EZS
+10CB1; C; 10CF1; # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN
+10CB2; C; 10CF2; # OLD HUNGARIAN CAPITAL LETTER US
+118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA
+118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A
+118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI
+118A3; C; 118C3; # WARANG CITI CAPITAL LETTER YU
+118A4; C; 118C4; # WARANG CITI CAPITAL LETTER YA
+118A5; C; 118C5; # WARANG CITI CAPITAL LETTER YO
+118A6; C; 118C6; # WARANG CITI CAPITAL LETTER II
+118A7; C; 118C7; # WARANG CITI CAPITAL LETTER UU
+118A8; C; 118C8; # WARANG CITI CAPITAL LETTER E
+118A9; C; 118C9; # WARANG CITI CAPITAL LETTER O
+118AA; C; 118CA; # WARANG CITI CAPITAL LETTER ANG
+118AB; C; 118CB; # WARANG CITI CAPITAL LETTER GA
+118AC; C; 118CC; # WARANG CITI CAPITAL LETTER KO
+118AD; C; 118CD; # WARANG CITI CAPITAL LETTER ENY
+118AE; C; 118CE; # WARANG CITI CAPITAL LETTER YUJ
+118AF; C; 118CF; # WARANG CITI CAPITAL LETTER UC
+118B0; C; 118D0; # WARANG CITI CAPITAL LETTER ENN
+118B1; C; 118D1; # WARANG CITI CAPITAL LETTER ODD
+118B2; C; 118D2; # WARANG CITI CAPITAL LETTER TTE
+118B3; C; 118D3; # WARANG CITI CAPITAL LETTER NUNG
+118B4; C; 118D4; # WARANG CITI CAPITAL LETTER DA
+118B5; C; 118D5; # WARANG CITI CAPITAL LETTER AT
+118B6; C; 118D6; # WARANG CITI CAPITAL LETTER AM
+118B7; C; 118D7; # WARANG CITI CAPITAL LETTER BU
+118B8; C; 118D8; # WARANG CITI CAPITAL LETTER PU
+118B9; C; 118D9; # WARANG CITI CAPITAL LETTER HIYO
+118BA; C; 118DA; # WARANG CITI CAPITAL LETTER HOLO
+118BB; C; 118DB; # WARANG CITI CAPITAL LETTER HORR
+118BC; C; 118DC; # WARANG CITI CAPITAL LETTER HAR
+118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU
+118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII
+118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO
+1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF
+1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI
+1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM
+1E903; C; 1E925; # ADLAM CAPITAL LETTER MIIM
+1E904; C; 1E926; # ADLAM CAPITAL LETTER BA
+1E905; C; 1E927; # ADLAM CAPITAL LETTER SINNYIIYHE
+1E906; C; 1E928; # ADLAM CAPITAL LETTER PE
+1E907; C; 1E929; # ADLAM CAPITAL LETTER BHE
+1E908; C; 1E92A; # ADLAM CAPITAL LETTER RA
+1E909; C; 1E92B; # ADLAM CAPITAL LETTER E
+1E90A; C; 1E92C; # ADLAM CAPITAL LETTER FA
+1E90B; C; 1E92D; # ADLAM CAPITAL LETTER I
+1E90C; C; 1E92E; # ADLAM CAPITAL LETTER O
+1E90D; C; 1E92F; # ADLAM CAPITAL LETTER DHA
+1E90E; C; 1E930; # ADLAM CAPITAL LETTER YHE
+1E90F; C; 1E931; # ADLAM CAPITAL LETTER WAW
+1E910; C; 1E932; # ADLAM CAPITAL LETTER NUN
+1E911; C; 1E933; # ADLAM CAPITAL LETTER KAF
+1E912; C; 1E934; # ADLAM CAPITAL LETTER YA
+1E913; C; 1E935; # ADLAM CAPITAL LETTER U
+1E914; C; 1E936; # ADLAM CAPITAL LETTER JIIM
+1E915; C; 1E937; # ADLAM CAPITAL LETTER CHI
+1E916; C; 1E938; # ADLAM CAPITAL LETTER HA
+1E917; C; 1E939; # ADLAM CAPITAL LETTER QAAF
+1E918; C; 1E93A; # ADLAM CAPITAL LETTER GA
+1E919; C; 1E93B; # ADLAM CAPITAL LETTER NYA
+1E91A; C; 1E93C; # ADLAM CAPITAL LETTER TU
+1E91B; C; 1E93D; # ADLAM CAPITAL LETTER NHA
+1E91C; C; 1E93E; # ADLAM CAPITAL LETTER VA
+1E91D; C; 1E93F; # ADLAM CAPITAL LETTER KHA
+1E91E; C; 1E940; # ADLAM CAPITAL LETTER GBE
+1E91F; C; 1E941; # ADLAM CAPITAL LETTER ZAL
+1E920; C; 1E942; # ADLAM CAPITAL LETTER KPO
+1E921; C; 1E943; # ADLAM CAPITAL LETTER SHA
+#
+# EOF
diff --git a/etc/Makefile b/etc/Makefile
index f0e55f84aa4d37d28f6430c88cd7025b713bdfe9..e72e1e0f21c3ce79a651efe2c55a4722dcd95beb 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -38,6 +38,8 @@ import_part module_param port_type signature template testcase ttcn3_module))
 
 XSD_FILES := $(addprefix xsd/, TPD.xsd)
 
+CASE_FOLDINGS := CaseFolding.txt
+
 install:
 ifdef MINGW
 	@echo Skipped ${CURDIR} for MinGW
@@ -48,4 +50,5 @@ else
 #	cp asciiart/*.txt $(ETCDIR)/asciiart
 	mkdir -p $(ETCDIR)/scripts
 	cp scripts/*.py $(ETCDIR)/scripts
+	cp $(CASE_FOLDINGS) $(ETCDIR)
 endif
diff --git a/mctr2/cli/config_read.l b/mctr2/cli/config_read.l
index 59a8e8f87c2fabcfb1987e6bb1e5f08821604c73..18b8de8af3ee69f7a3f8c9df8c821cc543f45e34 100644
--- a/mctr2/cli/config_read.l
+++ b/mctr2/cli/config_read.l
@@ -441,6 +441,7 @@ permutation RETURN(PermutationKeyword);
 length      RETURN(LengthKeyword);
 ifpresent   RETURN(IfpresentKeyword);
 infinity    RETURN(InfinityKeyword);
+"@nocase"   RETURN(NocaseKeyword);
 }
 
 <SC_MODULE_PARAMETERS,SC_LOGGING,SC_PROFILER>
diff --git a/mctr2/cli/config_read.y b/mctr2/cli/config_read.y
index 4acf98185d63aa7bb2b3016d3f24ee1b3e65a23b..e1833084cbbab3f7f35e99b02330f1e8a6882621 100644
--- a/mctr2/cli/config_read.y
+++ b/mctr2/cli/config_read.y
@@ -123,6 +123,7 @@ static void yyprint(FILE *file, int type, const YYSTYPE& value);
 %token LengthKeyword "length"
 %token IfpresentKeyword "ifpresent"
 %token InfinityKeyword "infinity"
+%token NocaseKeyword "@nocase"
 
 %token LogFile "LogFile of FileName"
 %token EmergencyLogging
@@ -347,6 +348,7 @@ SimpleParameterValue:
 | FloatRange
 | StringRange
 | PatternKeyword PatternChunk
+| PatternKeyword NocaseKeyword PatternChunk
 | BstringMatch
 | HstringMatch
 | OstringMatch
diff --git a/regression_test/pattern_quadruples/config.cfg b/regression_test/pattern_quadruples/config.cfg
index 9aa6d0cc917fe0ecf9fe304162e249eb665eb347..4c20da60c9d784b4849d30307a7c08277387ac84 100644
--- a/regression_test/pattern_quadruples/config.cfg
+++ b/regression_test/pattern_quadruples/config.cfg
@@ -11,6 +11,7 @@
 #
 ###############################################################################
 [MODULE_PARAMETERS]
+mpt_ucs := pattern @nocase "A" & char(0,0,0,225) & "[" & char(0,0,0,201) & "-" & char(0,0,1,113) & "]";
 [LOGGING]
 Logfile := "pattern_quadruples.log"
 FileMask := LOG_ALL
diff --git a/regression_test/pattern_quadruples/pattern_quadruples.ttcn b/regression_test/pattern_quadruples/pattern_quadruples.ttcn
index 7ef73ffafbb0f54193dd6f925024cd94052e4879..439d0239b95e58e6ff707e40135bb77c28a647fc 100644
--- a/regression_test/pattern_quadruples/pattern_quadruples.ttcn
+++ b/regression_test/pattern_quadruples/pattern_quadruples.ttcn
@@ -94,11 +94,52 @@ module pattern_quadruples
     if (not match(foobar_u, t_us)) { setverdict(fail, "ustr mismatch,", match(foobar_u, t_us)); }
     setverdict(pass);
   }
+  
+  const universal charstring c_ucs_val := "AÍ";
+  const universal charstring c_ucs_pattern := "([abc][é-ű])";
+  
+  // case-insensitive regexp
+  testcase univ_regexp_nocase() runs on univchar_comp {
+    // regexp with constants (calculated at compile-time)
+    var universal charstring v_res_const := regexp @nocase (c_ucs_val, c_ucs_pattern, 0);
+    if (v_res_const != c_ucs_val) {
+      setverdict(fail, "Const regexp failed. Got: ", v_res_const, ", expected: ", c_ucs_val);
+    }
+    
+    // regexp with variables (calculated at runtime)
+    var universal charstring v_ucs_val := "aÁű";
+    var universal charstring v_ucs_pattern := "(Aá[É-Ű])";
+    var universal charstring v_res_var := regexp @nocase (v_ucs_val, v_ucs_pattern, 0);
+    if (v_res_var != v_ucs_val) {
+      setverdict(fail, "Var regexp failed. Got: ", v_res_var, ", expected: ", v_ucs_val);
+    }
+    setverdict(pass);
+  }
+  
+  modulepar template universal charstring mpt_ucs;
+  
+  // case-insensitive pattern
+  testcase univ_pattern_nocase() runs on univchar_comp {
+    // pattern in template variable
+    var template universal charstring vt_ucs := pattern @nocase "A\q{0,0,0,225}[\q{0,0,0,201}-\q{0,0,1,113}]"; // "Aá[É-ű]"
+    var universal charstring val := "aÁű";
+    if (not match(val, vt_ucs)) {
+      setverdict(fail, "Var template pattern failed: ", match(val, vt_ucs));
+    }
+    
+    // pattern in template module parameter
+    if (not match(val, mpt_ucs)) {
+      setverdict(fail, "Var template pattern failed: ", match(val, mpt_ucs));
+    }
+    setverdict(pass);
+  }
 
   control {
     execute(univ_match());
     execute(univ_match_neg());
     execute(univ_regexp());
     execute(univ_from_charstr_pattern());
+    execute(univ_regexp_nocase());
+    execute(univ_pattern_nocase());
   }
 }
diff --git a/regression_test/predefFunction/regex_OK.ttcn b/regression_test/predefFunction/regex_OK.ttcn
index d76663f7475f2f3fd1edaef43042eaf0b66b17bb..a95fe2f4930da433d16c005adcbae8ba66803e3a 100644
--- a/regression_test/predefFunction/regex_OK.ttcn
+++ b/regression_test/predefFunction/regex_OK.ttcn
@@ -153,9 +153,31 @@ testcase  regexp_degen() runs on PDTestComponent {
   }
 }
 
+const charstring c_cs_val := "aBc5XYz";
+const charstring c_cs_pattern := "(abc?xyz)";
+
+// case-insensitive regexp
+testcase regexp_nocase() runs on PDTestComponent {
+  // regexp with constants (calculated at compile-time)
+  var charstring v_res_const := regexp @nocase (c_cs_val, c_cs_pattern, 0);
+  if (v_res_const != c_cs_val) {
+    setverdict(fail, "Const regexp failed. Got: ", v_res_const, ", expected: ", c_cs_val);
+  }
+  
+  // regexp with variables (calculated at runtime)
+  var charstring v_cs_val := "aBE5XYz";
+  var charstring v_cs_pattern := "(ab[A-e]?xyz)";
+  var charstring v_res_var := regexp @nocase (v_cs_val, v_cs_pattern, 0);
+  if (v_res_var != v_cs_val) {
+    setverdict(fail, "Var regexp failed. Got: ", v_res_var, ", expected: ", v_cs_val);
+  }
+  setverdict(pass);
+}
+
 control {
 	execute (regexp_char());
 	execute (regexp_degen());
+	execute (regexp_nocase());
 }
 
 }
diff --git a/regression_test/templateCharstr/TtemplateCharstr.ttcn b/regression_test/templateCharstr/TtemplateCharstr.ttcn
index a9fa8c274cce2f3d3c63583b8038ef014766cf43..0e295445a10f093412b44688a49768b2c42b12bd 100644
--- a/regression_test/templateCharstr/TtemplateCharstr.ttcn
+++ b/regression_test/templateCharstr/TtemplateCharstr.ttcn
@@ -848,6 +848,24 @@ testcase templateCharstrDecmatchSelfRef() runs on templateCharstr_mycomp {
   else { setverdict(fail, 5); }
 }
 
+modulepar template charstring mpt_cs;
+  
+// case-insensitive pattern
+testcase templateCharstrPatternNocase() runs on templateCharstr_mycomp {
+  // pattern in template variable
+  var template charstring vt_cs := pattern @nocase "ab[A-e]?xyz";
+  var charstring val := "aBE5XYz";
+  if (not match(val, vt_cs)) {
+    setverdict(fail, "Var template pattern failed: ", match(val, vt_cs));
+  }
+  
+  // pattern in template module parameter
+  if (not match(val, mpt_cs)) {
+    setverdict(fail, "Var template pattern failed: ", match(val, mpt_cs));
+  }
+  setverdict(pass);
+}
+
 control {
  execute(templateCharstrSpec());
  execute(templateCharstrList());
@@ -881,5 +899,6 @@ control {
  execute(CR_TR00018474());
  execute(templateCharstrDecmatch());
  execute(templateCharstrDecmatchSelfRef());
+ execute(templateCharstrPatternNocase());
 }
 }
diff --git a/regression_test/templateCharstr/config.cfg b/regression_test/templateCharstr/config.cfg
index 9b8081fa3445a7dc629cdc1adc5f6f5e20065391..5479c9829878ba597355f2d16bf8b8eedb762f1a 100644
--- a/regression_test/templateCharstr/config.cfg
+++ b/regression_test/templateCharstr/config.cfg
@@ -11,6 +11,7 @@
 #
 ###############################################################################
 [MODULE_PARAMETERS]
+mpt_cs := pattern @nocase "ab[A-e]" & "?xyz";
 [LOGGING]
 Logfile := "templateCharstr.log"
 FileMask := LOG_ALL
diff --git a/usrguide/SoC_TITAN.docx b/usrguide/SoC_TITAN.docx
index 8440f723587ff955bc3f02c08563384533892b51..ae1c21fa1c1739ae2357e092483185cdeb3e5def 100644
Binary files a/usrguide/SoC_TITAN.docx and b/usrguide/SoC_TITAN.docx differ