diff --git a/compiler2/enum.c b/compiler2/enum.c
index c45d01b88ede6e4da7941fbd7a802278a71b1df7..ae3ed0fe8eae6e1334164d07cfa9421ff8593134 100644
--- a/compiler2/enum.c
+++ b/compiler2/enum.c
@@ -706,7 +706,7 @@ void defEnumClass(const enum_def *edef, output_struct *output)
       "{\n"
       "  int rd_ok = 1, type;\n"
 
-      "  const int e_xer = is_exer(p_flavor);\n"
+      "  const boolean e_xer = is_exer(p_flavor);\n"
       "  const boolean name_tag = !((!e_xer && is_record_of(p_flavor)) || (e_xer && ((p_td.xer_bits & UNTAGGED) ||(is_record_of(p_flavor) && is_exerlist(p_flavor)))));\n"
       "  if (e_xer && ((p_td.xer_bits & XER_ATTRIBUTE) || is_exerlist(p_flavor))) {\n"
       "    if ((p_td.xer_bits & XER_ATTRIBUTE)) verify_name(p_reader, p_td, e_xer);\n"
diff --git a/compiler2/record.c b/compiler2/record.c
index 977fba9b98a06a61fa1b0f07893b4342969e5ae0..4ca4d60d92972d13212ee6050b1ce8c62b2f9eb0 100644
--- a/compiler2/record.c
+++ b/compiler2/record.c
@@ -1922,7 +1922,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc)
     "  TTCN_EncDec_ErrorContext ec_0(\"Component '\");\n"
     "  TTCN_EncDec_ErrorContext ec_1;\n"
     "  int encoded_length=(int)p_buf.get_len();\n"
-    "  int e_xer = is_exer(p_flavor);\n"
+    "  boolean e_xer = is_exer(p_flavor);\n"
     "  const boolean omit_tag = e_xer && p_indent "
     "&& ((p_td.xer_bits & (UNTAGGED|XER_ATTRIBUTE)) || (p_flavor & (USE_NIL|USE_TYPE_ATTR)));\n"
     "  if (e_xer && (p_td.xer_bits & EMBED_VALUES)) p_flavor |= XER_CANONICAL;\n"
@@ -2417,7 +2417,7 @@ void gen_xer(const struct_def *sdef, char **pdef, char **psrc)
     "{\n"
     /* Remove XER_LIST, XER_RECOF from p_flavor. This is not required
      * for is_exer (which tests another bit), but for subsequent code. */
-    "  int e_xer = is_exer(p_flavor);\n"
+    "  boolean e_xer = is_exer(p_flavor);\n"
     "  unsigned long xerbits = p_td.xer_bits;\n"
     "  if (p_flavor & XER_TOPLEVEL) xerbits &= ~UNTAGGED;\n"
     "  const boolean omit_tag = e_xer && ((xerbits & (UNTAGGED|XER_ATTRIBUTE)) "
