diff --git a/usrguide/java_referenceguide/5-mapping_ttcn3_data_types_to_java_constructs.adoc b/usrguide/java_referenceguide/5-mapping_ttcn3_data_types_to_java_constructs.adoc
index 185d93995c964a995d93887c5559023538a3eb48..d0ec8a78f0568dce23c18c4b7606d8a2ed9cd760 100644
--- a/usrguide/java_referenceguide/5-mapping_ttcn3_data_types_to_java_constructs.adoc
+++ b/usrguide/java_referenceguide/5-mapping_ttcn3_data_types_to_java_constructs.adoc
@@ -1155,15 +1155,13 @@ The generated Java class `Dummy` will have the following member functions:
 
 Setting the only possible value is important, because using the value of an unbound variable for anything will cause dynamic test case error.
 
-FIXME written to this point.
-
 == Compound Data Types
 
-The user-defined compound data types are implemented in {cpp} classes. These classes are generated by the compiler according to type definitions. In contrast with the basic types, these classes can be found in the generated code.
+The user-defined compound data types are implemented in Java classes. These classes are generated by the Java code generator according to type definitions. In contrast with the basic types, these classes can be found in the generated code.
 
 === Record and Set Type Constructs
 
-The TTCN–3 type constructs `record` and `set` are mapped in an identical way to {cpp}. There will be a {cpp} class for each record type in the generated code. This class builds up the record from its fields.footnote:[This section deals with the record and set types that have at least one field. See <<empty-types, Empty Types>> for the {cpp} mapping of empty record and set types.] The fields can be either basic or compound types.
+The TTCN–3 type constructs `record` and `set` are mapped in an identical way to Java. There will be a Java class for each record type in the generated code. This class builds up the record from its fields.footnote:[This section deals with the record and set types that have at least one field. See <<empty-types, Empty Types>> for the Java mapping of empty record and set types.] The fields can be either basic or compound types.
 
 Let us consider the following example type definition. The types `t1` and `t2` can be arbitrary.
 [source]
@@ -1178,28 +1176,32 @@ The generated class `t3` will have the following public member functions:
 
 .Public member functions of the class `t3`
 
-[width="100%",cols=",,",options="",]
+[width="100%",cols="20%,60%,20%",options="",]
 |=====================================================================================
 2+^.^|*Member functions* |*Notes*
 .3+^.^|_Constructors_
 |`t3()` |Initializes all fields to unbound value.
-|`t3(const t1& par_f1, const t2& par_f2)` |Initializes from given field values. The number of arguments equals to the number of fields.
-|`t3(const t3&)` |Copy constructor.
-^.^|_Destructor_
-|`Ëœt3()` |
-^.^|_Assignment operator_
-|`t3& operator=(const t3&)`  |Assigns the given value and setsthe bound flag for each field.
-.2+^.^|_Comparison operators_
-|boolean operator==(const t3&) const |Returns TRUE if all fields are equal and FALSE otherwise.
-|boolean operator!=(const t3&) const |
+|`t3(final t1 f1, final t2 f2 )` |Initializes from given field values. The number of arguments equals to the number of fields.
+|`t3( final t3 otherValue)` |Copy constructor.
+.2+^.^|_Assignment operator_
+|`t3 operator_assign(final t3 otherValue )`  |Assigns the given value and sets the bound flag for each field.
+|`t3 operator_assign(final Base_Type otherValue)`|
+.3+^.^|_Comparison operators_
+|boolean operator_equals( final t3 other_value) |Returns TRUE if all fields are equal and FALSE otherwise.
+|boolean operator_equals(final Base_Type other_value)|
+|boolean operator_not_equals( final t3 other_value) |
 .2+^.^|_Field access functions_
-|t1& f1();                     t2& f2(); |Gives access to the first/second field.
-|const t1& f1() const; const t2& f2() const; |The same, but it gives read-only access.
-.4+^.^|_Other member functions_
-|`int size_of() const` |Returns the size (number of fields).
-|`void log() const` |Puts the value into log. Like { f1 := 5, f2 := ”abc”}.
-|`boolean is_bound() const` |Returns whether the value is bound.
+|t1 get_field_f1(); t2 get_field_f2() |Gives access to the first/second field.
+|t1 constGet_field_f1(); t2 constGet_field_f2(); |The same, but it gives read-only access.
+.8+^.^|_Other member functions_
+|`TitanInteger size_of()` |Returns the size (number of fields).
+|`void log()` |Puts the value into log. Like { f1 := 5, f2 := ”abc”}.
+|`boolean is_present()` |Returns whether the value is present.
+|`boolean is_bound()` |Returns whether the value is bound.
+|`boolean is_value()` |Returns whether the value is a value.
 |`void clean_up()` |Deletes the value, setting it to unbound.
