diff --git a/COMMON/src/General_Types.ttcn b/COMMON/src/General_Types.ttcn
new file mode 100644
index 0000000..bd2dc54
--- /dev/null
+++ b/COMMON/src/General_Types.ttcn
@@ -0,0 +1,382 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson 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:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               General_Types.ttcn
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:
+
+module General_Types
+{
+
+group SimpleNativeTypes {
+
+  //****************************************************
+  // Bitstrings
+  //****************************************************
+
+  //bitstring with fixed length
+  type bitstring BIT1n length(1) with { variant "" };
+  type bitstring BIT2n length(2) with { variant "" };
+  type bitstring BIT3n length(3) with { variant "" };
+  type bitstring BIT4n length(4) with { variant "" };
+  type bitstring BIT5n length(5) with { variant "" };
+  type bitstring BIT6n length(6) with { variant "" };
+  type bitstring BIT7n length(7) with { variant "" };
+  type bitstring BIT8n length(8) with { variant "" };
+  type bitstring BIT9n length(9) with { variant "" };
+  type bitstring BIT12n length(12) with { variant "" };
+  type bitstring BIT14n length(14) with { variant "" };
+  type bitstring BIT15n length(15) with { variant "" };
+  type bitstring BIT16n length(16) with { variant "" };
+  type bitstring BIT56n length(56) with { variant "" };
+
+  //bitstring with length interval
+  type bitstring BIT14_24n length(14..24) with { variant "" };
+
+  //bitstring to be padded with fixed length
+  type bitstring BIT1np length(1) with { variant "" };
+  type bitstring BIT2np length(2) with { variant "" };
+  type bitstring BIT3np length(3) with { variant "" };
+  type bitstring BIT4np length(4) with { variant "" };
+  type bitstring BIT5np length(5) with { variant "" };
+  type bitstring BIT6np length(6) with { variant "" };
+  type bitstring BIT7np length(7) with { variant "" };
+  type bitstring BIT15np length(15) with { variant "" };
+
+  //bitstring with fixed length
+  type bitstring BIT1 length(1) with { variant "FIELDLENGTH(1)" };
+  type bitstring BIT2 length(2) with { variant "FIELDLENGTH(2)" };
+  type bitstring BIT3 length(3) with { variant "FIELDLENGTH(3)" };
+  type bitstring BIT4 length(4) with { variant "FIELDLENGTH(4)" };
+  type bitstring BIT5 length(5) with { variant "FIELDLENGTH(5)" };
+  type bitstring BIT6 length(6) with { variant "FIELDLENGTH(6)" };
+  type bitstring BIT7 length(7) with { variant "FIELDLENGTH(7)" };
+  type bitstring BIT8 length(8) with { variant "FIELDLENGTH(8)" };
+  type bitstring BIT9 length(9) with { variant "FIELDLENGTH(9)" };
+  type bitstring BIT10 length(10) with { variant "FIELDLENGTH(10)" };
+  type bitstring BIT11 length(11) with { variant "FIELDLENGTH(11)" };
+  type bitstring BIT12 length(12) with { variant "FIELDLENGTH(12)" };
+  type bitstring BIT14 length(14) with { variant "FIELDLENGTH(14)" };
+  type bitstring BIT15 length(15) with { variant "FIELDLENGTH(15)" };
+  type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" };
+  type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" };
+  type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" };
+  type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" };
+  
+  type record of bitstring Bitstrings with { variant "" };
+  type Bitstrings BitstringList;
+  type set of bitstring BitstringSet with { variant "" };
+
+  //****************************************************
+  // Octetstrings
+  //****************************************************
+
+  //octetstring with fixed length
+  type octetstring OCT0n length(0) with { variant "" };
+  type octetstring OCT1n length(1) with { variant "" };
+  type octetstring OCT2n length(2) with { variant "" };
+  type octetstring OCT3n length(3) with { variant "" };
+  type octetstring OCT4n length(4) with { variant "" };
+  type octetstring OCT5n length(5) with { variant "" };
+  type octetstring OCT6n length(6) with { variant "" };
+  type octetstring OCT7n length(7) with { variant "" };
+  type octetstring OCT8n length(8) with { variant "" };
+  type octetstring OCT9n length(9) with { variant "" };
+  type octetstring OCT10n length(10) with { variant "" };
+  type octetstring OCT11n length(11) with { variant "" };
+  type octetstring OCT12n length(12) with { variant "" };
+  type octetstring OCT13n length(13) with { variant "" };
+  type octetstring OCT14n length(14) with { variant "" };
+  type octetstring OCT15n length(15) with { variant "" };
+  type octetstring OCT16n length(16) with { variant "" };
+  type octetstring OCT17n length(17) with { variant "" };
+  type octetstring OCT18n length(18) with { variant "" };
+  type octetstring OCT19n length(19) with { variant "" };
+  type octetstring OCT20n length(20) with { variant "" };
+  type octetstring OCT28n length(28) with { variant "" };
+  type octetstring OCT32n length(32) with { variant "" };
+  type octetstring OCT34n length(34) with { variant "" };
+  type octetstring OCT46n length(46) with { variant "" };
+  type octetstring OCT50n length(50) with { variant "" };
+  type octetstring OCT69n length(69) with { variant "" };
+  type octetstring OCT100n length(100) with { variant "" };
+  type octetstring OCT128n length(128) with { variant "" };
+  type octetstring OCT500n length(500) with { variant "" };
+  type octetstring OCTNn with { variant "" };
+
+  //octetstring with length interval
+  type octetstring OCT1_3n length(1..3) with { variant "" };
+  type octetstring OCT1_4n length(1..4) with { variant "" };
+  type octetstring OCT1_5n length(1..5) with { variant "" };
+  type octetstring OCT1_6n length(1..6) with { variant "" };
+  type octetstring OCT1_7n length(1..7) with { variant "" };
+  type octetstring OCT1_8n length(1..8) with { variant "" };
+  type octetstring OCT1_12n length(1..12) with { variant "" };
+  type octetstring OCT1_15n length(1..15) with { variant "" };
+  type octetstring OCT1_16n length(1..16) with { variant "" };
+  type octetstring OCT1_18n length(1..18) with { variant "" };
+  type octetstring OCT1_20n length(1..20) with { variant "" };
+  type octetstring OCT1_24n length(1..24) with { variant "" };
+  type octetstring OCT1_32n length(1..32) with { variant "" };
+  type octetstring OCT1_34n length(1..34) with { variant "" };
+  type octetstring OCT1_46n length(1..46) with { variant "" };
+  type octetstring OCT1_50n length(1..50) with { variant "" };
+  type octetstring OCT1_112n length(1..112) with { variant "" };
+  type octetstring OCT1_127n length(1..127) with { variant "" };
+  type octetstring OCT1_128n length(1..128) with { variant "" };
+  type octetstring OCT1_172n length(1..172) with { variant "" };
+  type octetstring OCT3_5n length(3..5) with { variant "" };
+  type octetstring OCT3_7n length(3..7) with { variant "" };
+  type octetstring OCT3_8n length(3..8) with { variant "" };
+  type octetstring OCT3_14n length(3..14) with { variant "" };
+  type octetstring OCT3_17n length(3..17) with { variant "" };
+  type octetstring OCT4_8n length(4..8) with { variant "" };
+
+  type record of octetstring Octetstrings with { variant "" };
+  type Octetstrings OctetstringList;
+  type set of octetstring OctetstringSet with { variant "" };
+
+  //****************************************************
+  // Charstrings
+  //****************************************************
+
+  //charstring with fixed length
+  type charstring CHAR4 length (4);
+
+  type record of charstring Charstrings with { variant "" };
+  type Charstrings CharstringList;
+  type set of charstring CharstringSet with { variant "" };
+
+  //****************************************************
+  // Hexstrings
+  //****************************************************
+
+  //hexstring with fixed length
+  type hexstring HEX4n length(4) with { variant "" };
+  type hexstring HEX6n length(6) with { variant "" };
+  type hexstring HEX8n length(8) with { variant "" };
+  type hexstring HEX15n length(15) with { variant "" };
+  type hexstring HEX16n length(16) with { variant "" };
+  type hexstring HEX24n length(24) with { variant "" };
+
+  //hexstring with length interval
+  type hexstring HEX0_18n length(0..18) with { variant "" };
+  type hexstring HEX1_20n length(1..20) with { variant "" };
+  type hexstring HEX1_34n length(1..34) with { variant "" };
+
+  type record of hexstring Hexstrings with { variant "" };
+  type Hexstrings HexstringList;
+  type set of hexstring HexstringSet with { variant "" };
+
+  //****************************************************
+  // Integers
+  //****************************************************
+
+  //integer with fixed bit number
+  type integer INT3nb (0..7) with { variant "" };
+  type integer INT4nb (0..15) with { variant "" };
+  type integer INT5nb (0..31) with { variant "" };
+  type integer INT8nb (0..255) with { variant "" };
+
+  //integer with fixed bit number and with padding
+  type integer INT2nbp (0..3) with { variant "" };
+  type integer INT1nbp (0..1) with { variant "" };
+  type integer INT3nbp (0..7) with { variant "" };
+  type integer INT5nbp (0..31) with { variant "" };
+  type integer INT9nbp (0..511) with { variant "" };
+  type integer INT13nbp (0..8191) with { variant "" };
+  type integer INT15nbp (0..32767) with { variant "" };
+
+  //****************************************************
+  // Structures
+  //****************************************************
+
+  //integer record
+  type record of integer Integers with { variant "" };
+  type Integers IntegerList;
+  type record of Integers Integer_array with { variant "" };
+  type set of integer IntegerSet with { variant "" };
+  
+  //****************************************************
+  // Floats
+  //****************************************************
+  
+  type record of float Floats with { variant "" };
+  type Floats FloatList;
+  type set of float FloatSet with { variant "" };
+
+  //****************************************************
+  // Universal Charstrings
+  //****************************************************
+  
+  type record of universal charstring UniversalCharstrings with { variant "" };
+  type UniversalCharstrings UniversalCharstringList;
+  type set of universal charstring UniversalCharstringSet with { variant "" };
+  
+  //****************************************************
+  // Booleans
+  //****************************************************
+  
+  type record of boolean Booleans with { variant "" };
+  type Booleans BooleanList;
+  type set of boolean BooleanSet with { variant "" };
+  
+  //****************************************************
+  // Verdicttypes
+  //****************************************************
+  
+  type record of verdicttype Verdicttypes with { variant "" };
+  type Verdicttypes VerdicttypeList;
+  type set of verdicttype VerdicttypeSet with { variant "" };
+  
+  //****************************************************
+  // Anytypes
+  //****************************************************
+  
+  type record of anytype Anytypes with { variant "" };
+  type Anytypes AnytypeList;
+  type set of anytype AnytypeSet with { variant "" };
+  
+} // end group NativeTypes
+
+//****************************************************
+//****************************************************
+// RAW Encoded Types
+//****************************************************
+//****************************************************
+
+group SimpleRAWEncodedTypes {
+
+  //****************************************************
+  // Bitstrings
+  //****************************************************
+
+  //bitstring with fixed length
+  type bitstring BIT6_BO_LAST length (6) with {variant "BYTEORDER(last)"};
+  type bitstring BIT16_BO_LAST length (16) with {variant "BYTEORDER(last)"};
+  type bitstring BIT32_BO_LAST length (32) with {variant "BYTEORDER(last)"};
+
+  //****************************************************
+  // Octetstrings
+  //****************************************************
+  //octetstring with fixed length
+  type octetstring Dummy length(0) with { variant "FIELDLENGTH(0)" };
+  type octetstring OCT0 length(0) with { variant "FIELDLENGTH(0)" };
+  type octetstring OCT1 length(1) with { variant "FIELDLENGTH(1)" };
+  type octetstring OCT2 length(2) with { variant "FIELDLENGTH(2)" };
+  type octetstring OCT3 length(3) with { variant "FIELDLENGTH(3)" };
+  type octetstring OCT4 length(4) with { variant "FIELDLENGTH(4)" };
+  type octetstring OCT5 length(5) with { variant "FIELDLENGTH(5)" };
+  type octetstring OCT6 length(6) with { variant "FIELDLENGTH(6)" };
+  type octetstring OCT7 length(7) with { variant "FIELDLENGTH(7)" };
+  type octetstring OCT8 length(8) with { variant "FIELDLENGTH(8)" };
+  type octetstring OCT9 length(9) with { variant "FIELDLENGTH(9)" };
+  type octetstring OCT10 length(10) with { variant "FIELDLENGTH(10)" };
+  type octetstring OCT11 length(11) with { variant "FIELDLENGTH(11)" };
+  type octetstring OCT12 length(12) with { variant "FIELDLENGTH(12)" };
+  type octetstring OCT13 length(13) with { variant "FIELDLENGTH(13)" };
+  type octetstring OCT14 length(14) with { variant "FIELDLENGTH(14)" };
+  type octetstring OCT15 length(15) with { variant "FIELDLENGTH(15)" };
+  type octetstring OCT16 length(16) with { variant "FIELDLENGTH(16)" };
+  type octetstring OCT17 length(17) with { variant "FIELDLENGTH(17)" };
+  type octetstring OCT18 length(18) with { variant "FIELDLENGTH(18)" };
+  type octetstring OCT19 length(19) with { variant "FIELDLENGTH(19)" };
+  type octetstring OCT20 length(20) with { variant "FIELDLENGTH(20)" };
+  type octetstring OCT32 length(32) with { variant "FIELDLENGTH(32)" };
+  type octetstring OCT34 length(34) with { variant "FIELDLENGTH(34)" };
+  type octetstring OCT46 length(46) with { variant "FIELDLENGTH(46)" };
+
+  //octetstring with length interval
+  type octetstring OCT1_260 length(1..260) with { variant "" };
+  type octetstring OCT1_8   length(1..8) with { variant "" };
+  type octetstring OCT1_12  length(1..12) with { variant "" };
+  type octetstring OCT1_32  length(1..32) with { variant "" };
+  type octetstring OCT1_50  length(1..50) with { variant "" };
+  type octetstring OCT3_8   length(3..8) with { variant "" };
+
+  type octetstring OCTN with { variant "" };
+
+  //****************************************************
+  // Hexstrings
+  //****************************************************
+
+  //hexstring with fixed length
+  type hexstring HEX1 length(1) with {variant "FIELDLENGTH(1)"};
+
+  //hexstring with length interval
+  type hexstring HEX0_16 length(0..16) with { variant "" };
+  type hexstring HEX5_16 length(5..16) with { variant "" };
+  type hexstring HEX1_32 length(1..32) with { variant "" };
+
+
+  //****************************************************
+  // Integers
+  //****************************************************
+
+  //integer with fixed octet number
+  type integer INT1 (0..255) with { variant "FIELDLENGTH(8)" };
+  type integer LIN1 (0..255) with { variant "FIELDLENGTH(8)" };
+  type integer LIN2 (0..65535) with { variant "FIELDLENGTH(16)" };
+  type integer LIN2_BO_LAST (0..65535) with { variant "FIELDLENGTH(16), COMP(nosign), BYTEORDER(last)" };
+  type integer LIN3_BO_LAST (0..16777215) with { variant "FIELDLENGTH(24), COMP(nosign), BYTEORDER(last)" };
+  type integer LIN4_BO_LAST (0..4294967295) with { variant "FIELDLENGTH(32), COMP(nosign), BYTEORDER(last)" };
+
+  //integer with fixed bit number
+  type integer INT1b (0..1) with { variant "FIELDLENGTH(1)" };
+  type integer INT2b (0..3) with { variant "FIELDLENGTH(2)" };
+  type integer INT3b (0..7) with { variant "FIELDLENGTH(3)" };
+  type integer INT4b (0..15) with { variant "FIELDLENGTH(4)" };
+  type integer INT5b (0..31) with { variant "FIELDLENGTH(5)" };
+  type integer INT6b (0..63) with { variant "FIELDLENGTH(6)" };
+  type integer INT7b (0..127) with { variant "FIELDLENGTH(7)" };
+  type integer INT11b_BO_LAST ( 0 .. 2047 ) with { variant "FIELDLENGTH(11), COMP(nosign), BYTEORDER(last)" };
+  type integer INT12b_BO_LAST ( 0 .. 4095 ) with { variant "FIELDLENGTH(12), COMP(nosign), BYTEORDER(last)" };
+  type integer INT13b_BO_LAST ( 0 .. 8191 ) with { variant "FIELDLENGTH(13), COMP(nosign), BYTEORDER(last)" };
+  type integer INT14b_BO_LAST ( 0 .. 16383 ) with { variant "FIELDLENGTH(14), COMP(nosign), BYTEORDER(last)" };
+  type integer INT18b_BO_LAST ( 0 .. 262143 ) with { variant "FIELDLENGTH(18), COMP(nosign), BYTEORDER(last)" };
+  type integer INT20b_BO_LAST ( 0 .. 1048575 ) with { variant "FIELDLENGTH(20), COMP(nosign), BYTEORDER(last)" };
+  type integer INT31b_BO_LAST ( 0 .. 2147483647 ) with { variant "FIELDLENGTH(31), COMP(nosign), BYTEORDER(last)" };
+
+} // end group SimpleRAWEncodedTypes
+
+group ComponentTypes {
+  type component Dummy_comptype {}
+  type component Dummy_CT {}
+} // end group ComponentTypes
+
+group CompositeTypes {
+  type enumerated Protocols
+    { mtp3, sccp, isup, bicc, qaal2, gcp, bssap, bssmap, ranap, dtap }
+
+  type record of OCT1           OCT1List with { variant "" };
+  type record of OCT2           OCT2List with { variant "" };
+  type record of OCT3           OCT3List with { variant "" };
+  type record of OCT4           OCT4List with { variant "" };
+  type record of OCT5           OCT5List with { variant "" };
+  type record of OCT6           OCT6List with { variant "" };
+  type record of OCT7           OCT7List with { variant "" };
+
+  type record of Dummy_comptype ListOfDummy_comptype with { variant "" };
+  type record of Dummy_CT       ListOfDummy_CT with { variant "" };
+  type record of Protocols      ProtocolList with { variant "" };
+} // end group CompositeTypes
+
+} with { encode "RAW" } /* End of module General_Types */
+
diff --git a/COMMON/src/MobileDomainDefinitions.asn b/COMMON/src/MobileDomainDefinitions.asn
new file mode 100644
index 0000000..0685484
--- /dev/null
+++ b/COMMON/src/MobileDomainDefinitions.asn
@@ -0,0 +1,54 @@
+-- *******************************************************************************
+-- * Copyright (c) 2004, 2014  Ericsson 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:
+-- *   Zoltan Jasz - initial implementation and initial documentation
+-- *   Abhishek Gupta
+-- *   Attila Balasko
+-- *   Endre Kulcsar
+-- *   Gabor Bettesch
+-- *   Gabor Szalai
+-- *   Janos Kovesdi
+-- *   Sandor Palugyai
+-- *   Tibor Csondes
+-- *******************************************************************************
+-- 
+--   File:               MobileDomainDefinitions.asn
+--   Rev:                R9A
+--   Prodnr:             CNL 113 368
+--   Reference:          
+
+MobileDomainDefinitions {ccitt (0) identified-organization (4) etsi (0)
+			 mobileDomain (0) mobileDomainDefinitions (0) version1 (1)}
+
+DEFINITIONS ::=
+BEGIN
+
+IMPORTS ;
+
+-- Mobile DomainId
+
+mobileDomainId OBJECT IDENTIFIER ::= {ccitt (0) identified-organization (4) etsi (0) mobileDomain (0)}
+
+-- Mobile Subdomains
+
+gsm-NetworkId OBJECT IDENTIFIER ::= 			{mobileDomainId gsm-Network (1)}
+gsm-AccessId OBJECT IDENTIFIER ::= 			{mobileDomainId gsm-Access (2)}
+gsm-OperationAndMaintenanceId OBJECT IDENTIFIER ::= 	{mobileDomainId gsm-Operation-Maintenance (3)}
+gsm-MessagingId OBJECT IDENTIFIER ::= 			{mobileDomainId gsm-Messaging (4)}
+
+-- Common Component Ids for structuring Mobile Subdomains
+
+CommonComponentId ::= INTEGER (0..9)
+
+ac-Id CommonComponentId ::= 0
+as-Id CommonComponentId ::= 1
+ase-Id CommonComponentId ::= 2
+moduleId CommonComponentId ::= 3
+er-Id CommonComponentId ::= 4
+
+END -- MobileDomainDefinitions
diff --git a/COMMON/src/ProtocolModules_Common.grp b/COMMON/src/ProtocolModules_Common.grp
new file mode 100644
index 0000000..90214d5
--- /dev/null
+++ b/COMMON/src/ProtocolModules_Common.grp
@@ -0,0 +1,39 @@
+<!--
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson 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:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               ProtocolModules_Common.grp
+//  Description:        
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:          
+//
+//
+-->
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<FileGroup TITAN_version="3.1.pl0" >
+    <File_Group name="ProtocolModules_Common" >
+        <File path="General_Types.ttcn" />
+        <File path="MobileDomainDefinitions.asn" />
+        <File path="UsefulTtcn3Types.ttcn" />
+        <File path="XSD.ttcn" />	
+        <File path="general_typedefs.ttcn" />
+        <File path="http_www_w3_org_XML_1998_namespace.ttcn" />		
+    </File_Group>
+</FileGroup>
diff --git a/COMMON/src/UsefulTtcn3Types.ttcn b/COMMON/src/UsefulTtcn3Types.ttcn
new file mode 100644
index 0000000..911e1a5
--- /dev/null
+++ b/COMMON/src/UsefulTtcn3Types.ttcn
@@ -0,0 +1,99 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson 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:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:          UsefulTtcn3Types.ttcn
+//  Rev:           R9A
+//  Prodnr:        CNL 113 368
+//
+////////////////////////////////////////////////////////////////////////////////
+module UsefulTtcn3Types {
+
+
+    type integer byte (-128 .. 127) with { variant "/* 8 bit */" };
+
+    type integer unsignedbyte (0 .. 255) with { variant "/*unsigned 8 bit*/" };
+
+    type integer short (-32768 .. 32767) with { variant "/*16 bit*/" };
+
+    type integer unsignedshort (0 .. 65535) with { variant "/*unsigned 16 bit*/" };
+
+    type integer long (-2147483648 .. 2147483647) with { variant "/*32 bit*/" };
+
+    type integer unsignedlong (0 .. 4294967295) with { variant "/*unsigned 32 bit*/" };
+
+    type integer longlong /* (  -9223372036854775808 .. 9223372036854775807 ) */ with { variant "/*64 bit*/" };
+
+    type integer unsignedlonglong /* ( 0 .. 18446744073709551615 ) */ with { variant "/*unsigned 64 bit*/" };
+
+    type float IEEE754float with { variant "/*IEEE754 float*/" };
+
+    type float IEEE754double with { variant "/*IEEE754 double*/" };
+
+    type float IEEE754extfloat with { variant "/*IEEE754 extended float*/" };
+
+    type float IEEE754extdouble with { variant "/*IEEE754 extended double*/" };
+
+    type universal charstring utf8string with { variant "/*UTF-8*/" };
+
+    type universal charstring bmpstring ( char ( 0,0,0,0 ) .. char ( 0,0,255,255) ) with { variant "/*UCS-2*/" };
+
+    type universal charstring utf16string ( char ( 0,0,0,0 ) .. char ( 0,16,255,255) ) with { variant "/*UTF-16*/" };
+
+    type universal charstring iso8859string ( char ( 0,0,0,0 ) .. char ( 0,0,0,255) ) with { variant "/*8 bit*/" };
+
+    type record IDLfixed
+    {
+    	unsignedshort digits,
+    	short scale,
+    	charstring value_
+    }
+    with {
+    variant "/*IDL:fixed FORMAL/01-12-01 v.2.6*/";
+    };
+
+    /*
+    type charstring char length (1);
+
+    NOTE 1: The name of this useful type is the same as the TTCN-3 keyword used to denote universal
+    charstring values in the quadraple form. In general it is disallowed to use TTCN-3 keywords as
+    identifiers. The "char" useful type is a solitary exception and allowed only for backward compatibility
+    with previous versions of the TTCN-3 standard. (except Titan doesn't)
+
+    NOTE 2: The special string "8 bit" defined in clause 28.2.3 may be used with this type to specify a given encoding
+    for its values. Also, other properties of the base type can be changed by using attribute mechanisms.
+    */
+
+    type universal charstring uchar length (1);
+
+    /*
+    NOTE: Special strings defined in clause 28.2.3 except "8 bit" may be used with this type to specify a given
+    encoding for its values. Also, other properties of the base type can be changed by using attribute
+    mechanisms.
+    */
+
+    type bitstring bit length (1);
+
+    type hexstring hex length (1);
+
+    type octetstring octet length (1);
+
+}
+with {
+encode "XML";
+}
diff --git a/COMMON/src/XSD.ttcn b/COMMON/src/XSD.ttcn
new file mode 100644
index 0000000..64157a0
--- /dev/null
+++ b/COMMON/src/XSD.ttcn
@@ -0,0 +1,339 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson 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:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:          XSD.ttcn
+//  Rev:           R9A
+//  Prodnr:        CNL 113 368
+//
+////////////////////////////////////////////////////////////////////////////////
+module XSD {
+
+import from UsefulTtcn3Types all;
+
+//These constants are used in the XSD date/time type definitions
+const charstring
+  dash := "-",
+  cln  := ":",
+  year := "(0(0(0[1-9]|[1-9][0-9])|[1-9][0-9][0-9])|[1-9][0-9][0-9][0-9])",
+  yearExpansion := "(-([1-9][0-9]#(0,))#(,1))#(,1)",
+  month := "(0[1-9]|1[0-2])",
+  dayOfMonth := "(0[1-9]|[12][0-9]|3[01])",
+  hour := "([01][0-9]|2[0-3])",
+  minute := "([0-5][0-9])",
+  second := "([0-5][0-9])",
+  sFraction := "(.[0-9]#(1,))#(,1)",
+  endOfDayExt := "24:00:00(.0#(1,))#(,1)",
+  nums := "[0-9]#(1,)",
+  ZorTimeZoneExt := "(Z|[+-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))#(,1)",
+  durTime := "(T[0-9]#(1,)"&
+             "(H([0-9]#(1,)(M([0-9]#(1,)(S|.[0-9]#(1,)S))#(,1)|.[0-9]#(1,)S|S))#(,1)|"&
+             "M([0-9]#(1,)(S|.[0-9]#(1,)S)|.[0-9]#(1,)M)#(,1)|"&
+             "S|"&
+             ".[0-9]#(1,)S))"
+
+//anySimpleType
+
+type XMLCompatibleString AnySimpleType
+with {
+variant "XSD:anySimpleType";
+};
+
+//anyType;
+
+type record AnyType
+{
+	record of String attr,
+	record of String elem_list
+}
+with {
+variant "XSD:anyType";
+variant (attr) "anyAttributes";
+variant (elem_list) "anyElement";
+};
+// String types
+
+type XMLCompatibleString String
+with {
+variant "XSD:string";
+};
+
+type XMLStringWithNoCRLFHT NormalizedString
+with {
+variant "XSD:normalizedString";
+};
+
+type NormalizedString Token
+with {
+variant "XSD:token";
+};
+
+type XMLStringWithNoWhitespace Name
+with {
+variant "XSD:Name";
+};
+
+type XMLStringWithNoWhitespace NMTOKEN
+with {
+variant "XSD:NMTOKEN";
+};
+
+type Name NCName
+with {
+variant "XSD:NCName";
+};
+
+type NCName ID
+with {
+variant "XSD:ID";
+};
+
+type NCName IDREF
+with {
+variant "XSD:IDREF";
+};
+
+type NCName ENTITY
+with {
+variant "XSD:ENTITY";
+};
+
+type octetstring HexBinary
+with {
+variant "XSD:hexBinary";
+};
+
+type octetstring Base64Binary
+with {
+variant "XSD:base64Binary";
+};
+
+type XMLStringWithNoCRLFHT AnyURI
+with {
+variant "XSD:anyURI";
+};
+
+type charstring Language (pattern "[a-zA-Z]#(1,8)(-\w#(1,8))#(0,)")
+with {
+variant "XSD:language";
+};
+// Integer types
+
+type integer Integer
+with {
+variant "XSD:integer";
+};
+
+type integer PositiveInteger (1 .. infinity)
+with {
+variant "XSD:positiveInteger";
+};
+
+type integer NonPositiveInteger (-infinity .. 0)
+with {
+variant "XSD:nonPositiveInteger";
+};
+
+type integer NegativeInteger (-infinity .. -1)
+with {
+variant "XSD:negativeInteger";
+};
+
+type integer NonNegativeInteger (0 .. infinity)
+with {
+variant "XSD:nonNegativeInteger";
+};
+
+type longlong Long
+with {
+variant "XSD:long";
+};
+
+type unsignedlonglong UnsignedLong
+with {
+variant "XSD:unsignedLong";
+};
+
+type long Int
+with {
+variant "XSD:int";
+};
+
+type unsignedlong UnsignedInt
+with {
+variant "XSD:unsignedInt";
+};
+
+type short Short
+with {
+variant "XSD:short";
+};
+
+type unsignedshort UnsignedShort
+with {
+variant "XSD:unsignedShort";
+};
+
+type byte Byte
+with {
+variant "XSD:byte";
+};
+
+type unsignedbyte UnsignedByte
+with {
+variant "XSD:unsignedByte";
+};
+
+// Float types
+
+type float Decimal
+with {
+variant "XSD:decimal";
+};
+
+type IEEE754float Float
+with {
+variant "XSD:float";
+};
+
+type IEEE754double Double
+with {
+variant "XSD:double";
+};
+
+// Time types
+
+type charstring Duration (pattern
+  "{dash}#(,1)P({nums}(Y({nums}(M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|" &
+  "{durTime}#(,1))|M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|{durTime})")
+with {
+variant "XSD:duration";
+};
+
+type charstring DateTime (pattern
+  "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}T({hour}{cln}{minute}{cln}{second}" &
+ "{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" )
+with {
+variant "XSD:dateTime";
+};
+
+type charstring Time (pattern
+  "({hour}{cln}{minute}{cln}{second}{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" )
+with {
+variant "XSD:time";
+};
+
+type charstring Date (pattern
+  "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
+with {
+variant "XSD:date";
+};
+
+type charstring GYearMonth (pattern
+  "{yearExpansion}{year}{dash}{month}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gYearMonth";
+};
+
+type charstring GYear (pattern
+  "{yearExpansion}{year}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gYear";
+};
+
+type charstring GMonthDay (pattern
+ "{dash}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gMonthDay";
+};
+
+type charstring GDay (pattern
+  "{dash}{dash}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gDay";
+};
+
+type charstring GMonth (pattern
+  "{dash}{dash}{month}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gMonth";
+};
+
+// Sequence types
+
+type record of NMTOKEN NMTOKENS
+with {
+variant "XSD:NMTOKENS";
+};
+
+type record of IDREF IDREFS
+with {
+variant "XSD:IDREFS";
+};
+
+type record of ENTITY ENTITIES
+with {
+variant "XSD:ENTITIES";
+};
+
+type record QName
+{
+	AnyURI uri  optional,
+	NCName name
+}
+with {
+variant "XSD:QName";
+};
+
+// Boolean type
+
+type boolean Boolean
+with {
+variant "XSD:boolean";
+};
+
+//TTCN-3 type definitions supporting the mapping of W3C XML Schema built-in datatypes
+
+type utf8string XMLCompatibleString
+(
+	char(0,0,0,9)..char(0,0,0,9),
+	char(0,0,0,10)..char(0,0,0,10),
+	char(0,0,0,12)..char(0,0,0,12),
+  	char(0,0,0,32)..char(0,0,215,255),
+  	char(0,0,224,0)..char(0,0,255,253),
+  	char(0,1,0,0)..char(0,16,255,253)
+)
+
+type utf8string XMLStringWithNoWhitespace
+(
+	char(0,0,0,33)..char(0,0,215,255),
+  	char(0,0,224,0)..char(0,0,255,253),
+  	char(0,1,0,0)..char(0,16,255,253)
+)
+
+type utf8string XMLStringWithNoCRLFHT
+(
+	char(0,0,0,32)..char(0,0,215,255),
+ 	char(0,0,224,0)..char(0,0,255,253),
+  	char(0,1,0,0)..char(0,16,255,253)
+)
+
+}
+with{
+encode "XML"
+}
diff --git a/COMMON/src/general_typedefs.ttcn b/COMMON/src/general_typedefs.ttcn
new file mode 100644
index 0000000..6432e53
--- /dev/null
+++ b/COMMON/src/general_typedefs.ttcn
@@ -0,0 +1,236 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson 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:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               general_typedefs.ttcn
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:          
+
+module general_typedefs
+{
+
+group SimpleNativeTypes
+{
+//octetstring with fixed length
+type octetstring OCT0n length(0);
+type octetstring OCT1n length(1);
+type octetstring OCT2n length(2);
+type octetstring OCT3n length(3);
+type octetstring OCT4n length(4);
+type octetstring OCT5n length(5);
+type octetstring OCT6n length(6);
+type octetstring OCT7n length(7);
+type octetstring OCT8n length(8);
+type octetstring OCT9n length(9);
+type octetstring OCT10n length(10);
+type octetstring OCT11n length(11);
+type octetstring OCT12n length(12);
+type octetstring OCT13n length(13);
+type octetstring OCT14n length(14);
+type octetstring OCT15n length(15);
+type octetstring OCT16n length(16);
+type octetstring OCT17n length(17);
+type octetstring OCT18n length(18);
+type octetstring OCT19n length(19);
+type octetstring OCT20n length(20);
+type octetstring OCT28n length(28);
+type octetstring OCT32n length(32);
+type octetstring OCT34n length(34);
+type octetstring OCT46n length(46);
+type octetstring OCT50n length(50);
+type octetstring OCT69n length(69);
+type octetstring OCT100n length(100);
+type octetstring OCT128n length(128);
+type octetstring OCT500n length(500);
+type octetstring OCTNn;
+
+//octetstring with length interval
+type octetstring OCT1_3n length(1..3);
+type octetstring OCT1_4n length(1..4);
+type octetstring OCT1_5n length(1..5);
+type octetstring OCT1_6n length(1..6);
+type octetstring OCT1_7n length(1..7);
+type octetstring OCT1_8n length(1..8);
+type octetstring OCT1_12n length(1..12);
+type octetstring OCT1_15n length(1..15);
+type octetstring OCT1_16n length(1..16);
+type octetstring OCT1_18n length(1..18);
+type octetstring OCT1_20n length(1..20);
+type octetstring OCT1_24n length(1..24);
+type octetstring OCT1_34n length(1..34);
+type octetstring OCT1_46n length(1..46);
+type octetstring OCT1_50n length(1..50);
+type octetstring OCT1_112n length(1..112);
+type octetstring OCT1_127n length(1..127);
+type octetstring OCT1_128n length(1..128);
+type octetstring OCT1_172n length(1..172);
+type octetstring OCT3_5n length(3..5);
+type octetstring OCT3_7n length(3..7);
+type octetstring OCT3_8n length(3..8);
+type octetstring OCT3_17n length(3..17);
+type octetstring OCT4_8n length(4..8);
+
+//hexstring with fixed length
+type hexstring HEX24n length(24);
+
+//hexstring with length interval
+type hexstring HEX0_18n length(0..18);
+type hexstring HEX1_20n length(1..20);
+
+
+//bitstring with fixed length
+type bitstring BIT1n length(1);
+type bitstring BIT2n length(2);
+type bitstring BIT3n length(3);
+type bitstring BIT4n length(4);
+type bitstring BIT5n length(5);
+type bitstring BIT6n length(6);
+type bitstring BIT7n length(7);
+type bitstring BIT8n length(8);
+type bitstring BIT9n length(9);
+type bitstring BIT12n length(12);
+type bitstring BIT14n length(14);
+type bitstring BIT15n length(15);
+type bitstring BIT16n length(16);
+type bitstring BIT56n length(56);
+
+//bitstring with length interval
+type bitstring BIT14_24n length(14..24);
+
+//bitstring to be padded with fixed length 
+type bitstring BIT1np length(1);
+type bitstring BIT2np length(2);
+type bitstring BIT3np length(3);
+type bitstring BIT4np length(4);
+type bitstring BIT5np length(5);
+type bitstring BIT6np length(6);
+type bitstring BIT7np length(7);
+type bitstring BIT15np length(15);
+
+//integer with fixed bit number
+type integer INT3nb (0..7);
+type integer INT4nb (0..15);
+type integer INT5nb (0..31);
+type integer INT8nb (0..255);
+
+//integer with fixed bit number and with padding
+type integer INT2nbp (0..3);
+type integer INT1nbp (0..1);
+type integer INT3nbp (0..7);
+type integer INT5nbp (0..31);
+type integer INT9nbp (0..511);
+type integer INT13nbp (0..8095);
+type integer INT15nbp (0..32767);
+
+}// end group NativeTypes
+
+group SimpleRAWEncodedTypes
+{
+//octetstring with fixed length
+type octetstring Dummy length(0) with { variant "FIELDLENGTH(0)" };
+type octetstring OCT0 length(0) with { variant "FIELDLENGTH(0)" };
+type octetstring OCT1 length(1) with { variant "FIELDLENGTH(1)" };
+type octetstring OCT2 length(2) with { variant "FIELDLENGTH(2)" };
+type octetstring OCT3 length(3) with { variant "FIELDLENGTH(3)" };
+type octetstring OCT4 length(4) with { variant "FIELDLENGTH(4)" };
+type octetstring OCT5 length(5) with { variant "FIELDLENGTH(5)" };
+type octetstring OCT6 length(6) with { variant "FIELDLENGTH(6)" };
+type octetstring OCT7 length(7) with { variant "FIELDLENGTH(7)" };
+type octetstring OCT8 length(8) with { variant "FIELDLENGTH(8)" };
+type octetstring OCT9 length(9) with { variant "FIELDLENGTH(9)" };
+type octetstring OCT10 length(10) with { variant "FIELDLENGTH(10)" };
+type octetstring OCT11 length(11) with { variant "FIELDLENGTH(11)" };
+type octetstring OCT12 length(12) with { variant "FIELDLENGTH(12)" };
+type octetstring OCT13 length(13) with { variant "FIELDLENGTH(13)" };
+type octetstring OCT14 length(14) with { variant "FIELDLENGTH(14)" };
+type octetstring OCT15 length(15) with { variant "FIELDLENGTH(15)" };
+type octetstring OCT16 length(16) with { variant "FIELDLENGTH(16)" };
+type octetstring OCT17 length(17) with { variant "FIELDLENGTH(17)" };
+type octetstring OCT18 length(18) with { variant "FIELDLENGTH(18)" };
+type octetstring OCT19 length(19) with { variant "FIELDLENGTH(19)" };
+type octetstring OCT20 length(20) with { variant "FIELDLENGTH(20)" };
+type octetstring OCT32 length(32) with { variant "FIELDLENGTH(32)" };
+type octetstring OCT34 length(34) with { variant "FIELDLENGTH(34)" };
+type octetstring OCT46 length(46) with { variant "FIELDLENGTH(46)" };
+
+//octetstring with length interval
+type octetstring OCT1_12 length(1..12) with { variant "" };
+type octetstring OCT1_8 length(1..8) with { variant "" };
+type octetstring OCT3_8 length(3..8) with { variant "" };
+type octetstring OCT1_50 length(1..50) with { variant "" };
+type octetstring OCTN with { variant "" };
+
+//bitstring with fixed length
+type bitstring BIT1 length(1) with { variant "FIELDLENGTH (1)" };
+type bitstring BIT2 length(2) with { variant "FIELDLENGTH(2)" };
+type bitstring BIT3 length(3) with { variant "FIELDLENGTH(3)" };
+type bitstring BIT4 length(4) with { variant "FIELDLENGTH(4)" };
+type bitstring BIT5 length(5) with { variant "FIELDLENGTH(5)" };
+type bitstring BIT6 length(6) with { variant "FIELDLENGTH(6)" };
+type bitstring BIT7 length(7) with { variant "FIELDLENGTH(7)" };
+type bitstring BIT8 length(8) with { variant "FIELDLENGTH(8)" };
+type bitstring BIT9 length(9) with { variant "FIELDLENGTH(9)" };
+type bitstring BIT12 length(12) with { variant "FIELDLENGTH(12)" };
+type bitstring BIT14 length(14) with { variant "FIELDLENGTH(14)" };
+type bitstring BIT15 length(15) with { variant "FIELDLENGTH(15)" };
+type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" };
+type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" };
+type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" };
+type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" };
+
+type hexstring HEX1 length(1) with {variant "FIELDLENGTH(1)"};
+    
+//integer with fixed octet number
+type integer INT1 (0..255) with { variant "FIELDLENGTH(8)" };
+type integer LIN1 (0..255) with { variant "FIELDLENGTH(8)" }
+type integer LIN2 (0..65535) with { variant "FIELDLENGTH(16)" }
+
+//integer with fixed bit number
+type integer INT7b (0..127) with { variant "FIELDLENGTH(7)" };
+
+//integer record
+type record of integer Integers;
+type record of Integers Integer_array;
+
+} with {encode "RAW"} // end group SimpleRAWEncodedTypes
+
+  group ComponentTypes
+  {
+   type component Dummy_comptype {}
+  }
+
+  group CompositeTypes
+  {
+   type enumerated Protocols
+    { mtp3, sccp, isup, bicc, qaal2, gcp, bssap, bssmap, ranap, dtap }
+
+   type record of OCT1           OCT1List;
+   type record of OCT2           OCT2List;
+   type record of OCT3           OCT3List;
+   type record of OCT4           OCT4List;
+   type record of OCT5           OCT5List;
+   type record of OCT6           OCT6List;
+   type record of OCT7           OCT7List;
+
+   type record of Dummy_comptype ListOfDummy_comptype;
+   
+   type record of Protocols      ProtocolList;
+  }
+
+}with { encode "RAW"} /* End of module general_typedefs */ 
diff --git a/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn b/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn
new file mode 100644
index 0000000..99f570a
--- /dev/null
+++ b/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn
@@ -0,0 +1,150 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson 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:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               http_www_w3_org_XML_1998_namespace.ttcn
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:
+
+module http_www_w3_org_XML_1998_namespace {
+
+
+import from XSD all;
+
+
+/* See http://www.w3.org/XML/1998/namespace.html and
+   http://www.w3.org/TR/REC-xml for information about this namespace.
+
+    This schema document describes the XML namespace, in a form
+    suitable for import by other schema documents.  
+
+    Note that local names in this namespace are intended to be defined
+    only by the World Wide Web Consortium or its subgroups.  The
+    following names are currently defined in this namespace and should
+    not be used with conflicting semantics by any Working Group,
+    specification, or document instance:
+
+    base (as an attribute name): denotes an attribute whose value
+         provides a URI to be used as the base for interpreting any
+         relative URIs in the scope of the element on which it
+         appears; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML Base specification.
+
+    lang (as an attribute name): denotes an attribute whose value
+         is a language code for the natural language of the content of
+         any element; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML specification.
+
+    space (as an attribute name): denotes an attribute whose
+         value is a keyword indicating what whitespace processing
+         discipline is intended for the content of the element; its
+         value is inherited.  This name is reserved by virtue of its
+         definition in the XML specification.
+
+    Father (in any context at all): denotes Jon Bosak, the chair of 
+         the original XML Working Group.  This name is reserved by 
+         the following decision of the W3C XML Plenary and 
+         XML Coordination groups:
+
+             In appreciation for his vision, leadership and dedication
+             the W3C XML Plenary on this 10th day of February, 2000
+             reserves for Jon Bosak in perpetuity the XML name
+             xml:Father */
+
+
+/* This schema defines attributes and an attribute group
+        suitable for use by
+        schemas wishing to allow xml:base, xml:lang or xml:space attributes
+        on elements they define.
+
+        To enable this, such a schema must import this schema
+        for the XML namespace, e.g. as follows: */
+/* < */
+/* schema . . . */
+/* > */
+/* . . . */
+/* < */
+/* import namespace="http://www.w3.org/XML/1998/namespace"
+                    schemaLocation="http://www.w3.org/2001/03/xml.xsd"/ */
+/* > */
+/* Subsequently, qualified reference to any of the attributes
+        or the group defined below will have the desired effect, e.g. */
+/* < */
+/* type . . . */
+/* > */
+/* . . . */
+/* < */
+/* attributeGroup ref="xml:specialAttrs"/ */
+/* > */
+/* will define a type which will schema-validate an instance
+         element with any of those attributes */
+
+
+/* In keeping with the XML Schema WG's standard versioning
+   policy, this schema document will persist at
+   http://www.w3.org/2001/03/xml.xsd.
+   At the date of issue it can also be found at
+   http://www.w3.org/2001/xml.xsd.
+   The schema document at that URI may however change in the future,
+   in order to remain compatible with the latest version of XML Schema
+   itself.  In other words, if the XML Schema namespace changes, the version
+   of this document at
+   http://www.w3.org/2001/xml.xsd will change
+   accordingly; the version at
+   http://www.w3.org/2001/03/xml.xsd will not change. */
+
+
+/* In due course, we should install the relevant ISO 2- and 3-letter
+         codes as the enumerated possible values . . . */
+type XSD.Language Lang
+with {
+variant "name as uncapitalized";
+variant "attribute";
+};
+
+
+type enumerated Space
+{
+	default_,
+	preserve
+}
+with {
+variant "text 'default_' as 'default'";
+variant "name as uncapitalized";
+variant "defaultForEmpty as 'preserve'";
+variant "attribute";
+};
+
+
+/* See http://www.w3.org/TR/xmlbase/ for
+                     information about this attribute. */
+type XSD.AnyURI Base
+with {
+variant "name as uncapitalized";
+variant "attribute";
+};
+
+
+}
+with {
+encode "XML";
+variant "namespace as 'http://www.w3.org/XML/1998/namespace'";
+variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'";
+extension "version R9A"
+}