@@ -6029,7 +6029,7 @@ static void defEmptyRecordClass(const struct_def *sdef,
         "unsigned int p_flavor, int p_indent, embed_values_enc_struct_t*) const{\n"
         "  int encoded_length=(int)p_buf.get_len();\n"
         "  int is_indented = !is_canonical(p_flavor);\n"
-        "  int e_xer = is_exer(p_flavor);\n"
+        "  boolean e_xer = is_exer(p_flavor);\n"
         "  if (is_indented) do_indent(p_buf, p_indent);\n"
         "  p_buf.put_c('<');\n"
         "  if (e_xer) write_ns_prefix(p_td, p_buf);\n"
@@ -6045,7 +6045,7 @@ static void defEmptyRecordClass(const struct_def *sdef,
         "int %s::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& p_reader, "
         "unsigned int p_flavor, unsigned int /*p_flavor2*/, embed_values_dec_struct_t*)\n"
         "{\n"
-        "  int e_xer = is_exer(p_flavor);\n"
+        "  boolean e_xer = is_exer(p_flavor);\n"
         "  bound_flag = TRUE;\n"
         "  int rd_ok, depth=-1;\n"
         "  for (rd_ok=p_reader.Ok(); rd_ok==1; rd_ok=p_reader.Read()) {\n"
diff --git a/compiler2/union.c b/compiler2/union.c
index 1d60990978316c8ed796041431fe580cf0aba019..f3342ae541a5e2d33af7e9a99851bafa6e08215e 100644
--- a/compiler2/union.c
+++ b/compiler2/union.c
@@ -1725,7 +1725,7 @@ void defUnionClass(struct_def const *sdef, output_struct *output)
       "int %s::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& p_reader,"
       " unsigned int p_flavor, unsigned int p_flavor2, embed_values_dec_struct_t*)\n"
       "{\n"
-      "  int e_xer = is_exer(p_flavor);\n"
+      "  boolean e_xer = is_exer(p_flavor);\n"
       "  int type = 0;\n" /* None */
       "  int rd_ok=1, xml_depth=-1;\n"
       "%s%s"
diff --git a/core/ASN_CharacterString.cc b/core/ASN_CharacterString.cc
index 763a75e935b1b6addf376c932b5ab2119dc9f7ce..86b989b7752fd9a077e205ec9b6c2d47de74c3ba 100644
--- a/core/ASN_CharacterString.cc
+++ b/core/ASN_CharacterString.cc
@@ -827,7 +827,7 @@ int CHARACTER_STRING_identification::XER_encode(const XERdescriptor_t& p_td,
 int CHARACTER_STRING_identification::XER_decode(const XERdescriptor_t& p_td,
   XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   // we are supposed to be parked on our element
   for (int success = 1; success == 1; success = reader.Read()) {
     int type = reader.NodeType();
@@ -2535,7 +2535,7 @@ int CHARACTER_STRING_identification_context__negotiation::XER_encode(const XERde
 int CHARACTER_STRING_identification_context__negotiation::XER_decode(
   const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int type = reader.NodeType(), depth = -1;
   const char* name = (const char*)reader.Name();
   int success = reader.Ok();
@@ -3389,7 +3389,7 @@ int CHARACTER_STRING::XER_encode(const XERdescriptor_t& p_td, TTCN_Buffer& p_buf
 int CHARACTER_STRING::XER_decode(const XERdescriptor_t& p_td,
   XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int success = reader.Ok(), depth = -1, type;
   for (; success == 1; success = reader.Read()) {
     type = reader.NodeType();
diff --git a/core/ASN_EmbeddedPDV.cc b/core/ASN_EmbeddedPDV.cc
index fc9e344ffebb385b7146ce73ebba53dfb4a7ba84..33695173a85693f4af8deac28b4038b9b6da8ae1 100644
--- a/core/ASN_EmbeddedPDV.cc
+++ b/core/ASN_EmbeddedPDV.cc
@@ -778,7 +778,7 @@ int EMBEDDED_PDV_identification::XER_encode(const XERdescriptor_t& p_td,
   TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const
 {
   int indenting = !is_canonical(flavor);
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int encoded_length=(int)p_buf.get_len();
   if (indenting) do_indent(p_buf, indent);
   p_buf.put_c('<');
@@ -821,7 +821,7 @@ int EMBEDDED_PDV_identification::XER_encode(const XERdescriptor_t& p_td,
 int EMBEDDED_PDV_identification::XER_decode(const XERdescriptor_t& p_td,
   XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   // we are supposed to be parked on our element
   for (int success = 1; success == 1; success = reader.Read()) {
     int type = reader.NodeType();
@@ -1784,7 +1784,7 @@ int EMBEDDED_PDV_identification_syntaxes::XER_encode(const XERdescriptor_t& p_td
     TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const
 {
   int indenting = !is_canonical(flavor);
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int encoded_length=(int)p_buf.get_len();
   if (indenting) do_indent(p_buf, indent);
   p_buf.put_c('<');
@@ -2525,7 +2525,7 @@ int EMBEDDED_PDV_identification_context__negotiation::XER_encode(const XERdescri
     TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const
 {
   int indenting = !is_canonical(flavor);
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int encoded_length=(int)p_buf.get_len();
   if (indenting) do_indent(p_buf, indent);
   p_buf.put_c('<');
@@ -2547,7 +2547,7 @@ int EMBEDDED_PDV_identification_context__negotiation::XER_encode(const XERdescri
 int EMBEDDED_PDV_identification_context__negotiation::XER_decode(
   const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int type = reader.NodeType(), depth = -1;
   const char* name = (const char*)reader.Name();
   int success = reader.Ok();
@@ -3382,7 +3382,7 @@ int EMBEDDED_PDV::XER_encode(const XERdescriptor_t& p_td,
       (TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
   }
   int indenting = !is_canonical(flavor);
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int encoded_length=(int)p_buf.get_len();
   if (indenting) do_indent(p_buf, indent);
   p_buf.put_c('<');
@@ -3408,7 +3408,7 @@ int EMBEDDED_PDV::XER_encode(const XERdescriptor_t& p_td,
 
 int EMBEDDED_PDV::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int depth = 1, type, success;
   for (success = reader.Ok(); success == 1; success = reader.Read()) {
     type = reader.NodeType();
diff --git a/core/ASN_External.cc b/core/ASN_External.cc
index 6f0b9bbe52e1b0e145f548f12b2cff85fbc00bf7..9eacbc8e43ffc1295808da6d03cfe67f65a88c0c 100644
--- a/core/ASN_External.cc
+++ b/core/ASN_External.cc
@@ -417,7 +417,7 @@ namespace { /* anonymous namespace */
     TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const
   {
     int indenting = !is_canonical(flavor);
-    int exer  = is_exer(flavor);
+    boolean exer  = is_exer(flavor);
     int encoded_length=(int)p_buf.get_len();
     if (indenting) do_indent(p_buf, indent);
     p_buf.put_c('<');
@@ -456,7 +456,7 @@ namespace { /* anonymous namespace */
   int EXTERNALtransfer_encoding::XER_decode(const XERdescriptor_t& p_td,
     XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
   {
-    int exer  = is_exer(flavor);
+    boolean exer  = is_exer(flavor);
     int  success = reader.Ok(), type, depth = -1;
     for (; success==1; success = reader.Read()) {
       type = reader.NodeType();
@@ -574,7 +574,7 @@ namespace { /* anonymous namespace */
     TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const
   {
     int indenting = !is_canonical(flavor);
-    int exer  = is_exer(flavor);
+    boolean exer  = is_exer(flavor);
     int encoded_length=(int)p_buf.get_len();
     if (indenting) do_indent(p_buf, indent);
     p_buf.put_c('<');
@@ -598,7 +598,7 @@ namespace { /* anonymous namespace */
   int EXTERNALtransfer::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
                                    unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t*)
   {
-    int exer  = is_exer(flavor);
+    boolean exer  = is_exer(flavor);
     int success = reader.Ok(), depth = -1;
     for (; success == 1; success = reader.Read()) {
       int type = reader.NodeType();
diff --git a/core/ASN_Null.cc b/core/ASN_Null.cc
index ef8c4e07c9bfd81753d9d051d5b0970f4ce33515..539373b19ac7fb20ed0f35b2ea72e0c4fe956a16 100644
--- a/core/ASN_Null.cc
+++ b/core/ASN_Null.cc
@@ -236,7 +236,7 @@ boolean ASN_NULL::BER_decode_TLV(const TTCN_Typedescriptor_t& p_td,
 int ASN_NULL::XER_encode(const XERdescriptor_t& p_td,
     TTCN_Buffer& p_buf, unsigned int flavor, int indent, embed_values_enc_struct_t*) const
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   TTCN_EncDec_ErrorContext ec("While XER encoding NULL type: ");
   if(!is_bound()) {
     TTCN_EncDec_ErrorContext::error
@@ -260,7 +260,7 @@ int ASN_NULL::XER_encode(const XERdescriptor_t& p_td,
 int ASN_NULL::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
     unsigned int flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   TTCN_EncDec_ErrorContext ec("While XER decoding NULL type: ");
   int success = reader.Ok(), depth = -1;
   for (; success == 1; success = reader.Read()) {
diff --git a/core/Bitstring.cc b/core/Bitstring.cc
index 7dd470baab26ece5c3d4c62055ce7a27e9ac94cc..1ff0df731a77fa37caffa3157273df7d58c132e4 100644
--- a/core/Bitstring.cc
+++ b/core/Bitstring.cc
@@ -1092,7 +1092,7 @@ int BITSTRING::XER_encode(const XERdescriptor_t& p_td,
 int BITSTRING::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
                           unsigned int flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int success = reader.Ok(), depth = -1, type;
   boolean own_tag = !is_exerlist(flavor) && !(exer && (p_td.xer_bits & UNTAGGED));
 
diff --git a/core/Boolean.cc b/core/Boolean.cc
index df037f74aa0ca59d80ae674febd4bda4ad4f2634..2a03f93338c7395fa0115093d9380da1a1db2841 100644
--- a/core/Boolean.cc
+++ b/core/Boolean.cc
@@ -620,7 +620,7 @@ int BOOLEAN::XER_encode(const XERdescriptor_t& p_td,
   }
   int encoded_length=(int)p_buf.get_len();
 
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
 
   flavor |= (SIMPLE_TYPE | BXER_EMPTY_ELEM);
   if (begin_xml(p_td, p_buf, flavor, indent, FALSE) == -1) --encoded_length;
diff --git a/core/Float.cc b/core/Float.cc
index b4ea6074595d25d05717782309a1c4616496c0b1..3169c5a2d1eadfbdd72607b4e7e1ca54b5dc8174 100644
--- a/core/Float.cc
+++ b/core/Float.cc
@@ -962,7 +962,7 @@ int FLOAT::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
   unsigned int flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
   bound_flag = FALSE;
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int success = reader.Ok(), depth = -1;
   if (success <= 0) return 0;
   boolean own_tag = !(exer && (p_td.xer_bits & UNTAGGED)) && !is_exerlist(flavor);
diff --git a/core/Hexstring.cc b/core/Hexstring.cc
index 1515b3de9417262727e76149abcbb1987aacfdf6..d9dde38c99e27b3801f22252d486ea92e1fd7339 100644
--- a/core/Hexstring.cc
+++ b/core/Hexstring.cc
@@ -924,7 +924,7 @@ Because of this, the bit shifting is different. The first three bytes
 int HEXSTRING::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
   unsigned int flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int success = reader.Ok(), depth = -1, type;
   boolean own_tag = !is_exerlist(flavor) && !(exer && (p_td.xer_bits & UNTAGGED));
 
diff --git a/core/Objid.cc b/core/Objid.cc
index 522c7a6ca4f4f94f46c9ba2e80f8db81341d350f..bfdc4fe36fe36232dd690a18f85070c9aebba4ef 100644
--- a/core/Objid.cc
+++ b/core/Objid.cc
@@ -561,7 +561,7 @@ void OBJID::from_string(char* p_str)
 int OBJID::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
 		  unsigned int flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int success = reader.Ok(), depth = -1;
   for (; success == 1; success = reader.Read()) {
     int type = reader.NodeType();
diff --git a/core/Octetstring.cc b/core/Octetstring.cc
index 4f5ef7b9c9b9d4f4e90354d484e581960379efdd..c90a8be22d878909e5140c1511638eb6dadb2fbb 100644
--- a/core/Octetstring.cc
+++ b/core/Octetstring.cc
@@ -962,7 +962,7 @@ int OCTETSTRING::XER_encode(const XERdescriptor_t& p_td,
 int OCTETSTRING::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
     unsigned int flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int success = reader.Ok(), depth = -1, type;
   boolean own_tag = !is_exerlist(flavor) && !(exer && (p_td.xer_bits & UNTAGGED));
 
diff --git a/core/Optional.hh b/core/Optional.hh
index becc7ec3829ddeb62a3333555c0162d00677475e..fcc92e5158ed379b44370e98fbae01d9fba3eca7 100644
--- a/core/Optional.hh
+++ b/core/Optional.hh
@@ -1056,7 +1056,7 @@ int
 OPTIONAL<T_type>::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
   unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t* emb_val)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   for (int success = reader.Ok(); success==1; success=reader.Read()) {
     int type = reader.NodeType();
     const char * name; // name of the optional field
diff --git a/core/Universal_charstring.cc b/core/Universal_charstring.cc
index 0bb572077ba37bb38535c8b99f7a585a2ff8bfe9..19022aa1b847869155d96a1c750f7d89b887790a 100644
--- a/core/Universal_charstring.cc
+++ b/core/Universal_charstring.cc
@@ -2115,7 +2115,7 @@ universal_char const uspace = {0,0,0,32};
 int UNIVERSAL_CHARSTRING::XER_decode(const XERdescriptor_t& p_td,
   XmlReaderWrap& reader, unsigned int flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
-  int exer  = is_exer(flavor);
+  boolean exer  = is_exer(flavor);
   int success = reader.Ok(), depth = -1;
   boolean omit_tag = exer
     && ((p_td.xer_bits & UNTAGGED)
diff --git a/core/Verdicttype.cc b/core/Verdicttype.cc
index 26be2197bfe1d4aac9b8f2f08d8d8142caef2179..fe24ee04c304f4d2d4432b70cf373960497bedc6 100644
--- a/core/Verdicttype.cc
+++ b/core/Verdicttype.cc
@@ -319,7 +319,7 @@ int VERDICTTYPE::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& p_reader
   unsigned int p_flavor, unsigned int /*flavor2*/, embed_values_dec_struct_t*)
 {
   int rd_ok = 1, type;
-  const int e_xer = is_exer(p_flavor);
+  const boolean e_xer = is_exer(p_flavor);
   const boolean name_tag = !((!e_xer && is_record_of(p_flavor)) || (e_xer && ((p_td.xer_bits & UNTAGGED) ||(is_record_of(p_flavor) && is_exerlist(p_flavor)))));
   if (e_xer && ((p_td.xer_bits & XER_ATTRIBUTE) || is_exerlist(p_flavor))) {
     if ((p_td.xer_bits & XER_ATTRIBUTE)) verify_name(p_reader, p_td, e_xer);
diff --git a/core/XER.cc b/core/XER.cc
index 412ddef89d03307d3e4d89bde5ace3fbd349bada..d396100d575b87f5a19e12d80a6c523faed834f2 100644
--- a/core/XER.cc
+++ b/core/XER.cc
@@ -49,7 +49,7 @@ int do_indent(TTCN_Buffer& buf, int level)
   return level;
 }
 
-const char* verify_name(XmlReaderWrap& reader, const XERdescriptor_t& p_td, int exer)
+const char* verify_name(XmlReaderWrap& reader, const XERdescriptor_t& p_td, boolean exer)
 {
   const char *name = (const char*)reader.LocalName();
   const char *nsuri= (const char*)reader.NamespaceUri(); // NULL if no ns
@@ -103,7 +103,7 @@ const char* verify_name(XmlReaderWrap& reader, const XERdescriptor_t& p_td, int
   return name;
 }
 
-void verify_end(XmlReaderWrap& reader, const XERdescriptor_t& p_td, const int depth, int exer)
+void verify_end(XmlReaderWrap& reader, const XERdescriptor_t& p_td, const int depth, boolean exer)
 {
   TTCN_EncDec_ErrorContext endcontext("While checking end tag: ");
   verify_name(reader, p_td, exer);
diff --git a/core/XER.hh b/core/XER.hh
index 299ed36fa7ecab25dfba09b63b72f498ef0c66c7..28f8568f45f3c04002939aeb519ff74e9970eab9 100644
--- a/core/XER.hh
+++ b/core/XER.hh
@@ -15,7 +15,7 @@
 #ifndef XER_HH_
 #define XER_HH_
 
-//#include "Types.h"
+#include "Types.h"
 #include "Encdec.hh"
 #include <stddef.h> // for size_t
 #include <string.h> // strncmp for the inline function
@@ -178,6 +178,8 @@ inline boolean is_canonical(unsigned int f)
   return (f & XER_CANONICAL) != 0;
 }
 
+// exer 0 for Basic/Canonical XER, 1 for EXER
+// TODO: It would be better to have an enum for the exers
 inline boolean is_exer(unsigned int f)
 {
   return (f & XER_EXTENDED) != 0;
@@ -396,7 +398,7 @@ struct embed_values_dec_struct_t
  * @param exer \c true if Extended XER decoding, \c false for Basic and Canonical XER
  * @return \c true if \p name corresponds to the type descriptor, \c false otherwise.
  */
-inline boolean check_name(const char *name, const XERdescriptor_t& p_td, int exer)
+inline boolean check_name(const char *name, const XERdescriptor_t& p_td, boolean exer)
 {
   return strncmp(name, p_td.names[exer], p_td.namelens[exer]-2) == 0
     && name[p_td.namelens[exer]-2] == '\0';
@@ -425,7 +427,7 @@ boolean check_namespace(const char *ns_uri, const XERdescriptor_t& p_td);
  * @param exer 0 for Basic/Canonical XER, 1 for EXER
  * @return the name of the current element
  */
-const char* verify_name(XmlReaderWrap& reader, const XERdescriptor_t& p_td, int exer);
+const char* verify_name(XmlReaderWrap& reader, const XERdescriptor_t& p_td, boolean exer);
 
 /** Check the end tag
  *
@@ -437,7 +439,7 @@ const char* verify_name(XmlReaderWrap& reader, const XERdescriptor_t& p_td, int
  * @param depth XML tag depth (0 for top-level element)
  * @param exer 0 for Basic/Canonical XER, 1 for EXER
  */
-void verify_end(XmlReaderWrap& reader, const XERdescriptor_t& p_td, const int depth, int exer);
+void verify_end(XmlReaderWrap& reader, const XERdescriptor_t& p_td, const int depth, boolean exer);
 
 class TTCN_Buffer;
 
diff --git a/core2/Basetype2.cc b/core2/Basetype2.cc
index 4a800d14df189fc27d6cf312433784b20c3438bd..25ee272a2245e300fbae2deab31b374104799d4c 100644
--- a/core2/Basetype2.cc
+++ b/core2/Basetype2.cc
@@ -2255,7 +2255,7 @@ int Record_Of_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr
 int Record_Of_Type::XER_decode(const XERdescriptor_t& p_td,
   XmlReaderWrap& reader, unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t* emb_val)
 {
-  int exer = is_exer(flavor);
+  boolean exer = is_exer(flavor);
   unsigned long xerbits = p_td.xer_bits;
   if (flavor & XER_TOPLEVEL) xerbits &= ~UNTAGGED;
   boolean own_tag =
@@ -5139,7 +5139,7 @@ int Record_Type::XER_encode_negtest(const Erroneous_descriptor_t* p_err_descr,
 int Record_Type::XER_decode(const XERdescriptor_t& p_td, XmlReaderWrap& reader,
                             unsigned int flavor, unsigned int flavor2, embed_values_dec_struct_t* emb_val_parent)
 {
-  int exer = is_exer(flavor);
+  boolean exer = is_exer(flavor);
   int success, type;
   int depth=-1; // depth of the start tag
   unsigned long xerbits = p_td.xer_bits;