+|`void encode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
+|`void decode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
 |=====================================================================================
 
 The record value is unbound if one or more fields of it are unbound. Using the value of an unbound variable for anything (even for comparison) will cause dynamic test case error.
@@ -1215,61 +1217,49 @@ type record t3 {
 }
 ----
 
-The optional fields are implemented using a {cpp} template class called `OPTIONAL` that creates an optional value from any type. In the definition of the generated class `t3` the type `t2` will be replaced by `OPTIONAL<t2>` everywhere and anything else will not be changed.
+The optional fields are implemented using a Java generic class called `Optional` that creates an optional value from any type. In the definition of the generated class `t3`, the type `t2` will be replaced by `Optional<t2>` everywhere and anything else will not be changed.
 
-The instantiated template class `OPTIONAL<t2>` will have the following member functions:
+The class `Optional<TYPE extends Base_Type>` has the following member functions:
 
-.Table Public member functions of the class `OPTIONAL<t2>`
+.Table Public member functions of the class `Optional<TYPE extends Base_Type>`
 
-[width="100%",cols=",,",options="",]
+[width="100%",cols="20%,60%,20%",options="",]
 |================================================================================================================================================================================
 2+^.^|*Member functions* |*Notes*
-.8+^.^|_Constructors_
-|`OPTIONAL()` |Initializes to unbound value.
-|`OPTIONAL(template_sel init_val)` |Initializes to omit value, if the argument is OMIT VALUE.
-|`OPTIONAL(const t2& init_val)`  |Initializes to given value.
-|`OPTIONAL(const OPTIONAL& init_val)`  |Copy constructor.
-|`template <typename T_tmp> `|Initializes to given value of different (compatible) type.
-|`OPTIONAL(const OPTIONAL<T_tmp>&)` |
-|`template <typename T_tmp>` |Initializes to given optional value of different (compatible) type.
-|`OPTIONAL(const T_tmp&)` |
-^.^|_Destructor_
-|`ËœOPTIONAL()` |
-.6+^.^|_Assignment operators_
-|`OPTIONAL& operator=(template_sel)` |Assigns omit value, if the right value is OMIT VALUE.
-|`OPTIONAL& operator=(const OPTIONAL&)` |Assigns the given optional value.
-|`template <typename T_tmp>`|Assigns the given optional value of different (compatible) type.
-|`OPTIONAL& operator=(const OPTIONAL<T_tmp>&)`|
-|`template <typename T_tmp>` |Assigns the given value of different (compatible) type.
-|`OPTIONAL& operator=(const T_tmp&)` |
-.7+^.^|_Comparison operators_
-|boolean operator==(template_sel) const |Returns TRUE if the value is omit and the right side is OMIT VALUE or FALSE otherwise.
-|boolean operator==(const OPTIONAL&) const |Returns TRUE if the two values are equal or FALSE otherwise.
-|template <typename T_tmp> |Returns TRUE if the two values of different (compatible) types are equal or FALSE otherwise.
-|boolean operator!=(template_sel) const  |
-|boolean operator!=(const OPTIONAL&) const |
-|template <typename T_tmp> |
-|boolean operator!=(const OPTIONAL<T_tmp>&) const |
+.3+^.^|_Constructors_
+|`Optional(final Class<TYPE> clazz)` |Initializes to unbound value, with a class.
+|`Optional(final Class<TYPE> clazz, final template_sel otherValue)` |Initializes to omit value, if the argument is OMIT VALUE.
+|`Optional(final Optional<TYPE> otherValue)`  |Copy constructor.
+.3+^.^|_Assignment operators_
+|`Optional<TYPE> operator_assign(final template_sel otherValue)` |Assigns omit value, if the right value is OMIT VALUE.
+|`Optional<TYPE> operator_assign(final Optional<TYPE> otherValue)` |Assigns the given optional value.
+|`Optional<TYPE> operator_assign(final Base_Type otherValue)`|
+.5+^.^|_Comparison operators_
+|boolean operator_equals(final template_sel otherValue) |Returns TRUE if the value is omit and the right side is OMIT VALUE or FALSE otherwise.
+|boolean operator_equals(final Optional<TYPE> otherValue) |Returns TRUE if the two values are equal or FALSE otherwise.
+|boolean operator_equals(final Base_Type otherValue)|
+|boolean operator_not_equals(final template_sel otherValue)  |
+|boolean operator_not_equals(final Optional<TYPE> otherValue) |
 .2+^.^|_Casting operators_
