diff --git a/doc/additionalDoc/dgshell_doc.h b/doc/additionalDoc/dgshell_doc.h
index dc6f58acaad7e7e79e643f7be869e4b2605ebe03..433fd08ba6ff895aa758cac283c2e614fe2c6fff 100644
--- a/doc/additionalDoc/dgshell_doc.h
+++ b/doc/additionalDoc/dgshell_doc.h
@@ -1,5 +1,5 @@
 /**
-
+\ingroup gshellfunctions
 \page dgshell_doc dg-shell executable
 The dynamic-graph shell program "dg-shell" allows access to the dynamic-graph library's
 Interpreter class, which can execute commands and scripts from the command line.
diff --git a/doc/additionalDoc/package.h b/doc/additionalDoc/package.h
index 7aa365ebeef90653ec7a8911fd5b90be0382ee51..a643d3dfb8c49e5c5b912c490424a11a067143fd 100644
--- a/doc/additionalDoc/package.h
+++ b/doc/additionalDoc/package.h
@@ -22,16 +22,62 @@
 /**
 \mainpage
 
+
+
 \section intro_dynamicGraph Introduction
 
 The dynamic-graph package is used to connect computation nodes, "entities"
-together using a graph system, akin to what Simulink does. With the building
-blocks this package provides, you can easily create a full computation graph
+together using a graph system, akin to what Simulink does. Entities are connected
+through input and output signals.
+With the building blocks this package provides, you can easily create a full computation graph
 for a given problem. It is the basis for the stack of tasks operation.
 
-\image html entity.png
-Functionality:
-\li Built-in scripting language* for fast prototyping and testing
+
+\subsection controlgraph Exemple: Real-time control
+
+<p>To give a more concrete example, the real-time control used by the Gepetto group for the humanoid robot HRP-2
+is detailled.</p>
+<p>
+Real-time control system are usually driven by a cyclic computational node which 
+needs to send a control reference value to each motors of a robot. To compute this
+control reference values, sensor values need to be provided.
+In the Stack-Of-Tasks special entities called Device are used to
+provide an abstract interface to the hardware.</p>
+A scheme of the real-time control graph used for the humanoid robot HRP-2 is depicted in the following figure:
+
+\image html Concept-Software-Fig.png
+
+<p>The device therefore has a specific input which should contain the control vector.
+This control vector is the result of a computation solving a control problem.
+The entity in charge of solving this control problem is called "Solver" in the previous
+figure.
+In the SoT framework it is often cast as an optimization problem.
+This optimization problem is build using a control "Task" (not to be confused with the 
+general word task). A control "Task" regulates the difference with a "Feature" computed
+on the current robot state and a "Desired Feature". For instance when walking, the regulated
+feature is the robot's Center-Of-Mass (CoM) position. The "Feature" is computed using a 
+library using the robot model and the sensor value. The entity making this computation is "Dyn".
+A walking pattern generator using foot-steps position given in advance generates the desired
+value for the CoM. 
+Note that the "Dyn" entity uses the sensor provided by the entity "Robot". </p>
+
+<p>
+From a pure computer science viewpoint we wish to avoid recomputing data such as articular Jacobians
+when this is unnecessary. Therefore the data generated by an entity through signals may have two types of
+dependencies: one dependency related to time and dependencies on other signals. Internally an entity
+does not recompute the data if no new information is available, it is simply providing the same information
+computed before. Please note that this package provides only the computational framework to realize
+the data dependency and the entities. Solvers, libraries to compute mechanical quantities are provided
+in different packages.
+</p>
+
+<p>
+Finally in order to dynamically create a graph, it is possible \b on-line to load classes of entities  and
+create instances of entities.</p>
+
+\subsection Functionnalities
+
+\li Built-in scripting language* for fast prototyping and testing of computational graph
 \li Support for extensions and modules using dynamic link libraries
 \li Template-based signal definition, independent
 \li Type-safe connection of input and output signals
@@ -39,14 +85,37 @@ Functionality:
 computation of signal values, which is a critical point for real-time systems\n
 See \ref scriptingabout
 
-\section overview Code overview
-This code implements the factory design pattern, making creation of entities
-(as C++ classes) available to packages depending on the dynamic-graph API.
-For more information on this package's code or how to develop your own entities,
-see \ref usecase.
+\section entity Computational Entity
+\image html entity.png
+
+\subsection entity_definition General definition
+Despite the fact that it looks very similar to a ROS node or a CORBA/OpenRTM server, an entity is simply a C++ object.
+The main idea is that this entity is providing mostly a data-driven functionnality working at very high rate (\f$ 200 Hz\f$ or \f$ 1 kHz \f$) 
+and should have a minimal computational time foot-print.
+
+For this signals (or ports to use a more classical terminology) are providing a time dependency between data.
+To implement this, an output signal is linked with a method of the entity. The method calls input signals or use other means
+to get the needed data.
+It might be provided by the connection with remote computers through a middleware, or specific protocols,
+but in general the external data is based upon the sensor values provided by a "Device" entity.
+For this reason the signal evaluations are realized through the cascade of dependencies and start from the evaluation of an input
+signal of a periodic node (in general the device). This is realized inside a \b real-time thread.
+
+To add flexibility to a node, it is possible to add command with arguments to modify the internal behavior of the entity 
+or get information from the entity.
+As a command is in general asynchronous and rare with respect to the data-flow scheme for the signals the command is in general
+executed in a \b none-real-time thread.
+
+\subsection entity_classes Entity class
+Entities are implemented as C++ classes and compiled as dynamic libraries. They can be loaded and instancied dynamically.
+It is therefore necessary to specify the location of their dynamical libraries.
+However given the time it might take to load the library, it is not advised to do that during a control-law computation.
+Entity instanciation also implies memory allocation which is also time consuming and thus not advised inside a real-time thread.
 
+The entities will be placed in ${PREFIX}/lib/plugin (since this may change, it is advised to
+check the install log or the CMakeLists.txt file to check the installation path).
 
-\section entities List of entities in this package
+\subsection entities List of entities in this package
 Since most of the functionality in projects using the dynamic-graph framework
 is exposed from entities, here is a short description of all the entities contained in
 this package. Note that most entities are contained in a binary file that closely matches
@@ -57,9 +126,14 @@ enable creation of this entity through the factory.
 \li ShellProcedure
 \li \ref shellfunctions_doc
 
-The entities will be placed in ${PREFIX}/lib/plugin (since this may change, it is advised to
-check the install log or the CMakeLists.txt file to check the installation path).
-\section sigintro About signals
+\subsection specific_semantics Specific semantics with entities
+
+It is possible to derive classes and apply specific semantic for the entities. In our case we are interested in specific control semantics:
+\li Tasks (more information <a href="http://stack-of-tasks.github.io/sot-core/doxygen/HEAD/a00089.html">here</a>)
+\li Features (more information <a href="http://stack-of-tasks.github.io/sot-core/doxygen/HEAD/a00030.html">here</a>)
+\li Solver (more information <a href="http://stack-of-tasks.github.io/sot-core/doxygen/HEAD/a00078.html">here</a>)
+
+\section sigintro Signals
 
 Entities can output different types of signals. All signals are templated by a Time
 tick type parameter (which is used in the caching of signals) - usually \c int. Signals
@@ -67,32 +141,31 @@ are also templated after the type of data they accept or provide. For example:
 (example)
 For a more detailed programmer-oriented description of signals, please see \ref signals
 
-\section scriptingabout Notes about the scripting language
-The scripting language allows entities to define their own commands, and
-provides a basic framework for working with the dynamic-graph.
-At the time of writing, there is talk about replacing (or complementing) this limited
-language with a python interpreter.
+\section graph Graph
 
-A couple of functions are built-in in the interpreter and provides low-level features such as file sourcing or
-plug-in loading.\n
-These functions are:\n
-\code plug <obj1.sig1> <obj2.sig2> \endcode plugs the signal sig1 of obj1 to the signal sig2 of obj2. sig1 and sig2
-have to be of the same type. sig1 has to be an output signal and sig2 an input signal.
-\code new <class> <object> \endcode instantiates an object object of class class. object has to be a free identifier and
-class an existing entity.
-\code destroy <object> \endcode deletes an instance previously created.
-\code run <script.txt> \endcode sources (i.e. read and interpret) an external file.
-\code loadPlugin <file.so> <directory> \endcode loads a plugin called file.so and located in the directory directory.
-\code unloadPlugin <path/file.so> \endcode unloads a plugin.
-\code help \endcode lists available functions.
-\code set <obj.signal> <value> \endcode defines an input signal to a specific, constant, value.
-\code get <obj.signal> <value> \endcode prints out a signal value.
-\code compute <obj.sig> <time> \endcode computes an output signal and sets the associated time to time.
+In this package, the graph considered are directed graphs.
+
+\subsection factory Factory
+
+The class \ref dynamicgraph::FactoryStorage is a singleton which register the entity classes and which is allowing the instancation of such classes.
+
+\subsection pool Pool
+The class \ref dynamicgraph::PoolStorage keeps track of the entities instanciated with the factory.
+The entities are the graph nodes. Signals are constructed during the class instanciation, they do not live independently
+from the entities. Signals are the directed edges of the graph. 
+The pool can write a file representing the graph of entities. 
+
+\subsection scriptingabout Building the graph 
+
+This package provides a scripting language allows entities to define their own commands, and
+provides a basic framework to build dynamically the computational graph.
+However bindings have been created with python in the <a href="https://github.com/stack-of-tasks/dynamic-graph-python">dynamic-graph-python package</a>
+and we strongly recommend to use this package instead of the in-house scripting language.
 
 \section usecase How to use this package
-1) Programmatically\n
+\subsection use_programmtically Programmatically
 Objects, which are derived from Entities (base class dynamicgraph::Entity), can be
- declared within the code and compiled to shared libraries (.so/.dll files).
+declared within the code and compiled to shared libraries (.so/.dll files).
 These libraries can be loaded at run-time using the PluginLoader methods,
 and at the same time register their class names to the Factory (see the
 examples in the SOT documentation to learn how).
@@ -112,7 +185,7 @@ Some basic shell functions, and support for procedures, are also included.
 For a complete list of those, load the plugin shell-functions.so and type 'help'
 at the command line.
 
-The (singletons made available by including the corresponding headers in this
+The singletons made available by including the corresponding headers in this
 module are:
 \li dynamicgraph::FactoryStorage
 \li dynamicgraph::PoolStorage
@@ -120,20 +193,46 @@ module are:
 For an example of a program creating entities in C++, see the unit test
 test_pool.cpp (in your package source directory/unitTesting).
 
-2) Through scripts\n
+\subsection use_scripts Through scripts
 The program \ref dgshell_doc can be used to have scripting access to the dynamic-graph
 library, where you can execute scripts and commands, load plugins, create entities and connect signals.
 
 Here is a typical use case for programmers:
 \image html figures/use-case.png
 
-\section References
+\section references References
+\anchor Mansard2009
+
+<b> "A versatile Generalized Inverted Kinematics implementation for collaborative working humanoid robots: The Stack Of Tasks"</b>,
+<em>N. Mansard, O. Stasse, P. Evrard, A. Kheddar,</em>
+Int. Conf. on Autonomous Robots, ICAR, 2009
+
 \anchor Mansard2007
 
 <b>"Task sequencing for sensor-based control"</b>,
 <em>N. Mansard, F. Chaumette,</em>
 IEEE Trans. on Robotics, 23(1):60-72, February 2007
 
+\namespace dynamicgraph This is the namespace where every object and class of this library is located.
+
+\defgroup gshellfunctions Notes about the scripting language
+@{
+A couple of functions are built-in in the interpreter and provides low-level features such as file sourcing or
+plug-in loading.\n
+These functions are:\n
+\code plug <obj1.sig1> <obj2.sig2> \endcode plugs the signal sig1 of obj1 to the signal sig2 of obj2. sig1 and sig2
+have to be of the same type. sig1 has to be an output signal and sig2 an input signal.
+\code new <class> <object> \endcode instantiates an object object of class class. object has to be a free identifier and
+class an existing entity.
+\code destroy <object> \endcode deletes an instance previously created.
+\code run <script.txt> \endcode sources (i.e. read and interpret) an external file.
+\code loadPlugin <file.so> <directory> \endcode loads a plugin called file.so and located in the directory directory.
+\code unloadPlugin <path/file.so> \endcode unloads a plugin.
+\code help \endcode lists available functions.
+\code set <obj.signal> <value> \endcode defines an input signal to a specific, constant, value.
+\code get <obj.signal> <value> \endcode prints out a signal value.
+\code compute <obj.sig> <time> \endcode computes an output signal and sets the associated time to time.
+@}
 
 \defgroup dgraph Core classes and objects
 @{
@@ -180,5 +279,4 @@ computations, when accessed.
 
 @}
 
-\namespace dynamicgraph This is the namespace where every object and class of this library is located.
 */
diff --git a/doc/additionalDoc/shellfunctions_doc.h b/doc/additionalDoc/shellfunctions_doc.h
index 01dde8d2eeab8dedb48162dd2bc72f32444bb048..67a985e975d9cdeb939c46f5099b2ae6774480e7 100644
--- a/doc/additionalDoc/shellfunctions_doc.h
+++ b/doc/additionalDoc/shellfunctions_doc.h
@@ -1,4 +1,5 @@
 /**
+\ingroup gshellfunctions
 \page shellfunctions_doc ShellFunctions
 \note Note: this documentation covers specific aspects of the in-house
 scripting language currently used by the dynamic-graph script. Unless
diff --git a/doc/figures/Concept-Software-Fig.png b/doc/figures/Concept-Software-Fig.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7dfdeae89ffec5f1fdf05951d269b8a299d7589
Binary files /dev/null and b/doc/figures/Concept-Software-Fig.png differ