+void set_master_type_visited(unsigned long val);
+unsigned long get_master_type_visited(void);
+void inc_master_type_visited(void);
+
+/**
+ * Checks whether a pointer points to a type.
+ *
+ * @param thing an arbitrary pointer
+ *
+ * @return
+ * true if the thing is a type, else false
+ */
+int is_type (const void *thing);
+
+/**
+ * Checks whether two types are structurally equal.
+ *
+ * @param st pointer type
+ * @param lt pointer type
+ *
+ * @return
+ * true if the types are equal, else false.
+ * Types are equal if :
+ * - they are the same type kind
+ * - they have the same name
+ * - they have the same mode (if applicable)
+ * - they have the same type_state and, ev., the same size
+ * - they are class types and have:
+ * - the same members (see same_entity in entity.h)
+ * - the same supertypes -- the C-pointers are compared --> no recursive call.
+ * - the same number of subtypes. Subtypes are not compared,
+ * as this could cause a cyclic test.
+ * - the same peculiarity
+ * - they are structure types and have the same members
+ * - they are method types and have
+ * - the same parameter types
+ * - the same result types
+ * - they are union types and have the same members
+ * - they are array types and have
+ * - the same number of dimensions
+ * - the same dimension bounds
+ * - the same dimension order
+ * - the same element type
+ * - they are enumeration types and have the same enumerator names
+ * - they are pointer types and have the identical points_to type
+ * (i.e., the same C-struct to represent the type, type_id is skipped.
+ * This is to avoid endless recursions; with pointer types cyclic
+ * type graphs are possible.)
+ */
+int equal_type(type *tpy1, type *typ2);
+
+/**
+ * Checks whether two types are structural comparable.
+ *
+ * @param st pointer type
+ * @param lt pointer type
+ *
+ * @return
+ * true if type st is smaller than type lt, i.e. whenever
+ * lt is expected a st can be used.
+ * This is true if
+ * - they are the same type kind
+ * - mode(st) < mode (lt) (if applicable)
+ * - they are class types and st is (transitive) subtype of lt,
+ * - they are structure types and
+ * - the members of st have exactly one counterpart in lt with the same name,
+ * - the counterpart has a bigger type.
+ * - they are method types and have
+ * - the same number of parameter and result types,
+ * - the parameter types of st are smaller than those of lt,
+ * - the result types of st are smaller than those of lt
+ * - they are union types and have the members of st have exactly one
+ * @return counterpart in lt and the type is smaller
+ * - they are array types and have
+ * - the same number of dimensions
+ * - all bounds of lt are bound of st
+ * - the same dimension order
+ * - the same element type
+ * @return or
+ * - the element type of st is smaller than that of lt
+ * - the element types have the same size and fixed layout.
+ * - they are enumeration types and have the same enumerator names
+ * - they are pointer types and have the points_to type of st is
+ * @return smaller than the points_to type of lt.
+ *
+ */
+int smaller_type (type *st, type *lt);
+
+/**
+ * @page class_type Representation of a class type
+ *