-|operator t2&() |Gives read-write access to the value. If the value was not previously present, sets the bound flag true and the value will be initialized to unbound.
-|operator const t2&() const |Gives read-only access to the value. If the value is not present, causes a dynamic test case error.
-.2+^.^|_Function call operators_
-|t2& operator()() |Gives read-write access to the value. If the value was not previously present, sets the bound flag true and the value will be initialized to unbound.
-|const t2& operator()() const |Gives read-only access to the value. If the value is not present, causes a dynamic test case error.
-.4+^.^|_Other member functions_
-|`boolean ispresent() const` |Returns TRUE if the value is present, FALSE if the value is omit or causes dynamic test case error if the value is unbound.
-|`void log() const` |Puts the optional value into log. Either ”omit” or the value of t2.
-|`boolean is_bound() const` |Returns whether the value is bound.
+|TYPE get() |Gives read-write access to the value. If the value was not previously present, sets the bound flag true and the value will be initialized to unbound.
+|TYPE constGet() |Gives read-only access to the value. If the value is not present, causes a dynamic test case error.
+.7+^.^|_Other member functions_
+|`boolean ispresent()` |Returns TRUE if the value is present, FALSE if the value is omit or causes dynamic test case error if the value is unbound.
+|`boolean is_present()` |Returns TRUE if the value is present, false otherwise.
+|`boolean is_value()` |Returns TRUE if the value is present and is a value, false otherwise.
+|`boolean is_bound()` |Returns TRUE if the value is present or omit, false otherwise.
+|`boolean is_optional()`| return true;
+|`void log()` |Puts the optional value into log. Either ”omit” or the value of t2.
 |`void clean_up()` |Deletes the value, setting it to unbound.
 |================================================================================================================================================================================
 
-In some member functions of the template class `OPTIONAL` the enumerated C type `template_sel` is used. It has many possible values, but in the optional class only `OMIT_VALUE` can be used, which stands for the TTCN–3 omit. Usage of other predefined values of `template_sel` will cause dynamic test case error.
+In some member functions of the generic class `Optional` the enumerated Java type `template_sel` is used. It has many possible values, but in the optional class only `OMIT_VALUE` can be used, which stands for the TTCN–3 omit. Usage of other predefined values of `template_sel` will cause dynamic test case error.
 
 Using the value of an unbound optional field for anything will also cause dynamic test case error.
 
 === Union Type Construct
 
-The TTCN–3 type construct union is implemented in a {cpp} class for each union type in the generated code. This class may contain any, but exactly one of its fields. The fields can be either basic or compound types or even identical types.
+The TTCN–3 type construct union is implemented in a Java class for each union type in the generated code. This class may contain any, but exactly one of its fields. The fields can be either basic or compound types or even identical types.
 
 Let us consider the following example type definition. The types `t1` and `t2` can be arbitrary.
 [source]
