diff --git a/compiler2/Type_chk.cc b/compiler2/Type_chk.cc
index 29501b709a1244b670921922666613644d6512b4..00b8a43d33dab85f63b3a3225e2836cc6ee8813a 100644
--- a/compiler2/Type_chk.cc
+++ b/compiler2/Type_chk.cc
@@ -105,12 +105,6 @@ void Type::chk()
     break;
   case T_ANYTYPE:
     // TODO maybe check for address type and add it automagically, then fall through
-    // anytype has untagged automatically
-    if(!xerattrib) {
-      xerattrib = new XerAttributes;
-    }
-    xerattrib->untagged_ = true;
-    // no break
   case T_SEQ_T:
   case T_SET_T:
   case T_CHOICE_T:
@@ -939,8 +933,7 @@ Value *Type::new_value_for_dfe(Type *last, const char *dfe_str, Common::Referenc
 
     return new Value(Common::Value::V_ENUM, val_id);
   }
-  // No T_ANYTYPE: anytype has untagged automatically.
-  case T_CHOICE_A: case T_CHOICE_T: {
+  case T_CHOICE_A: case T_CHOICE_T: case T_ANYTYPE: {
     // Try to guess which alternative the given DFE text belongs to.
     // Sort the fields based on typetype, so BOOL, INT, REAL, ENUM
     // are tried before the various string types
@@ -1764,7 +1757,7 @@ void Type::chk_xer_use_nil()
     case T_SEQ_A:
     case T_SET_T:
     case T_SET_A:
-    // No T_ANYTYPE: anytype has untagged automatically.
+    case T_ANYTYPE:
     case T_CHOICE_T:
     case T_CHOICE_A:
     case T_SEQOF:
@@ -2004,7 +1997,6 @@ void Type::chk_xer_use_type()
   if (!prefix) error("Type has USE-TYPE, but the module has no control namespace set");
 
   switch (last->typetype) {
-  // No T_ANYTYPE: anytype has untagged automatically.
   case T_CHOICE_A: case T_CHOICE_T: { // must be CHOICE; 37.2.1
     if (xerattrib->untagged_ || xerattrib->useUnion_) { // 37.2.5
       error("A type with USE-TYPE encoding instruction shall not also have"
@@ -2031,6 +2023,9 @@ void Type::chk_xer_use_type()
       }
     }
     break; }
+  case T_ANYTYPE:
+    error("USE-TYPE cannot be applied to anytype");
+    break;
   default:
     error("USE-TYPE can only applied to a CHOICE/union type");
     break;
@@ -2056,6 +2051,9 @@ void Type::chk_xer_use_union()
       else cf->error("Alternative of a CHOICE/union with USE-UNION must be character-encodable");
     }
     break; }
+  case T_ANYTYPE:
+    error("USE-UNION cannot be applied to anytype");
+    break;
   default:
     error("USE-UNION can only applied to a CHOICE/union type"); // 38.2.1
     break;
diff --git a/regression_test/XML/TTCNandXML/AnytypeTest.ttcnpp b/regression_test/XML/TTCNandXML/AnytypeTest.ttcnpp
index f93241920894ebb17fa904992f7bcf8c5ae0689d..61d863eeaa9488753ea102a45dea1798e2eec362 100644
--- a/regression_test/XML/TTCNandXML/AnytypeTest.ttcnpp
+++ b/regression_test/XML/TTCNandXML/AnytypeTest.ttcnpp
@@ -74,7 +74,10 @@ testcase dec_anytypealias() runs on SAP
 
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
 
-type record of anytype RoAnytype;
+type record of anytype RoAnytype
+with {
+  variant ([-]) "untagged"
+}
 
 DECLARE_XER_ENCODERS(RoAnytype, roat);
 DECLARE_EXER_ENCODERS(RoAnytype, roat);
@@ -114,8 +117,13 @@ testcase dec_roanytype() runs on SAP
 type record MyAnytypeRec {
   anytype anytype_field,
   MyAnytype anytype_field_alias,
+  anytype anytype_field2,
+  MyAnytype anytype_field_alias2,
   RoAnytype anytype_field_ro,
   charstring str
+} with {
+  variant (anytype_field) "untagged";
+  variant (anytype_field_alias) "untagged";
 }
 
 DECLARE_XER_ENCODERS(MyAnytypeRec, recat);
@@ -124,6 +132,8 @@ DECLARE_EXER_ENCODERS(MyAnytypeRec, recat);
 const MyAnytypeRec c_myanytyperec := 
 {anytype_field := {charstring := "abc"},
 anytype_field_alias := {charstring := "def"},
+anytype_field2 := {charstring := "abcdef"},
+anytype_field_alias2 := {charstring := "defghi"},
 anytype_field_ro := { {charstring := "ttt"}, {integer := 4}},
 str := "ghi"};
 
@@ -135,6 +145,12 @@ const universal charstring c_myanytyperec_str_b :=
 "\t<anytype_field_alias>\n"&
 "\t\t<charstring>def</charstring>\n"&
 "\t</anytype_field_alias>\n"&
+"\t<anytype_field2>\n"&
+"\t\t<charstring>abcdef</charstring>\n"&
+"\t</anytype_field2>\n"&
+"\t<anytype_field_alias2>\n"&
+"\t\t<charstring>defghi</charstring>\n"&
+"\t</anytype_field_alias2>\n"&
 "\t<anytype_field_ro>\n"&
 "\t\t<charstring>ttt</charstring>\n"&
 "\t\t<integer>4</integer>\n"&
@@ -146,6 +162,12 @@ const universal charstring c_myanytyperec_str :=
 "<MyAnytypeRec>\n"&
 "\t<charstring>abc</charstring>\n"&
 "\t<charstring>def</charstring>\n"&
+"\t<anytype_field2>\n"&
+"\t\t<charstring>abcdef</charstring>\n"&
+"\t</anytype_field2>\n"&
+"\t<anytype_field_alias2>\n"&
+"\t\t<charstring>defghi</charstring>\n"&
+"\t</anytype_field_alias2>\n"&
 "\t<anytype_field_ro>\n"&
 "\t\t<charstring>ttt</charstring>\n"&
 "\t\t<integer>4</integer>\n"&
@@ -167,6 +189,112 @@ testcase dec_myanytyperec() runs on SAP
 
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
 
+
+type record of anytype AnyTypeRo2
+with {
+  variant "untagged";
+  variant ([-]) "untagged";
+}
+
+type record MyAnytypeRec2 {
+  AnyTypeRo2 anytype_field_ro
+}
+
+
+DECLARE_XER_ENCODERS(MyAnytypeRec2, recat2);
+DECLARE_EXER_ENCODERS(MyAnytypeRec2, recat2);
+
+const MyAnytypeRec2 c_myanytyperec2 := {anytype_field_ro := {{charstring := "gdf"}, {integer := 44}}};
+
+const universal charstring c_myanytyperec2_str_b :=
+"<MyAnytypeRec2>\n"&
+"\t<anytype_field_ro>\n"&
+"\t\t<charstring>gdf</charstring>\n"&
+"\t\t<integer>44</integer>\n"&
+"\t</anytype_field_ro>"&
+"\n</MyAnytypeRec2>\n\n";
+
+const universal charstring c_myanytyperec2_str :=
+"<MyAnytypeRec2>\n"&
+"\t<charstring>gdf</charstring>\n"&
+"\t<integer>44</integer>\n"&
+"</MyAnytypeRec2>\n\n";
+
+testcase tc_enc_anytype_ro_untagged() runs on SAP {
+  CHECK_METHOD(bxer_enc_recat2, c_myanytyperec2, c_myanytyperec2_str_b);
+  CHECK_METHOD(exer_enc_recat2, c_myanytyperec2, c_myanytyperec2_str);
+}
+
+testcase tc_dec_anytype_ro_untagged() runs on SAP
+{
+  CHECK_DECODE(bxer_dec_recat2, c_myanytyperec2_str_b, MyAnytypeRec2, c_myanytyperec2);
+  CHECK_DECODE(exer_dec_recat2, c_myanytyperec2_str, MyAnytypeRec2, c_myanytyperec2);
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+type boolean MyBool 
+with {
+  variant "defaultForEmpty as 'true'";
+  variant "XSD:boolean";
+}
+
+type record DFERecAnyType {
+  anytype at
+} with {
+  variant (at) "untagged";
+}
+
+DECLARE_XER_ENCODERS(DFERecAnyType, dferec);
+DECLARE_EXER_ENCODERS(DFERecAnyType, dferec);
+
+const DFERecAnyType c_dferec := {at := {MyBool := true}};
+
+const universal charstring c_dferec_str :=
+"<DFERecAnyType>\n"&
+"\t<MyBool/>\n"&
+"</DFERecAnyType>\n\n";
+
+testcase tc_dec_anytype_DFE() runs on SAP {
+  CHECK_DECODE(exer_dec_dferec, c_dferec_str, DFERecAnyType, c_dferec);
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+type record UseNilRecAnyType {
+  anytype at optional
+} with {
+  variant "useNil";
+}
+
+DECLARE_XER_ENCODERS(UseNilRecAnyType, nilrec);
+DECLARE_EXER_ENCODERS(UseNilRecAnyType, nilrec);
+
+const UseNilRecAnyType c_nilrec := {at := {MyBool := true}};
+
+const universal charstring c_nilrec_str_b :=
+"<UseNilRecAnyType>\n"&
+"\t<at>\n"&
+"\t\t<MyBool><true/></MyBool>\n"&
+"\t</at>\n"&
+"</UseNilRecAnyType>\n\n";
+
+const universal charstring c_nilrec_str :=
+"<UseNilRecAnyType>\t<MyBool>true</MyBool>\n</UseNilRecAnyType>\n\n";
+
+testcase tc_enc_anytype_usenil() runs on SAP {
+  CHECK_METHOD(bxer_enc_nilrec, c_nilrec, c_nilrec_str_b);
+  CHECK_METHOD(exer_enc_nilrec, c_nilrec, c_nilrec_str);
+}
+
+testcase tc_dec_anytype_usenil() runs on SAP
+{
+  CHECK_DECODE(bxer_dec_nilrec, c_nilrec_str_b, UseNilRecAnyType, c_nilrec);
+  CHECK_DECODE(exer_dec_nilrec, c_nilrec_str, UseNilRecAnyType, c_nilrec);
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
 control {
   execute(enc_anytype());
   execute(dec_anytype());
@@ -179,10 +307,21 @@ control {
 
   execute(enc_myanytyperec());
   execute(dec_myanytyperec());
+
+  execute(tc_enc_anytype_ro_untagged());
+  execute(tc_dec_anytype_ro_untagged());
+
+  execute(tc_dec_anytype_DFE());
+
+  execute(tc_enc_anytype_usenil());
+  execute(tc_dec_anytype_usenil());
 }
 
+
+
 }
 with {
   encode "XML"
-  extension "anytype integer, charstring, octetstring"}
+  variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'";
+  extension "anytype integer, MyBool, charstring, octetstring"}
 
diff --git a/usrguide/referenceguide.doc b/usrguide/referenceguide.doc
index fa672711a88cc9941c948046c1fdff2e87621ea7..2462211d5907da75d408eaaadb448e8ef8cf05ad 100644
Binary files a/usrguide/referenceguide.doc and b/usrguide/referenceguide.doc differ