+void add_entity_overwrittenby (entity *ent, entity *overwrites);
+int get_entity_n_overwrittenby (entity *ent);
+int get_entity_overwrittenby_index(entity *ent, entity *overwrites);
+entity *get_entity_overwrittenby (entity *ent, int pos);
+void set_entity_overwrittenby (entity *ent, int pos, entity *overwrites);
+void remove_entity_overwrittenby(entity *ent, entity *overwrites);
+
+/**
+ * Checks whether a pointer points to an entity.
+ *
+ * @param thing an arbitrary pointer
+ *
+ * @return
+ * true if the thing is an entity, else false
+ */
+int is_entity (const void *thing);
+
+/** Returns true if the type of the entity is a primitive, pointer
+ enumeration or method type. */
+int is_atomic_entity(entity *ent);
+/** Returns true if the type of the entity is a class, structure,
+ array or union type. */
+int is_compound_entity(entity *ent);
+/** Returns true if the type of the entity is a Method type. */
+int is_method_entity(entity *ent);
+
+/** Returns non-zero if ent1 and ent2 have are equal except for their owner.
+ Two entities are equal if
+ - they have the same type (the same C-struct)
+ - ...?
+*/
+int equal_entity(entity *ent1, entity *ent2);
+
+/** Outputs a unique number for this entity if libfirm is compiled for
+ * debugging, (configure with --enable-debug) else returns the address
+ * of the type cast to long.
+ */
+long get_entity_nr(entity *ent);
+
+/** Returns the entities visited count. */
+unsigned long get_entity_visited(entity *ent);
+
+/** Sets the entities visited count. */
+void set_entity_visited(entity *ent, unsigned long num);
+
+/** Sets visited field in entity to entity_visited. */
+void mark_entity_visited(entity *ent);
+
+/** Returns true if this entity was visited. */
+int entity_visited(entity *ent);
+
+/** Returns true if this entity was not visited. */
+int entity_not_visited(entity *ent);
+
+/**
+ * Returns the mask of the additional entity properties.
+ * The properties are automatically inherited from the irg if available
+ * or from the method type if they were not set using
+ * set_entity_additional_properties() or
+ * set_entity_additional_property().
+ */
+unsigned get_entity_additional_properties(entity *ent);
+
+/** Sets the mask of the additional graph properties. */
+void set_entity_additional_properties(entity *ent, unsigned property_mask);
+
+/** Sets one additional graph property. */
+void set_entity_additional_property(entity *ent, mtp_additional_property flag);
+
+/**
+ * @page unknown_entity
+ *
+ * This entity is an auxiliary entity dedicated to support analyses.
+ *
+ * The unknown entity represents that there could be an entity, but it is not
+ * known. This entity can be used to initialize fields before an analysis (not known
+ * yet) or to represent the top of a lattice (could not be determined). There exists
+ * exactly one entity unknown. This entity has as owner and as type the unknown type. It is
+ * allocated when initializing the entity module.
+ *
+ * The entity can take the role of any entity, also methods. It returns default
+ * values in these cases.
+ *
+ * The following values are set:
+ * name = "unknown_entity"
+ * ld_name = "unknown_entity"
+ * owner = unknown_type
+ * type = unknown_type
+ * allocation = allocation_automatic
+ * visibility = visibility_external_allocated
+ * offset = -1
+ * variability = variability_uninitialized
+ * value = SymConst(unknown_entity)
+ * values = NULL
+ * val_paths = NULL
+ * peculiarity = peculiarity_existent
+ * volatility = volatility_non_volatile
+ * stickyness = stickyness_unsticky
+ * ld_name = NULL
+ * overwrites = NULL
+ * overwrittenby = NULL
+ * irg = NULL
+ * link = NULL
+ */
+/* A variable that contains the only unknown entity. */
+extern entity *unknown_entity;