@@ -1282,50 +1272,55 @@ type union t3 {
 
 An ancillary enumerated type is created in the generated class `t3`, which represents the selection:
 [source, subs="+quotes"]
-enum union_selection_type { UNBOUND_VALUE = 0, ALT_f1 = 1, ALT_f2 = 2 };
+enum union_selection_type { UNBOUND_VALUE,  ALT_f1,  ALT_f2 };
 
-The type `t3::union_selection_type` is used to distinguish the fields of the union. The predefined constant values are generated as `t3::ALT_`<field name>.
+The type `t3.union_selection_type` is used to distinguish the fields of the union. The predefined constant values are generated as `t3.ALT_`<field name>.
 
 The generated class `t3` will have the following public member functions:
 
 .Public member functions of the class `t3`
 
-[width="100%",cols=",,",options="header",]
+[width="100%",cols="20%,60%,20%",options="header",]
 |=========================================================================================================================================================================
 2+^.^|*Member functions* |*Notes*
 .2+^.^|_Constructors_
 |`t3()` |Initializes to unbound value.
-|`t3(const t3&)` |Copy constructor.
-^.^|_Destructor_
-|`Ëœt3()` |
-^.^|_Assignment operator_
-|`t3& operator=(const t3&)` |Assigns the given value.
-.2+^.^|_Comparison operators_
-|boolean operator==(const t3&) const |Returns TRUE if the selections and field values are equal and FALSE otherwise.
-|boolean operator!=(const t3&) const |
+|`t3(final t3 otherValue)` |Copy constructor.
+.2+^.^|_Assignment operator_
+|`t3 operator_assign( final t3 otherValue )` |Assigns the given value.
+|`t3 operator_assign( final Base_Type otherValue )`|
+.3+^.^|_Comparison operators_
+|boolean operator_equals( final t3 otherValue ) |Returns TRUE if the selections and field values are equal and FALSE otherwise.
+|boolean operator_equals( final Base_Type otherValue )|
+|boolean operator_not_equals( final t3 otherValue ) |
 .4+^.^|_Field access functions_
-|const t1& f1() const  |Selects and gives access to the first field. If other field was previously selected, its value will be destroyed.
-|t1& f1() |Gives read-only access to the first field. If other field is selected, this function will cause a dynamic test case error. So use get_selection() first.
-|t2& f2() |
-|const t2& f2() const |
-.4+^.^|_Other member functions_
-|`union_selection_type get_selection() const` |Returns the current selection. It will return t3::UNBOUND VALUE if the value is unbound, t3::ALT_f1 if the first field was selected, and so on.
-|`void log() const` |Puts the value into log. Example: { f1 := 5 } or { f2 := "abc" }.
-|`boolean is_bound() const` |Returns whether the value is bound.
+|t1 constGet_field_f1()  |Gives read-only access to the first field. If other field is selected, this function will cause a dynamic test case error. So use get_selection() first.
+|t1 get_field_f1() | Selects and gives access to the first field. If other field was previously selected, its value will be destroyed.
+|t2 constGet_field_f2() |
+|t2 get_field_f2() |
+.9+^.^|_Other member functions_
+|`union_selection_type get_selection()` |Returns the current selection. It will return t3.UNBOUND VALUE if the value is unbound, t3.ALT_f1 if the first field was selected, and so on.
+|`boolean ischosen(final union_selection_type checked_selection)`| Checks if the provided field is selected or not.
+|`void log()` |Puts the value into log. Example: { f1 := 5 } or { f2 := "abc" }.
+|`boolean is_present()` |Returns whether the value is present.
+|`boolean is_bound()` |Returns whether the value is bound.
+|`boolean is_value()` |Returns whether the value is a value.
 |`void clean_up()` |Deletes the value, setting it to unbound.
+|`void encode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
+|`void decode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
 |=========================================================================================================================================================================
 
 Using the value of an unbound `union` variable for anything will cause dynamic test case error.
 
 ==== The anytype
 
-The TTCN-3 anytype is implemented as a {cpp} class named anytype. The class is generated only if an actual anytype access is present in the module. It has the same interface as any other {cpp} class generated for a union, with a few differences:
+The TTCN-3 anytype is implemented as a Java class named anytype. It has the same interface as any other Java class generated for a union, with a few differences:
 
-If a field is a built-in type or the address type, the name used in `union_selection_type` is the name of the runtime class implementing the type (usually the name of the type in all uppercase).
+If a field is a built-in type or the address type, the name used in `union_selection_type` is the name of the runtime class implementing the type.
 
 If a field is a user-defined type, the mapping rules in <<mapping-of-names-and-identifiers, Mapping of Names and Identifiers>> above apply.
 
-The names of field accessor functions are prefixed with AT_. This is necessary, because otherwise the accessor function looks like a constructor to {cpp}.
+The names of field accessor functions are prefixed with `get_field_` or `constGet_field_` as with other unions.
 
 For example, for the following module
 [source]
@@ -1344,85 +1339,84 @@ with {
 
 The generated class name will be "anytype". The union_selection_type enumerated type will be:
 [source, subs="+quotes"]
-enum union_selection_type { UNBOUND_VALUE = 0, ALT_INTEGER = 1, ALT_myrec = 2, ALT_CHARSTRING = 3 };
+enum union_selection_type { UNBOUND_VALUE,  ALT_TitanInteger,  ALT_myrec,  ALT_TitanCharString };
 
 The field accessor methods will be:
 [source]
 ----
-INTEGER&    AT_INTEGER();
-myrec&      AT_myrec();
-CHARSTRING& AT_CHARSTRING();
+TitanInteger get_field_TitanInteger();
+myrec get_field_myrec();
+TitanCharString get_field_TitanCharString();
 ----
 
 === Record of Type Construct
 
-The TTCN–3 type construct `record` of makes a variable length sequence from one given type. This construct is implemented as a {cpp} class.
+The TTCN–3 type construct `record` of makes a variable length sequence from one given type. This construct is implemented as a Java class.
 
 Let us consider the following example type definition. The type t1 can be arbitrary.
 [source, subs=+quotes]
 type record of t1 t2;
 
-This definition will be translated to a {cpp} class that will be called t2.
+This definition will be translated to a Java class that will be called t2.
 
-There is an `enum` type called `null_type` defined in the Base Library that has only one possible value. NULL_VALUE stands for the empty `"record of"` value, that is, for {}.
+There is an `enum` type called `TitanNull_Type` defined in the Base Library that has only one possible value. `NULL_VALUE` stands for the empty `"record of"` value, that is, for {}.
 
 Class `t2` will have the following public member functions:
 
 .Public member functions of the class `t2`
 
-[width="100%",cols=",,",options="",]
+[width="100%",cols="20%,60%,20%",options="",]
 |==================================================================================================================================================================================================================
 2+^.^|*Member functions* |*Notes*
 .3+^.^|_Constructors_
 |`t2()` |Initializes to unbound value.
-|`t2(null type)` |Initializes to the empty value.
-|`t2(const t2&)` |Copy constructor.
-^.^|_Destructor_
-|`Ëœt2()` |
-.2+^.^|_Assignment operator_
-|`t2& operator=(null type)` |Assigns the empty value.
-|`t2& operator=(const t2&)` |Assigns the given value.
-.4+^.^|_Comparison operators_
-|boolean operator==(null type) const  |Returns TRUE if the two values are equal and FALSE otherwise.
-|boolean operator==(const t2&) const |
-|boolean operator!=(null type) const |
-|boolean operator!=(const t2&) const |
+|`t2(final TitanNull_Type nullValue)` |Initializes to the empty value.
+|`t2( final t2 otherValue )` |Copy constructor.
+.3+^.^|_Assignment operator_
+|`t2 operator_assign(final TitanNull_Type nullValue)` |Assigns the empty value.
+|`t2 operator_assign( final t2 otherValue )` |Assigns the given value.
+|`t2 operator_assign(final Base_Type otherValue)`|
+.5+^.^|_Comparison operators_
+|boolean operator_equals( final TitanNull_Type nullValue)  |Returns TRUE if the two values are equal and FALSE otherwise.
+|boolean operator_equals( final t2 otherValue ) |
+|boolean operator_equals(final Base_Type otherValue)|
+|boolean operator_not_equals( final TitanNull_Type nullValue) |
+|boolean operator_not_equals( final t2 otherValue ) |
 .4+^.^|_Index operators_
-|t1& operator[](int) |Gives access to the given element. Indexing begins from zero. If this element of the variable was never used before, new (unbound) elements will be allocated up to (and including) this index.
-|t1& opetator[](const INTEGER&) |
-|const t1& operator[](int) const |Gives read-only access to the given element. Index overflow causes dynamic test case error.
-|const t1& opetator[](const INTEGER&) const |
+|t1 get_at(final int index_value) |Gives access to the given element. Indexing begins from zero. If this element of the variable was never used before, new (unbound) elements will be allocated up to (and including) this index.
+|t1 get_at(final TitanInteger index_value) |
+|t1 constGet_at(final int index_value) |Gives read-only access to the given element. Index overflow causes dynamic test case error.
+|t1 constGet_at(final TitanInteger index_value) |
 .4+^.^|_Rotating operators_
-|t2 operator<<=(int) |{cpp} equivalent of operator <@. (rotate left)
-|t2 operator<<=(const INTEGER&) |
-|t2 operator>>=(int) |{cpp} equivalent of operator @>. (rotate right)
-|t2 operator>>=(const INTEGER&) |
-^.^|_Concatenation operator_
-|t2 operator+(const t2&) const |Concatenates two arrays.
-.7+^.^|_Other member functions_
-|`int size_of() const` |Returns the number of elements, that is, the largest used index plus one and zero for the empty value.
-|`void set_size(int new_size)` |Sets the number of elements to the given value. If the value has fewer elements new (unbound) elements are allocated at the end. The excess elements at the end are erased if the value has more elements than necessary.
-|`t2 substr(int index, int returncount) const` |Returns the section of the array specified by the given start index and length.
-|`t2 replace(int index, int len, const t2& repl) const` |Returns a copy of the array, where the section indicated by the given start index and length is replaced by the given array.
-|`void log() const` |Puts the value into log. Like {1, 2, 3 }.
-|`boolean is_bound() const` |Returns whether the value is bound.
+|t2 rotate_left(final int rotate_count) |Java equivalent of operator <@. (rotate left)
+|t2 rotate_left(final TitanInteger rotate_count) |
+|t2 rotate_right(final int rotate_count) |Java equivalent of operator @>. (rotate right)
+|t2 rotate_right(final TitanInteger rotate_count) |
+.2+^.^|_Concatenation operator_
+|t2 operator_concatenate(final t2 other_value) |Concatenates two arrays.
+|t2 operator_concatenate(final TitanNull_Type null_value)|
+.5+^.^|_Other member functions_
+|`TitanInteger size_of()` |Returns the number of elements, that is, the largest used index plus one and zero for the empty value.
+|`void set_size(final int newSize)` |Sets the number of elements to the given value. If the value has fewer elements new (unbound) elements are allocated at the end. The excess elements at the end are erased if the value has more elements than necessary.
+|`t2 substr(final int index, final int returncount)` |Returns the section of the array specified by the given start index and length.
+|`t2 replace(final int index, final int len, final t2 repl)` |Returns a copy of the array, where the section indicated by the given start index and length is replaced by the given array.
+|`void log()` |Puts the value into log. Like {1, 2, 3 }.
+.6+^.^|_Other member functions_
+|`boolean is_present()` |Returns whether the value is present.
+|`boolean is_bound()` |Returns whether the value is bound.
+|`boolean is_value()` |Returns whether the value is a value.
 |`void clean_up()` |Deletes the value, setting it to unbound.
+|`void encode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
+|`void decode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
 |==================================================================================================================================================================================================================
 
 A `record of` value is unbound if no value has been assigned to it or it has at least one unbound element. Using the value of an unbound `record of` variable for anything will cause dynamic test case error.
 
 Starting with the largest index improves performance when filling a `record of value`.
 
-Other operators (global functions):
-[source]
-----
-boolean operator==(null_type null_value, const t2& other_value); // Equal
-boolean operator!=(null_type null_value, const t2& other_value); // Not equal
-----
-
 ==== Pre-generated `record of` and `set of` constructs
 
-The {cpp} classes for the `record of` and `set of` constructs of most predefined TTCN-3 types are pre-generated and part of the TITAN runtime. Only a type alias ({cpp} `typedef`) is generated for instances of these types declared in TTCN-3 and ASN.1 modules. There is a class with regular memory allocation and one with optimized memory allocation pre-generated for each type. These classes are located in the `PreGenRecordOf` namespace.
+The Java classes for the `record of` and `set of` constructs of most predefined TTCN-3 types are pre-generated and part of the TITAN runtime. For instances of these types declared in TTCN-3 and ASN.1 modules only their pre-generated names are used (and a comment telling which type definition it is representing). There is a class with regular memory allocation and one with optimized memory allocation pre-generated for each type. These classes are located in the `PreGenRecordOf` class inside the runtime.
 
 .Pre-generated classes for `record of`/`set of` predefined types
 
@@ -1467,104 +1461,121 @@ The {cpp} classes for the `record of` and `set of` constructs of most predefined
 
 The `set of` construct of TTCN–3 is implemented similarly to `record of`. The external interface of this class is exactly the same as in case of `record of`. For more details please see the previous section.
 
-In the internal implementation only the equality operator differs. Unlike in `record of`, it considers the unordered property of the `set of` type construct, that is, it returns `TRUE` if it is able to find exactly one pair for each element.
+In the internal implementation only the equality operator differs. Unlike in `record of`, it considers the unordered property of the `set of` type construct, that is, it returns `true` if it is able to find exactly one pair for each element.
 
-The index is a unique identifier for a `set of` element because the {cpp} class does not reorder the elements when a new element is added or an element is modified. The copy constructor also keeps the original order of elements.
+The index is a unique identifier for a `set of` element because the Java class does not reorder the elements when a new element is added or an element is modified. The copy constructor also keeps the original order of elements.
 
 === Enumerated Types
 
-The TTCN–3 `enumerated` type construct is implemented as a {cpp} class with an embedded enum type.
+The TTCN–3 `enumerated` type construct is implemented as a Java class with an embedded enum type.
 [source, subs="+quotes"]
 type enumerated Day { Monday (1), Tuesday, Wednesday (3) };
 
-The example above will result in the following, very similar C `enum` type definition which is embedded in the {cpp} class `Day`:
+The example above will result in the following, very similar Java `enum` type definition which is embedded in the Java class `Day`:
 [source, subs="+quotes"]
+----
+public enum enum_type {
+			Monday (1),
+			Tuesday (0),
+			Wednesday (3),
+			UNKNOWN_VALUE(2),
+			UNBOUND_VALUE(4);
+      ...
+----
 
-enum enum_type { Monday = 1, Tuesday = 0, Wednesday = 3,
-       UNKNOWN_VALUE = 2, UNBOUND_VALUE = 4 };
-
-The automatic assignment of numeric values is done according to the standard. Note that there are two extra enumerated values in C, which stand for the unknown and unbound values. They are used in the conversion functions described below. The compiler assigns the smallest two non-negative integer numbers that are not used by the user-defined enumerated values to the unknown and unbound values.
+The automatic assignment of numeric values is done according to the standard. Note that there are two extra enumerated values in Java, which stand for the unknown and unbound values. They are used in the conversion functions described below. The Java code generator assigns the smallest two non-negative integer numbers that are not used by the user-defined enumerated values to the unknown and unbound values.
 
-When using the C `enum` type and its values from user code the names must be prefixed with the {cpp} class name. The `enum` type in the above example can be referenced with `Day::enum_type`, its values can be accessed as `Day::Monday, Day::Tuesday`, and so on.
+When using the Java `enum` type and its values from user code the names must be prefixed with the Java class name. The `enum` type in the above example can be referenced with `Day.enum_type`, its values can be accessed as `Day.enum_type.Monday, Day.enum_type.Tuesday`, and so on.
 
 The class `Day` will have the following public member functions:
 
 .Public member functions of the class `Day`
 
-[width="100%",cols=",,",options="",]
+[width="100%",cols="20%,60%,20%",options="",]
 |=========================================================================================================================
 2+^.^|*Member functions* |*Notes*
 .4+^.^|_Constructors_
 |`Day()` |Initializes to unbound value.
-|`Day(int)` |Converts the given numeric value to Day::enum_type and initializes to it.
+|`Day(final int otherValue)` |Converts the given numeric value to Day.enum_type and initializes to it.
 Only valid values are accepted.
-|`Day(enum_type)` |Initializes to a given value.
-|`Day(const Day&)`  |Copy constructor.
-^.^|_Destructor_
-|`ËœDay()` |
-.3+^.^|_Assignment operator_
-|`Day& operator=(int)` |Converts the given numeric value to Day::enum_type and assigns it. Only valid values are accepted.
-|`Day& operator=(enum_type)` |Assigns the given value.
-|`Day& operator=(const Day&)` |
-.12+^.^|_Comparison operators_
-|boolean operator==(enum_type) const |Returns TRUE if the two values are equal and FALSE otherwise.
-|boolean operator==(const Day&) const |
-|boolean operator!=(enum_type) const |
-|boolean operator!=(const Day&) const |
-|boolean operator<(enum_type) const |
-|boolean operator<(const Day&) const |
-|boolean operator<=(enum_type) const |
-|boolean operator<=(const Day&) const |
-|boolean operator>(enum_type) const |
-|boolean operator>(const Day&) const |
-|boolean operator>=(enum_type) const |
-|boolean operator>=(const Day&) const |
-^.^|_Casting operator_
-|operator enum_type() const |Returns the enum_value.
-.5+^.^|_Static conversion functions_
-|static const char *enum_to_str(enum_type) |See below.
-|static enum_type str_to_enum(const char *)  |
-|static boolean is_valid_enum(int) |
-|static int enum2int(enum_type); |
-|static int enum2int(const Day&); |
-.3+^.^|_Non-static conversion functions_
-|int as_int() const; |See below
-|void from_int(int); |
-|void int2enum(int); |
-.3+^.^|_Other member functions_
-|`void log() const` |Puts the value into log. Like this: Monday
-|`boolean is_bound() const` |Returns whether the value is bound.
+|`Day(final Day.enum_type otherValue )` |Initializes to a given value.
+|`Day(final Day otherValue)`  |Copy constructor.
+.4+^.^|_Assignment operator_
+|`Day operator_assign(final int otherValue)` |Converts the given numeric value to Day::enum_type and assigns it. Only valid values are accepted.
+|`Day operator_assign(final Day.enum_type otherValue)` |Assigns the given value.
+|`Day operator_assign(final Day otherValue)` |
+|`Day operator_assign(final Base_Type otherValue)`|
+.6+^.^|_Comparison operators_
+|boolean operator_equals(final Day.enum_type otherValue) |Returns TRUE if the two values are equal and FALSE otherwise.
+|boolean operator_equals(final Day otherValue)|
+|boolean operator_equals(final Base_Type otherValue)|
+|boolean operator_not_equals(final Day.enum_type otherValue) |
+|boolean operator_not_equals(final Day otherValue) |
+|boolean operator_not_equals(final Base_Type otherValue)|
+.8+^.^|_Comparison operators_
+|boolean is_less_than(final Day.enum_type otherValue) |
+|boolean is_less_than(final Day otherValue)|
+|boolean is_less_than_or_equal(final Day.enum_type otherValue) |
+|boolean is_less_than_or_equal(final Day otherValue) |
+|boolean is_greater_than(final Day.enum_type otherValue) |
+|boolean is_greater_than(final Day otherValue) |
+|boolean is_greater_than_or_equal(final Day.enum_type otherValue) |
+|boolean is_greater_than_or_equal(final Day otherValue) |
+.6+^.^|_Static conversion functions_
+|static String enum_to_str(final enum_type enumPar) |See below.
+|static enum_type str_to_enum(final String strPar)  |
+|static boolean is_valid_enum(final int other_value) |
+|boolean is_valid_enum(final enum_type other_value)|
+|static int enum2int(final Day enumPar) |
+|static int enum2int(final Day.enum_type enumPar) |
+.4+^.^|_Non-static conversion functions_
+|int as_int(); |See below
+|void from_int(final int intValue); |
+|void int2enum(final int intValue); |
+|void int2enum(final TitanInteger intValue); |
+.7+^.^|_Other member functions_
+|`void log()` |Puts the value into log. Like this: Monday
+|`boolean is_preset()` |Returns whether the value is present.
+|`boolean is_bound()` |Returns whether the value is bound.
+|`boolean is_value()` |Returns whether the value is a value.
 |`void clean_up()` |Deletes the value, setting it to unbound.
+|`void encode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
+|`void decode(final TTCN_Typedescriptor p_td, final TTCN_Buffer p_buf, final coding_type p_coding, final int flavour)`|
 |=========================================================================================================================
 
-The static member function `Day::enum_to_str` converts the given parameter of type `Day::enum_type` to a NULL terminated C character string. It returns the string "<unknown>", if the input is not a valid value of the TTCN–3 enumerated type. The returned string is read-only, it must not be modified.
+The static member function `Day.enum_to_str` converts the given parameter of type `Day.enum_type` to a Java String. It returns the string "<unknown>", if the input is not a valid value of the TTCN–3 enumerated type. The returned string is read-only.
 
-The function `Day::str_to_enum` does the conversion in the reverse direction. It converts the symbolic enumerated identifier represented by a C character string back to the `Day::enum_type` equivalent. It returns the value `Day::UNKNOWN_VALUE` if the input string is not the equivalent of any of the possible values in the enumerated type. The behavior of this function is undefined if the input parameter does not point to an addressable memory area.
+The function `Day.str_to_enum` does the conversion in the reverse direction. It converts the symbolic enumerated identifier represented by a Java String back to the `Day.enum_type` equivalent. It returns the value `Day.UNKNOWN_VALUE` if the input string is not the equivalent of any of the possible values in the enumerated type.
 
-In the above two functions the strings are treated case sensitive and they shall not contain any whitespace or other characters that are not part of the enumerated value. In case of ASN.1 `ENUMERATED` types the strings used by `enum_to_str`, `str_to_enum` and log represent the TTCN–3 view of the enumerated value, that is, the hyphenation characters are mapped to a single underscore character. For example, if an ASN.1 enumerated type has a value with name `my-enum-value` and numeric value 2, the function `enum_to_str` will return the string `"my_enum_value"` if the input parameter equals to 2. Of course, its {cpp} equivalent will be `my_enum_value` with numeric value 2.
+In the above two functions the strings are treated case sensitive and they shall not contain any whitespace or other characters that are not part of the enumerated value. In case of ASN.1 `ENUMERATED` types the strings used by `enum_to_str`, `str_to_enum` and log represent the TTCN–3 view of the enumerated value, that is, the hyphenation characters are mapped to a single underscore character. For example, if an ASN.1 enumerated type has a value with name `my-enum-value` and numeric value 2, the function `enum_to_str` will return the string `"my_enum_value"` if the input parameter equals to 2. Of course, its Java equivalent will be `my_enum_value` with numeric value 2.
 
-Static member function `Day::is_valid_enum` returns the Boolean value `TRUE` if there is a defined enumerated value having numeric value equal to the `int` parameter and `FALSE` otherwise.
+Static member function `Day.is_valid_enum` returns the boolean value `true` if there is a defined enumerated value having numeric value equal to the `int` parameter and `false` otherwise.
 
-The static member function `Day::enum_to_int` converts the given parameter of type Day or `Day::enum_type` to its numeric value. The member function `as_int` does the same thing for the enumerated instance.
+The static member function `Day.enum_to_int` converts the given parameter of type Day or `Day.enum_type` to its numeric value. The member function `as_int` does the same thing for the enumerated instance.
 
 The member function `int_to_enum` initializes the enumerated instance with the enumerated value having numeric value equal to the given `int` parameter. A dynamic test case error is displayed if there is no such enumerated value. The member function `from_int` does the same thing.
 
-If a value of type `int` is passed to the constructor or assignment operator the value is accepted only if it is a numerical representation of a valid enumerated value, that is, the function `is_valid_enum` returns `TRUE`. A dynamic test case error occurs otherwise.
+If a value of type `int` is passed to the constructor or assignment operator the value is accepted only if it is a numerical representation of a valid enumerated value, that is, the function `is_valid_enum` returns `true`. A dynamic test case error occurs otherwise.
 
 To avoid run-time errors at the decoding of invalid messages the Test Port writer should use the constructor or assignment operator in this way:
 [source]
 ----
 Day myDayVar;
 int myIntVar = buffer[position];
-if (Day::is_valid_enum(myIntVar)) myDayVar = myIntVar;
-else myDayVar = Day::UNKNOWN_VALUE;
+if (Day.is_valid_enum(myIntVar)) {
+  myDayVar = new Day(myIntVar);
+} else {
+  myDayVar = new Day(Day.enum_type.UNKNOWN_VALUE);
+}
 ----
 
 Using the value of an unbound enumerated variable for anything will cause dynamic test case error.
 
 === The `address` Type
 
-The special TTCN–3 data type `address` is represented in {cpp} as if it was a regular data type. The name of the equivalent {cpp} class is `ADDRESS`. If it is an alias to another (either built-in or user-defined) type then a {cpp} `typedef` is used.
+The special TTCN–3 data type `address` is represented in Java as if it was a regular data type. The name of the equivalent Java class is `ADDRESS`.
+
+FIXME written to this point.
 
 == Predefined Functions