From 12f595941a1bb5bb6df7157417734ea1d04ce59c Mon Sep 17 00:00:00 2001
From: Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr>
Date: Wed, 4 Dec 2013 01:26:07 +0000
Subject: [PATCH]   * ./hurricane/src/hurricane:     - New: Added an id on DBo,
 SharedName and SharedPath to ensure         database determinism. All the
 hash key now uses the id instead         of the object's pointer (see
 _getHashValue()).     - Change: In RoutingPad, position is now only relative
 to the anchor,         no more (dx,dy). Add a isPlacedOccurrence() to check
 if all the         occurrence in the path are fixed and thus the position
 meaningful.

  * ./hurricane/doc/hurricane:
    - Change: In Cell, added doc about PlacementStatus.
    - Change: In Transformation, more detailed explanations about the
        orientations. A little beautifying too...
    - Change: RoutingPad doc update.
    - Change: Entity doc update (for id).
    - Change: In HTML header/footer uses the new SoC.css.
---
 hurricane/doc/hurricane/Entity.dox            | 107 ++--
 hurricane/doc/hurricane/Instance.dox          |  54 ++
 hurricane/doc/hurricane/Net.dox               |   3 +
 hurricane/doc/hurricane/RoutingPad.dox        |  45 +-
 hurricane/doc/hurricane/SoC.css               | 559 ++++++++++++++++++
 hurricane/doc/hurricane/Transformation.dox    | 149 ++---
 hurricane/doc/hurricane/customHierarchy.html  |   2 +-
 hurricane/doc/hurricane/customSummary.html    |   2 +-
 hurricane/doc/hurricane/doxyfile              |   2 +-
 hurricane/doc/hurricane/header.html           |   2 +-
 hurricane/doc/viewer/SoC.css                  | 559 ++++++++++++++++++
 hurricane/doc/viewer/customSummary.html       |   2 +-
 hurricane/doc/viewer/doxyfile                 |   2 +-
 hurricane/doc/viewer/header.html              |   2 +-
 hurricane/src/hurricane/Cell.cpp              |  17 +-
 hurricane/src/hurricane/Entity.cpp            |  25 +-
 hurricane/src/hurricane/Error.cpp             |  12 +-
 hurricane/src/hurricane/Instance.cpp          |   5 +-
 hurricane/src/hurricane/Library.cpp           |   5 +-
 hurricane/src/hurricane/Net.cpp               |   4 +-
 hurricane/src/hurricane/Pin.cpp               |   2 +-
 hurricane/src/hurricane/QuadTree.cpp          |   4 +-
 hurricane/src/hurricane/RoutingPad.cpp        | 122 ++--
 hurricane/src/hurricane/SharedName.cpp        |  24 +-
 hurricane/src/hurricane/SharedPath.cpp        |  14 +-
 hurricane/src/hurricane/Technology.cpp        |   3 +-
 hurricane/src/hurricane/Timer.cpp             |   8 +-
 .../src/hurricane/hurricane/Collection.h      |   2 +-
 hurricane/src/hurricane/hurricane/Entity.h    |  80 ++-
 hurricane/src/hurricane/hurricane/Layer.h     |  13 +-
 hurricane/src/hurricane/hurricane/Net.h       |   5 +-
 .../src/hurricane/hurricane/RoutingPad.h      |  36 +-
 .../src/hurricane/hurricane/SharedName.h      |  90 +--
 .../src/hurricane/hurricane/SharedPath.h      |   3 +
 hurricane/src/isobar/PyRoutingPad.cpp         |  16 +-
 35 files changed, 1596 insertions(+), 384 deletions(-)
 create mode 100644 hurricane/doc/hurricane/SoC.css
 create mode 100644 hurricane/doc/viewer/SoC.css

diff --git a/hurricane/doc/hurricane/Entity.dox b/hurricane/doc/hurricane/Entity.dox
index da6f73aa..5ec71803 100644
--- a/hurricane/doc/hurricane/Entity.dox
+++ b/hurricane/doc/hurricane/Entity.dox
@@ -7,49 +7,88 @@
  /*! \class        Entity
   *  \brief        Occurrenceable objects root class (\b API).
   *
-  *  \section      sEntityIntro  Introduction
+  *  \section      secEntityIntro  Introduction
   *
   *                Entities are abstract objects representing the category of
   *                occurrenceable objects.
-  */
-
-
- /*! \function     Cell* Entity::getCell () const;
-  *  \return       Returns the cell owning this entity (when the Entity is a Cell,
-  *                the Cell itself is returned)
-  */
-
- /*! \function     Box  Entity::getBoundingBox () const;
-  *  \return       Returns the bounding box of the entity. It is defined as the
-  *                smallest box enclosing the entity or its constituents.
   *
-  *  \remark       For the Plugs, which are not objects of the physical layout,
-  *                the returned envelope is a Box of null dimensions (ponctual)
-  *                centered on the location of the master Net of the Plug, to
-  *                which has been applied the transformation associated to the
-  *                Instance of the Plug.
+  *  \section      secEntityId  Unique Identifier
+  *
+  *                Each Entity is associated with a unique identifier (see
+  *                Entity::getId()). This identifier is used as a sorting key
+  *                in the various IntrusiveMap throughout Hurricane to ensure
+  *                determinism. It came as a replacement of the object's own
+  *                address which is not suitable for this purpose.
+  *
+  *                For STL container, the Entity::CompareById functor is provided.
+  *
+  *                The identifier is generated from an ever incrementing counter
+  *                on 32 bits or 64 bits, depending on the target system architecture.
+  *                If the 32/64 bit capacity is reached an exception is thrown.
   */
 
+ //! \function     unsigned int  Entity::getId () const;
+ //! \Return       Returns the unique identifier of this Entity.
+
+ //! \function     Cell* Entity::getCell () const;
+ //! \Return       Returns the cell owning this entity (when the Entity is a Cell,
+ //!               the Cell itself is returned)
+
+ //! \function     Box  Entity::getBoundingBox () const;
+ //! \return       Returns the bounding box of the entity. It is defined as the
+ //!               smallest box enclosing the entity or its constituents.
+ //!
+ //! \remark       For the Plugs, which are not objects of the physical layout,
+ //!               the returned envelope is a Box of null dimensions (ponctual)
+ //!               centered on the location of the master Net of the Plug, to
+ //!               which has been applied the transformation associated to the
+ //!               Instance of the Plug.
+
 
  //! \name         Entity Collection
- // \{
+ //! \{
 
- /*! \typedef      typedef GenericCollection<Entity*> Entities;
-  *                Generic collection representing a set of data base objects.
+ //! \typedef      typedef GenericCollection<Entity*> Entities;
+ //!               Generic collection representing a set of data base objects.
+ //!
+
+ //! \typedef      typedef GenericLocator<Entity*> EntityLocator;
+ //!               Generic locator for visiting a data base objects Collection.
+ //!
+
+ //! \typedef      typedef GenericFilter<Entity*> EntityFilter;
+ //!               Filter to selecting a subset of data base objects matching some criteria.
+ //!
+
+ //! \def          for_each_entity(entity,entities)
+ //!               Macro for visiting all objects of a data base objects collection.
+ //!
+
+ //! \}
+
+ /*! \class        Entity::CompareById
+  *  \brief        Entity comparison criterion for STL container.
+  *
+  *                This class is a functor to be used in STL containers of \c Entity*
+  *                whenever determinism is required (as an alternative to the object's
+  *                pointer). If a \c NULL pointer is passed as argument, it's \c id
+  *                is computed as zero, it is a failsafe and should be avoided.
+  *
+\code
+typedef  std::map<Net*,SomeValue,Entity::CompareById>  NetMap;
+
+NetMap  netMap;
+forEach( Net*, inet, cell->getNets() ) {
+  netMap.insert( std::make_pair(*inet,computeSomeValue(*inet)) );
+}
+
+for ( NetMap::iterator imap=netMap.begin() ; imap!=netMap.end() ; ++imap ) {
+  // Show the Net ordering
+  cout << (*imap).first->getId() << ":" << (*imap).first << endl;
+  // Do something
+  // ...
+}
+\endcode
   */
 
- /*! \typedef      typedef GenericLocator<Entity*> EntityLocator;
-  *                Generic locator for visiting a data base objects Collection.
-  */
-
- /*! \typedef      typedef GenericFilter<Entity*> EntityFilter;
-  *                Filter to selecting a subset of data base objects matching some criteria.
-  */
-
- /*! \def          for_each_entity(entity,entities)
-  *                Macro for visiting all objects of a data base objects collection.
-  */
-
- // \}
-
  }
diff --git a/hurricane/doc/hurricane/Instance.dox b/hurricane/doc/hurricane/Instance.dox
index 50203cd0..d417f820 100644
--- a/hurricane/doc/hurricane/Instance.dox
+++ b/hurricane/doc/hurricane/Instance.dox
@@ -19,6 +19,21 @@
   *                cell of a hierachical assembly, as well as for all cells from 
   *                the library which are not instanciated in the current 
   *                design). 
+  *
+  *
+  *  \section      secInstancePlacement  Placement Status
+  *
+  *                See Instance::PlacementStatus and Instance::PlacementStatus::Code.
+  *
+  *                An Instance can have three kind of placement status:
+  *                  - Instance::PlacementStatus::UNPLACED : the instance doesn't have a
+  *                    meaningful position. It shouldn't be materialized either.
+  *                    It's position therfore shouldn't be used.
+  *                  - Instance::PlacementStatus::PLACED : the instance has be placed
+  *                    manually or by an automated tool. It is movable.
+  *                  - Instance::PlacementStatus::FIXED : the instance is placed and
+  *                    mustn't be moved by automated tools. It can still be moved
+  *                    manually.
   * 
   * 
   *  \section      secInstancePredefinedFilters  Predefined filters
@@ -172,4 +187,43 @@
 
  //  \}
 
+ //! \class        Instance::PlacementStatus
+ //! \brief        Instance Placement Status (\b API)
+ //!
+ //! \section      secInstancePStatus  Instance Placement Status
+ //!
+ //!               An Instance can have three kind of placement status:
+ //!                 - Instance::PlacementStatus::UNPLACED : the instance doesn't have a
+ //!                   meaningful position. It shouldn't be materialized either.
+ //!                   It's position therfore shouldn't be used.
+ //!                 - Instance::PlacementStatus::PLACED : the instance has be placed
+ //!                   manually or by an automated tool. It is movable.
+ //!                 - Instance::PlacementStatus::FIXED : the instance is placed and
+ //!                   mustn't be moved by automated tools. It can still be moved
+ //!                   manually.
+
+ //! \function     Instance::PlacementStatus::PlacementStatus( const Code& code=UNPLACED );
+ //!               Constructor. By default the status is unplaced.
+
+ //! \function     Instance::PlacementStatus::PlacementStatus( const Instance::PlacementStatus& );
+ //!               Copy Constructor.
+
+ //! \function     Instance::PlacementStatus::operator const Code& () const;
+ //!               Type converter toward Instance::PlacementStatus::Code enum.
+
+ //! \function     Instance::PlacementStatus::Code& Instance::PlacementStatus::getCode() const;
+ //! \return       The status (Code) value.
+
+ //! \enum         Instance::PlacementStatus::Code
+ //!               Describe the various placement status an Instance can be in.
+
+ //! \var          Instance::PlacementStatus::UNPLACED
+ //! \sa           Instance::PlacementStatus.
+
+ //! \var          Instance::PlacementStatus::PLACED
+ //! \sa           Instance::PlacementStatus.
+
+ //! \var          Instance::PlacementStatus::FIXED
+ //! \sa           Instance::PlacementStatus.
+
  }
diff --git a/hurricane/doc/hurricane/Net.dox b/hurricane/doc/hurricane/Net.dox
index 98912459..84ccb715 100644
--- a/hurricane/doc/hurricane/Net.dox
+++ b/hurricane/doc/hurricane/Net.dox
@@ -151,6 +151,9 @@
   *  \Return       the collection of net's pads. 
   */
 
+ //! \function     RoutingPads Net::getRoutingPads() const;
+ //! \Return       the collection of net's RoutingPads. 
+
  /*! \function     Plugs Net::getSlavePlugs() const;
   *  \Return       the collection of plugs which have this net as master. 
   *
diff --git a/hurricane/doc/hurricane/RoutingPad.dox b/hurricane/doc/hurricane/RoutingPad.dox
index ddb07491..5d818586 100644
--- a/hurricane/doc/hurricane/RoutingPad.dox
+++ b/hurricane/doc/hurricane/RoutingPad.dox
@@ -11,14 +11,20 @@
   *                The RoutingPad is a part of the trans-hierarchical mechanism.
   *                It allows to connect a Net from the top-level netlist to
   *                a plug in an Instance at any level inside the hierarchy,
-  *                throuhg a Plug Occurrence. RoutingPad can also be created from
+  *                through a Plug Occurrence. RoutingPad can also be created from
   *                Pin or Contact Occurrences.
   *
   *                When the RoutingPad is created using a Plug Occurrence, it can
   *                be set afterward to any of master net external Component.
-  *                An utility method RoutingPad::setOnBestComponent() is also
+  *                A utility method RoutingPad::setOnBestComponent() is also
   *                provided to automatically set the RoutingPad on a Component
   *                matching criteria of surface or layer level.
+  *
+  *                The position of the RoutingPad is fixed relatively from the
+  *                instances in it's occurrence path and the entity it refers.
+  *                The reference point used on the entity is it's center whether
+  *                it is a segment, a pin or a plug. In the later case, it is
+  *                the center of the cell.
   */
 
 
@@ -38,6 +44,10 @@
  //! \var          RoutingPad::ComponentSelection
  //!               A mask to filter bit parts of a flag belonging to component selection.
 
+ //! \var          RoutingPad::ShowWarning
+ //!               Whether to display a warning or not while checking the instances
+ //!               placement.
+
 
  //! \typedef      RoutingPad::Inherit
  //!               Useful for calling upon methods of the base class without 
@@ -53,6 +63,17 @@
  //! \function     RoutingPad*   RoutingPad::create ( Pin* pin );
  //!               Special variant to create a RoutingPad from a top-level Pin.
 
+ //! \function     bool  RoutingPad::isPlacedOccurrence ( unsigned int flags ) const;
+ //!               Check wether all the instances in the occurrence path are placed.
+ //!               If at least, one is not and \c flags contains RoutingPad::ShowWarning,
+ //!               display a warning.
+ //!
+ //!               When using a RoutingPad as a reference/anchor for other physical
+ //!               components (that is, the occurence entity is no longer a Plug),
+ //!               it is critical that it is in a truly meaningful position.
+ //!               And this is true \e only if all the instances in the occurrence's Path
+ //!               have a physical position (i.e. are placed).
+
  //! \function     Occurrence  RoutingPad::getOccurrence() const;
  //! \return       The Occurence on which we are anchored on. If a Component has been selected
  //!               to be the anchor, it's an Occurrence on that component which is returned,
@@ -111,22 +132,10 @@
  //!               getY() otherwise.
 
  //! \function     void  RoutingPad::translate ( const DbU::Unit& dx, const DbU::Unit& dy );
- //!               Translate the RoutingPad by <code>(dx,dy)</code>.
-
- //! \function     void  RoutingPad::setOffset ( const DbU::Unit& dx, const DbU::Unit& dy );
- //!               Sets the relative position of the RoutingPad from it's anchor to <code>(dx,dy)</code>.
-
- //! \function     void  RoutingPad::setX ( const DbU::Unit& x );
- //!               Sets the X coordinate of the RoutingPad.
-
- //! \function     void  RoutingPad::setY ( const DbU::Unit& y );
- //!               Sets the X coordinate of the RoutingPad.
-
- //! \function     void  RoutingPad::setPosition ( const DbU::Unit& x, const DbU::Unit& y );
- //!               Sets the absolute position of the RoutingPad to <code>(x,y)</code>.
-
- //! \function     void  RoutingPad::setPosition ( const Point& position );
- //!               Sets the absolute position of the RoutingPad to <code>position</code>.
+ //!               As the position of the RoutingPad is fixed relatively to the instance path
+ //!               and the anchoring component, it cannot be translated. Thus this method do
+ //!               nothing. The Routing pad will translate nevertheless with any translation
+ //!               of any of the instance in it's path or the anchor.
 
  //! \function     void  RoutingPad::setExternalComponent ( Component* component );
  //!               When the RoutingPad is anchored on a Plug, allow to set the \c component
diff --git a/hurricane/doc/hurricane/SoC.css b/hurricane/doc/hurricane/SoC.css
new file mode 100644
index 00000000..276a7c09
--- /dev/null
+++ b/hurricane/doc/hurricane/SoC.css
@@ -0,0 +1,559 @@
+
+
+/*
+ * +-----------------------------------------------------------------+
+ * |                       HTML Standart Tags                        |
+ * +-----------------------------------------------------------------+
+ */
+
+ html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
+   font-size:                   11pt;
+   /* The Open Sans font family is supplied by TexLive. */
+   font-family:                 "Open Sans", Verdana, sans-serif;;
+ }
+
+ body {
+   color:                       black;
+   background:                  white;
+   background-color:            white;
+   background-position:         top left;
+   background-attachment:       fixed;
+   background-repeat:           no-repeat;
+   margin-top:                  2em;
+   width:                       550pt;
+   margin-right:                auto;
+   margin-left:                 auto;
+   /*
+   margin-right:                12%;
+   margin-left:                 12%;
+   */
+ }
+
+ hr {
+   height:                      1px;
+   border:                      0;
+   color:                       #004400;
+   background-color:            #004400;
+ }
+
+
+ h1, h2, h3, h4, h5, h6 {
+   /*font-family:                 "Liberation Serif", sans-serif;*/
+ }
+
+ h1                 { text-align:  center; }
+ h2, h3, h4, h5, h6 { text-align:  left;
+                      padding-top: 11pt;
+                    }
+ h1, h2, h3         { /*font-family: "Liberation Serif", sans-serif; */
+                    /*color:       #09550B;*/
+                    }
+ h1                 { font-weight:normal;       font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; }
+ h2                 { font-weight:normal;       font-size: 140%; letter-spacing:0.2em; word-spacing:0.4em; }
+ h3                 { font-weight:  bold;       font-size: 118%; letter-spacing:0.2em; word-spacing:0.4em; }
+ h4                 { font-weight:  bold;       font-size: 100%; }
+ h5                 { font-style:   italic;     font-size: 100%; }
+ h6                 { font-variant: small-caps; font-size: 100%; }
+
+ h2.classHierarchy {
+ /*border:                      1px none #008500;*/
+   border:                      1px none #000000;
+   border-top-width:            1px;
+   border-top-style:            dotted;
+   padding-top:                 1em;
+ }
+ 
+
+ .hide {
+   display:                     none;
+   color:                       white;
+ }
+
+
+ p {
+   margin-top:                  0.6em;
+   margin-bottom:               0.6em;
+   margin-left:                 0.0em;
+   margin-right:                0.0em;
+ }
+
+
+ address {
+   text-align:                  right;
+   font-weight:                 bold;
+   font-style:                  italic;
+   font-size:                   80%;
+ }
+
+
+ caption { font-weight: bold }
+
+
+ blockquote {
+   margin-left:                 4em;
+   margin-right:                4em;
+   margin-top:                  0.8em;
+   margin-bottom:               0.8em;
+   font-style:                  italic;
+   color:                       #003300;
+ }
+
+ blockquote p {
+   margin-bottom:               0;
+ }
+
+ blockquote address {
+   margin:                      0;
+ }
+
+
+ table {
+   border-collapse:             collapse;
+ }
+
+ dt, dd { margin-top: 0; margin-bottom: 0; }
+ dt     { font-weight: bold; }
+
+
+ pre, tt, code {
+   /*font-family:                 "andale mono", monospace;*/
+   font-size:                   100%;
+   white-space:                 pre;
+ }
+
+ pre {
+   font-size:                   80%;
+   border:                      dashed;
+   border-width:                thin;
+   border-color:                #003300;
+   /*
+   background-color:            #EEEEEE;
+   */
+   background-color:            #FCFCE1;
+   padding:                     0.5em;
+   margin-left:                 2em;
+   margin-right:                2em
+ }
+
+ tt          { color:           green;   }
+ em          { font-style:      italic;
+               font-weight:     normal;  }
+ strong      { font-weight:     bold;    }
+
+ span.textit { font-style:      italic;  }
+ span.textbf { font-weight:     bold;    }
+
+ .small      { font-size:       90%;     }
+ .white      { color:           #FFFFFF; }
+
+
+ ul.toc {
+   list-style:                  disc;
+   list-style:                  none;
+ }
+
+
+ a:link img, a:visited img { border-style: none; }
+ a img                     { color: white; }
+
+ a:link, a:active, a:visited {
+   color:                       #09550B;
+   text-decoration:             none;
+ }
+
+ a:hover, a:focus {
+   color:                       #FF9900;
+   text-decoration:             underline;
+ }
+
+
+/*
+ * +-----------------------------------------------------------------+
+ * |                    Doxygen Specific Classes                     |
+ * +-----------------------------------------------------------------+
+ */
+
+
+/* -------------------------------------------------------------------
+ * Header & Footer Classes (customized top page navigation bar).
+ */
+
+ h1.header {
+   font-size:                   200%;
+ /*font-family:                 times, verdana, sans-serif;*/
+ }
+
+ center.header {
+   background-color:            #CCE6CA;
+ }
+
+ table.header {
+ /*width:                       100%;*/
+ /*background-color:            #EEEEEE;*/
+   background-color:            #CCE6CA;
+ }
+
+ table.header td {
+   padding:                     2px 14px;
+   text-align:                  center;
+   font-weight:                 bold;
+ /*font-family:                 verdana, sans-serif;*/
+   font-size:                   110%;
+ }
+
+ table.DoxUser td, table.DoxUser th {
+   padding:                    0px 5px;
+   border:                     0px;
+ }
+
+ table.DoxUser th {
+   background-color:            #CCE6CA;
+ }
+
+ table.footer1, table.footer2 { width:       100%;  }
+ td.LFooter                   { text-align:  left;  }
+ td.RFooter                   { text-align:  right; }
+ td.CFooter                   { text-align:  center;}
+ table.footer2 td.RFooter     { font-weight: bold; width: 35%  }
+ table.footer2 td.CFooter     { width: 30%  }
+ table.footer2 td.LFooter     { font-weight: bold; width: 35%; /*font-family: time;*/ }
+
+ table.classHierarchy {
+   border-collapse:             separate;
+   border-spacing:              5px;
+   font-size:                   110%;
+ }
+
+ table.classHierarchy tr {
+   border:                      1px solid blue;
+ }
+
+ table.classHierarchy td.normal {
+   border:                      1px solid #CCE6CA;
+   width:                       140pt;
+   text-align:                  center;
+   font-weight:                 bold;
+   background-color:            #CCE6CA;
+ }
+
+ table.classHierarchy td.virtual {
+   border:                      1px solid black;
+   width:                       140pt;
+   text-align:                  center;
+   font-weight:                 bold;
+ }
+
+ table.classHierarchy td.wnormal {
+   border:                      1px solid #CCE6CA;
+   width:                       240pt;
+   text-align:                  center;
+   font-weight:                 bold;
+   background-color:            #CCE6CA;
+ }
+
+ table.classHierarchy td.wvirtual {
+   border:                      1px solid black;
+   width:                       240pt;
+   text-align:                  center;
+   font-weight:                 bold;
+ }
+
+ div.ah {
+ /*font-family:                 time;*/
+   font-size:                   250%;
+ }
+
+
+/* -------------------------------------------------------------------
+ * Quick Index Class (top page navigation bar).
+ */
+
+ div.qindex, div.nav {
+   width:                       100%-4px;
+ /*background-color:            #DADAEF;*/
+ /*background-color:            #eeeeff;*/
+ /*background-color:            #EEEEEE;*/
+   background-color:            #CCE6CA;
+   border:                      0px solid #003300;
+   text-align:                  center;
+   margin:                      0px;
+   padding:                     2px;
+   line-height:                 140%;
+ }
+
+ a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
+   text-decoration:             none;
+ /*font-family:                 Courier;*/
+   font-weight:                 normal;
+ /*font-size:                   110%;*/
+ }
+
+ a.qindex, a.qindex:visited {
+   color:                       #09550B;
+ }
+
+ a.qindex:hover {
+   background-color:            #ddddff;
+ }
+
+ a.qindexHL, a.qindexHL:hover, a.qindexHL:visited {
+   background-color:            #0c780c;
+   color:                       #ffffff;
+   border:                      1px double #9295C2;
+ }
+
+ a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited {
+   text-decoration:             none;
+   font-weight:                 normal;
+   color:                       #0000ff;
+ }
+
+ .indexkey {
+   background-color:            #eeeeff;
+   border:                      1px solid #b0b0b0;
+   padding:                     2px 15px;
+ }
+
+ .indexkey, .indexvalue {
+   background-color:            #eeeeff;
+   border:                      1px solid #b0b0b0;
+   padding:                     2px 15px;
+ }
+
+ .indexkey {
+   width:                       40%;
+ }
+
+ .indexvalue {
+   width:                       80%;
+ }
+
+ h3 a[name="index__"],
+ h3 a[name="index_a"],
+ h3 a[name="index_b"],
+ h3 a[name="index_c"],
+ h3 a[name="index_d"],
+ h3 a[name="index_e"],
+ h3 a[name="index_f"],
+ h3 a[name="index_g"],
+ h3 a[name="index_h"],
+ h3 a[name="index_i"],
+ h3 a[name="index_j"],
+ h3 a[name="index_k"],
+ h3 a[name="index_l"],
+ h3 a[name="index_m"],
+ h3 a[name="index_n"],
+ h3 a[name="index_o"],
+ h3 a[name="index_p"],
+ h3 a[name="index_q"],
+ h3 a[name="index_r"],
+ h3 a[name="index_s"],
+ h3 a[name="index_t"],
+ h3 a[name="index_u"],
+ h3 a[name="index_v"],
+ h3 a[name="index_w"],
+ h3 a[name="index_x"],
+ h3 a[name="index_y"],
+ h3 a[name="index_z"],
+ h3 a[name="index_0"],
+ h3 a[name="index_1"],
+ h3 a[name="index_2"],
+ h3 a[name="index_3"],
+ h3 a[name="index_4"],
+ h3 a[name="index_5"],
+ h3 a[name="index_6"],
+ h3 a[name="index_7"],
+ h3 a[name="index_8"],
+ h3 a[name="index_9"]
+ h3 a[id="index__"],
+ h3 a#index_a,
+ h3 a#index_b,
+ h3 a#index_c,
+ h3 a#index_d,
+ h3 a#index_e,
+ h3 a#index_f,
+ h3 a#index_g,
+ h3 a#index_h,
+ h3 a#index_i,
+ h3 a#index_j,
+ h3 a#index_k,
+ h3 a#index_l,
+ h3 a#index_m,
+ h3 a#index_n,
+ h3 a#index_o,
+ h3 a#index_p,
+ h3 a#index_q,
+ h3 a#index_r,
+ h3 a#index_s,
+ h3 a#index_t,
+ h3 a#index_u,
+ h3 a#index_v,
+ h3 a#index_w,
+ h3 a#index_x,
+ h3 a#index_y,
+ h3 a#index_z,
+ h3 a#index_0,
+ h3 a#index_1,
+ h3 a#index_2,
+ h3 a#index_3,
+ h3 a#index_4,
+ h3 a#index_5,
+ h3 a#index_6,
+ h3 a#index_7,
+ h3 a#index_8,
+ h3 a#index_9,
+ h3 a#index_0x7e
+ {
+   font-family:                 time;
+   font-size:                   250%;
+ }
+
+
+/* -------------------------------------------------------------------
+ * Verbatim Source Code / Examples.
+ */
+
+ /* pre.fragment       { background-color: #EEEEEE; } */
+
+ span.keyword       { color: #008000 }
+ span.keywordtype   { color: #604020 }
+ span.keywordflow   { color: #e08000 }
+ span.comment       { color: #800000 }
+ span.preprocessor  { color: #806020 }
+ span.stringliteral { color: #002080 }
+ span.charliteral   { color: #008080 }
+ span.red           { color: red }
+
+
+/* -------------------------------------------------------------------
+ * Attributes Listing.
+ */
+
+p.formulaDsp {
+  text-align: center;
+}
+
+ .mdTable {
+ /*border:                      1px solid #868686;*/
+ /*background-color:            #DADAEF;*/
+ /*background-color:            #F4F4FB;*/
+   border:                      1px none #008500;
+   border-left-width:           1px;
+   border-left-style:           solid;
+ /*background-color:            #B8E6B8;*/
+ /*background-color:            #CCE6CA;*/
+   margin-top:                  25px;
+   font-size:                   105%;
+ }
+
+ .mdRow {
+   padding:                     5px 10px;
+ }
+
+ /* This Mozilla/Firefox bug has been corrected from v1.5.
+  * .mdname1 {
+  *   padding:                     3px 0px 0px 0px;
+  * }
+ */
+
+ .mdescLeft, .mdescRight {
+   padding:                     0px 8px 4px 8px;
+   font-size:                   11px;
+   font-style:                  italic;
+ /*background-color:            #FAFAFA;*/
+   border-top:                  1px none #E0E0E0;
+   border-right:                1px none #E0E0E0;
+   border-bottom:               1px none #E0E0E0;
+   border-left:                 1px none #E0E0E0;
+   margin:                      0px;
+ }
+
+ .memitem {
+   margin-bottom:               30px;
+   border:                      1px none #008500;
+ }
+
+ .memproto {
+   background-color:            #CCE6CA;
+   border-left-width:           4px;
+   border-left-style:           solid;
+   border-color:                #008500;
+ }
+
+ .memname {
+   white-space:                 nowrap;
+   padding-left:                5px;
+   font-size:                   105%;
+ }
+
+ table.memname * {
+   font-family:                 "Monospace";
+ }
+
+
+ .memdoc{
+   padding-left:                5px;
+ /*margin-top:                  -8px;*/
+   border-left-width:           1px;
+   border-left-style:           solid;
+   border-color:                #008500;
+ }
+
+ div.contents * table tr {
+   padding:                     3px 3px 3px 8px;
+ }
+
+ .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight {
+ /*padding:                     1px 0px 0px 8px;*/
+   padding:                     3px 3px 3px 8px;
+   margin:                      4px;
+   border-top-width:            1px;
+   border-right-width:          1px;
+   border-bottom-width:         1px;
+   border-left-width:           1px;
+ /*
+   border-top-color:            #0c0c0c;
+   border-right-color:          #0c0c0c;
+   border-bottom-color:         #0c0c0c;
+   border-left-color:           #0c0c0c;
+  */
+   border-top-style:            none;
+   border-right-style:          none;
+   border-bottom-style:         dotted;
+   border-left-style:           none;
+ /*background-color:            #DADAEF;*/
+ /*background-color:            #eeeeff;*/
+ /*background-color:            #EEEEEE;*/
+ /*background-color:            #CCE6CA;*/
+   font-family:                 "Monospace";
+ }
+
+ .memTemplItemLeft, .memTemplItemRight {
+   border-bottom-width:         2px;
+   border-bottom-style:         solid;
+   font-weight:                 bold;
+ }
+
+ .memItemLeft       { font-size: 11px; width: 35%; }
+ .memItemRight      { font-size: 12px; }
+ .memTemplItemLeft  { font-size: 11px; }
+ .memTemplItemRight { font-size: 12px; }
+
+ .memTemplParams {
+   color:                       #FFFFFF;
+   background-color:            #000000;
+   font-size:                   11px;
+   font-weight:                 bold;
+ }
+
+ .groupText, .groupHeader       {
+   color:                       #09550B;
+   font-size:                   130%;
+   font-weight:                 bold;
+   margin-top:                  15px;
+ }
+
+ .groupHeader       {
+   margin-bottom:              -30pt;
+ }
+
diff --git a/hurricane/doc/hurricane/Transformation.dox b/hurricane/doc/hurricane/Transformation.dox
index 3152c429..0e944a9b 100644
--- a/hurricane/doc/hurricane/Transformation.dox
+++ b/hurricane/doc/hurricane/Transformation.dox
@@ -13,88 +13,91 @@
   *                <b>translation</b> and an <b>orientation</b> defined by the 
   *                new enumeration <b>Transformation::Orientation</b> whose 
   *                different values are described in table below. 
+  *                The <b>orientation</b> is done <em>before</em> the
+  *                <b>translation</b>, which is to say that the orientation is
+  *                applied in the coordinate system of the model.
   *
+  *                The transformation formula is given by:
+                   \f[
+                      \Large
+                      \left \{
+                      \begin{array}{r c l l l l l}
+                      x' & = & (a \times x) & + & (b \times y) & + & tx \\
+                      y' & = & (c \times x) & + & (d \times y) & + & ty
+                      \end{array}
+                      \right .
+                   \f]
+  *                where x and y are the 
+  *                coordinates of any point, x' and y' the coordinates of the 
+  *                transformed point, tx and ty the horizontal and vertical 
+  *                components of the translation and where a, b, c and d are the 
+  *                coefficients of the matrix associated to the orientation. 
+  *                See Orientation for the value of a, b, c & d.
   *
-  *  \remark       <b>Rotations are done counter clock wise</b> : 
+  *  \remark       <b>Rotations are done counter clock wise</b>
   */
 
 
  /*! \class        Transformation::Orientation
   * This enumeration defines the orientation associated to a 
   * transformation object.
-  * <TABLE>
-  * <CAPTION>Orientation codes and associated transformation matrix</CAPTION>
-  * <TR>
-  * <TD>Name</TD><TD>Aspect</TD><TD>Code</TD><TD>Signification</TD><TD>a</TD><TD>b</TD><TD>c</TD><TD>d</TD>
-  * </TR>
-  * <TR>
-  * <TD>ID</TD>
-  * <TD>
-  * \image html id.gif
-  * </TD>
-  * <TD>0</TD><TD>Identity</TD>
-  * <TD>1</TD><TD>0</TD><TD>0</TD><TD>1</TD>
-  * </TR>
-  * <TR>
-  * <TD>R1</TD>
-  * <TD>
-  * \image html r1.gif
-  * </TD>
-  * <TD>1</TD><TD>Simple rotation (90�)</TD>
-  * <TD>0</TD><TD>-1</TD><TD>1</TD><TD>0</TD>
-  * </TR>
-  * <TR>
-  * <TD>R2</TD>
-  * <TD>
-  * \image html r2.gif
-  * </TD>
-  * <TD>2</TD><TD>Double rotation (180�)</TD>
-  * <TD>-1</TD><TD>0</TD><TD>0</TD><TD>-1</TD> 
-  * </TR>
-  * <TR>
-  * <TD>R3</TD>
-  * <TD>
-  * \image html r3.gif
-  * </TD>
-  * <TD>3</TD><TD>Triple rotation (270�)</TD>
-  * <TD>0</TD><TD>1</TD><TD>-1</TD><TD>0</TD>
-  * </TR>
-  * <TR>
-  * <TD>MX</TD>
-  * <TD>
-  * \image html mx.gif
-  * </TD>
-  * <TD>4</TD><TD>Horizontal symetry (Mirror X)</TD> 
-  * <TD>-1</TD><TD>0</TD><TD>0</TD><TD>1</TD>
-  * </TR>
-  * <TR>
-  * <TD>XR</TD>
-  * <TD>
-  * \image html xr.gif
-  * </TD>
-  * <TD>5</TD><TD>Horizontal symetry followed by a 90� rotation</TD>
-  * <TD>0</TD><TD>-1</TD><TD>-1</TD><TD>0</TD>
-  * </TR>
-  * <TR>
-  * <TD>MY</TD>
-  * <TD>
-  * \image html my.gif
-  * </TD>
-  * <TD>6</TD><TD>Vertical symetry (Mirror Y)</TD>
-  * <TD>1</TD><TD>0</TD><TD>0</TD><TD>-1</TD>
-  * </TR>
-  * <TR>
-  * <TD>YR</TD>
-  * <TD>
-  * \image html yr.gif
-  * </TD>
-  * <TD>7</TD><TD>Vertical symetry followed by a 90� rotation</TD>
-  * <TD>0</TD><TD>1</TD><TD>1</TD><TD>0</TD>
-  * </TR>
-  * </TABLE>
   *
-  *                The transformation formula is given by : x' = (a * x) + (b * 
-  *                y) + tx y' = (c * x) + (d * y) + ty where x and y are the 
+  * <table>
+  *   <caption>Orientation codes and associated transformation matrix</caption>
+  *   <tr>
+  *     <td><center>Name</center>
+  *     <td><center>Aspect</center>
+  *     <td><center>Code</center>
+  *     <td><center>Signification</center>
+  *     <td width="6%"><center>a</center>
+  *     <td width="6%"><center>b</center>
+  *     <td width="6%"><center>c</center>
+  *     <td width="6%"><center>d</center>
+  *   <tr>
+  *     <td><center><b>ID</b></center> <td>\image html transf-ID.png ""
+  *     <td> <center><b>0</b></center> <td> Identity
+  *     <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>1</center>
+  *   <tr>
+  *     <td><center><b>R1</b></center> <td>\image html transf-R1.png ""
+  *     <td> <center><b>1</b></center> <td> Simple rotation (90�)
+  *     <td> <center>0</center> <td> <center>-1</center> <td> <center>1</center> <td> <center>0</center>
+  *   <tr>
+  *     <td><center><b>R2</b></center> <td>\image html transf-R2.png ""
+  *     <td> <center><b>2</b></center> <td> Double rotation (180�)
+  *     <td> <center>-1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center> 
+  *   <tr>
+  *     <td><center><b>R3</b></center> <td>\image html transf-R3.png ""
+  *     <td><center><b>3</b></center><td>Triple rotation (270�)
+  *     <td><center>0</center><td><center>1</center><td><center>-1</center><td><center>0</center>
+  *   <tr>
+  *     <td><center><b>MX</b></center> <td>\image html transf-MX.png ""
+  *     <td> <center><b>4</b></center> <td>Horizontal symetry (Mirror X)
+  *     <td> <center>-1 </center><td> <center>0 </center><td> <center>0 </center><td> <center>1</center>
+  *   <tr>
+  *     <td><center><b>XR</b></center> <td>\image html transf-XR.png ""
+  *     <td><center><b>5</b></center><td>Horizontal symetry followed by a 90� rotation
+  *     <td> <center>0</center> <td> <center>-1</center> <td> <center>-1</center> <td> <center>0</center>
+  *   <tr>
+  *     <td><center><b>MY</b></center><td>\image html transf-MY.png ""
+  *     <td><center><b>6</b></center><td>Vertical symetry (Mirror Y)
+  *     <td> <center>1</center> <td> <center>0</center> <td> <center>0</center> <td> <center>-1</center>
+  *   <tr>
+  *     <td><center><b>YR</b></center> <td>\image html transf-YR.png ""
+  *     <td><center><b>7</b></center><td>Vertical symetry followed by a 90� rotation
+  *     <td> <center>0</center> <td> <center>1</center> <td> <center>1</center> <td> <center>0</center>
+  * </table>
+  *
+  *                The transformation formula is given by:
+                   \f[
+                      \Large
+                      \left \{
+                      \begin{array}{r c l l l l l}
+                      x' & = & (a \times x) & + & (b \times y) & + & tx \\
+                      y' & = & (c \times x) & + & (d \times y) & + & ty
+                      \end{array}
+                      \right .
+                   \f]
+  *                where x and y are the 
   *                coordinates of any point, x' and y' the coordinates of the 
   *                transformed point, tx and ty the horizontal and vertical 
   *                components of the translation and where a, b, c and d are the 
diff --git a/hurricane/doc/hurricane/customHierarchy.html b/hurricane/doc/hurricane/customHierarchy.html
index 1e43f7f0..e419e2c5 100644
--- a/hurricane/doc/hurricane/customHierarchy.html
+++ b/hurricane/doc/hurricane/customHierarchy.html
@@ -4,7 +4,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
     <title>Hurricane Documentation</title>
-    <link href="ASIM.css" rel="stylesheet" type="text/css">
+    <link href="SoC.css" rel="stylesheet" type="text/css">
   </head>
     <h1 id="pagetop" class="header">Hurricane Documentation</h1>
     <center class="header">
diff --git a/hurricane/doc/hurricane/customSummary.html b/hurricane/doc/hurricane/customSummary.html
index ed99ddc4..9320096a 100644
--- a/hurricane/doc/hurricane/customSummary.html
+++ b/hurricane/doc/hurricane/customSummary.html
@@ -4,7 +4,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
     <title>Hurricane Documentation</title>
-    <link href="ASIM.css" rel="stylesheet" type="text/css">
+    <link href="SoC.css" rel="stylesheet" type="text/css">
   </head>
     <h1 class="header">Hurricane Documentation</h1>
     <center class="header">
diff --git a/hurricane/doc/hurricane/doxyfile b/hurricane/doc/hurricane/doxyfile
index e93f3a17..8cd487ce 100644
--- a/hurricane/doc/hurricane/doxyfile
+++ b/hurricane/doc/hurricane/doxyfile
@@ -947,7 +947,7 @@ HTML_FOOTER            = footer.html
 # the style sheet file to the HTML output directory, so don't put your own 
 # stylesheet in the HTML output directory as well, or it will be erased!
 
-HTML_STYLESHEET        = ASIM.css
+HTML_STYLESHEET        = SoC.css
 
 # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
 # files or namespaces will be aligned in HTML using tables. If set to 
diff --git a/hurricane/doc/hurricane/header.html b/hurricane/doc/hurricane/header.html
index 0b392efb..58f8407e 100644
--- a/hurricane/doc/hurricane/header.html
+++ b/hurricane/doc/hurricane/header.html
@@ -3,7 +3,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
     <title>Hurricane Documentation</title>
-    <link href="ASIM.css" rel="stylesheet" type="text/css">
+    <link href="SoC.css" rel="stylesheet" type="text/css">
   </head>
     <h1 id="pagetop" class="header">Hurricane Documentation</h1>
     <center class="header">
diff --git a/hurricane/doc/viewer/SoC.css b/hurricane/doc/viewer/SoC.css
new file mode 100644
index 00000000..276a7c09
--- /dev/null
+++ b/hurricane/doc/viewer/SoC.css
@@ -0,0 +1,559 @@
+
+
+/*
+ * +-----------------------------------------------------------------+
+ * |                       HTML Standart Tags                        |
+ * +-----------------------------------------------------------------+
+ */
+
+ html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 {
+   font-size:                   11pt;
+   /* The Open Sans font family is supplied by TexLive. */
+   font-family:                 "Open Sans", Verdana, sans-serif;;
+ }
+
+ body {
+   color:                       black;
+   background:                  white;
+   background-color:            white;
+   background-position:         top left;
+   background-attachment:       fixed;
+   background-repeat:           no-repeat;
+   margin-top:                  2em;
+   width:                       550pt;
+   margin-right:                auto;
+   margin-left:                 auto;
+   /*
+   margin-right:                12%;
+   margin-left:                 12%;
+   */
+ }
+
+ hr {
+   height:                      1px;
+   border:                      0;
+   color:                       #004400;
+   background-color:            #004400;
+ }
+
+
+ h1, h2, h3, h4, h5, h6 {
+   /*font-family:                 "Liberation Serif", sans-serif;*/
+ }
+
+ h1                 { text-align:  center; }
+ h2, h3, h4, h5, h6 { text-align:  left;
+                      padding-top: 11pt;
+                    }
+ h1, h2, h3         { /*font-family: "Liberation Serif", sans-serif; */
+                    /*color:       #09550B;*/
+                    }
+ h1                 { font-weight:normal;       font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; }
+ h2                 { font-weight:normal;       font-size: 140%; letter-spacing:0.2em; word-spacing:0.4em; }
+ h3                 { font-weight:  bold;       font-size: 118%; letter-spacing:0.2em; word-spacing:0.4em; }
+ h4                 { font-weight:  bold;       font-size: 100%; }
+ h5                 { font-style:   italic;     font-size: 100%; }
+ h6                 { font-variant: small-caps; font-size: 100%; }
+
+ h2.classHierarchy {
+ /*border:                      1px none #008500;*/
+   border:                      1px none #000000;
+   border-top-width:            1px;
+   border-top-style:            dotted;
+   padding-top:                 1em;
+ }
+ 
+
+ .hide {
+   display:                     none;
+   color:                       white;
+ }
+
+
+ p {
+   margin-top:                  0.6em;
+   margin-bottom:               0.6em;
+   margin-left:                 0.0em;
+   margin-right:                0.0em;
+ }
+
+
+ address {
+   text-align:                  right;
+   font-weight:                 bold;
+   font-style:                  italic;
+   font-size:                   80%;
+ }
+
+
+ caption { font-weight: bold }
+
+
+ blockquote {
+   margin-left:                 4em;
+   margin-right:                4em;
+   margin-top:                  0.8em;
+   margin-bottom:               0.8em;
+   font-style:                  italic;
+   color:                       #003300;
+ }
+
+ blockquote p {
+   margin-bottom:               0;
+ }
+
+ blockquote address {
+   margin:                      0;
+ }
+
+
+ table {
+   border-collapse:             collapse;
+ }
+
+ dt, dd { margin-top: 0; margin-bottom: 0; }
+ dt     { font-weight: bold; }
+
+
+ pre, tt, code {
+   /*font-family:                 "andale mono", monospace;*/
+   font-size:                   100%;
+   white-space:                 pre;
+ }
+
+ pre {
+   font-size:                   80%;
+   border:                      dashed;
+   border-width:                thin;
+   border-color:                #003300;
+   /*
+   background-color:            #EEEEEE;
+   */
+   background-color:            #FCFCE1;
+   padding:                     0.5em;
+   margin-left:                 2em;
+   margin-right:                2em
+ }
+
+ tt          { color:           green;   }
+ em          { font-style:      italic;
+               font-weight:     normal;  }
+ strong      { font-weight:     bold;    }
+
+ span.textit { font-style:      italic;  }
+ span.textbf { font-weight:     bold;    }
+
+ .small      { font-size:       90%;     }
+ .white      { color:           #FFFFFF; }
+
+
+ ul.toc {
+   list-style:                  disc;
+   list-style:                  none;
+ }
+
+
+ a:link img, a:visited img { border-style: none; }
+ a img                     { color: white; }
+
+ a:link, a:active, a:visited {
+   color:                       #09550B;
+   text-decoration:             none;
+ }
+
+ a:hover, a:focus {
+   color:                       #FF9900;
+   text-decoration:             underline;
+ }
+
+
+/*
+ * +-----------------------------------------------------------------+
+ * |                    Doxygen Specific Classes                     |
+ * +-----------------------------------------------------------------+
+ */
+
+
+/* -------------------------------------------------------------------
+ * Header & Footer Classes (customized top page navigation bar).
+ */
+
+ h1.header {
+   font-size:                   200%;
+ /*font-family:                 times, verdana, sans-serif;*/
+ }
+
+ center.header {
+   background-color:            #CCE6CA;
+ }
+
+ table.header {
+ /*width:                       100%;*/
+ /*background-color:            #EEEEEE;*/
+   background-color:            #CCE6CA;
+ }
+
+ table.header td {
+   padding:                     2px 14px;
+   text-align:                  center;
+   font-weight:                 bold;
+ /*font-family:                 verdana, sans-serif;*/
+   font-size:                   110%;
+ }
+
+ table.DoxUser td, table.DoxUser th {
+   padding:                    0px 5px;
+   border:                     0px;
+ }
+
+ table.DoxUser th {
+   background-color:            #CCE6CA;
+ }
+
+ table.footer1, table.footer2 { width:       100%;  }
+ td.LFooter                   { text-align:  left;  }
+ td.RFooter                   { text-align:  right; }
+ td.CFooter                   { text-align:  center;}
+ table.footer2 td.RFooter     { font-weight: bold; width: 35%  }
+ table.footer2 td.CFooter     { width: 30%  }
+ table.footer2 td.LFooter     { font-weight: bold; width: 35%; /*font-family: time;*/ }
+
+ table.classHierarchy {
+   border-collapse:             separate;
+   border-spacing:              5px;
+   font-size:                   110%;
+ }
+
+ table.classHierarchy tr {
+   border:                      1px solid blue;
+ }
+
+ table.classHierarchy td.normal {
+   border:                      1px solid #CCE6CA;
+   width:                       140pt;
+   text-align:                  center;
+   font-weight:                 bold;
+   background-color:            #CCE6CA;
+ }
+
+ table.classHierarchy td.virtual {
+   border:                      1px solid black;
+   width:                       140pt;
+   text-align:                  center;
+   font-weight:                 bold;
+ }
+
+ table.classHierarchy td.wnormal {
+   border:                      1px solid #CCE6CA;
+   width:                       240pt;
+   text-align:                  center;
+   font-weight:                 bold;
+   background-color:            #CCE6CA;
+ }
+
+ table.classHierarchy td.wvirtual {
+   border:                      1px solid black;
+   width:                       240pt;
+   text-align:                  center;
+   font-weight:                 bold;
+ }
+
+ div.ah {
+ /*font-family:                 time;*/
+   font-size:                   250%;
+ }
+
+
+/* -------------------------------------------------------------------
+ * Quick Index Class (top page navigation bar).
+ */
+
+ div.qindex, div.nav {
+   width:                       100%-4px;
+ /*background-color:            #DADAEF;*/
+ /*background-color:            #eeeeff;*/
+ /*background-color:            #EEEEEE;*/
+   background-color:            #CCE6CA;
+   border:                      0px solid #003300;
+   text-align:                  center;
+   margin:                      0px;
+   padding:                     2px;
+   line-height:                 140%;
+ }
+
+ a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef {
+   text-decoration:             none;
+ /*font-family:                 Courier;*/
+   font-weight:                 normal;
+ /*font-size:                   110%;*/
+ }
+
+ a.qindex, a.qindex:visited {
+   color:                       #09550B;
+ }
+
+ a.qindex:hover {
+   background-color:            #ddddff;
+ }
+
+ a.qindexHL, a.qindexHL:hover, a.qindexHL:visited {
+   background-color:            #0c780c;
+   color:                       #ffffff;
+   border:                      1px double #9295C2;
+ }
+
+ a.code:link, a.code:visited, a.codeRef:link, a.codeRef:visited {
+   text-decoration:             none;
+   font-weight:                 normal;
+   color:                       #0000ff;
+ }
+
+ .indexkey {
+   background-color:            #eeeeff;
+   border:                      1px solid #b0b0b0;
+   padding:                     2px 15px;
+ }
+
+ .indexkey, .indexvalue {
+   background-color:            #eeeeff;
+   border:                      1px solid #b0b0b0;
+   padding:                     2px 15px;
+ }
+
+ .indexkey {
+   width:                       40%;
+ }
+
+ .indexvalue {
+   width:                       80%;
+ }
+
+ h3 a[name="index__"],
+ h3 a[name="index_a"],
+ h3 a[name="index_b"],
+ h3 a[name="index_c"],
+ h3 a[name="index_d"],
+ h3 a[name="index_e"],
+ h3 a[name="index_f"],
+ h3 a[name="index_g"],
+ h3 a[name="index_h"],
+ h3 a[name="index_i"],
+ h3 a[name="index_j"],
+ h3 a[name="index_k"],
+ h3 a[name="index_l"],
+ h3 a[name="index_m"],
+ h3 a[name="index_n"],
+ h3 a[name="index_o"],
+ h3 a[name="index_p"],
+ h3 a[name="index_q"],
+ h3 a[name="index_r"],
+ h3 a[name="index_s"],
+ h3 a[name="index_t"],
+ h3 a[name="index_u"],
+ h3 a[name="index_v"],
+ h3 a[name="index_w"],
+ h3 a[name="index_x"],
+ h3 a[name="index_y"],
+ h3 a[name="index_z"],
+ h3 a[name="index_0"],
+ h3 a[name="index_1"],
+ h3 a[name="index_2"],
+ h3 a[name="index_3"],
+ h3 a[name="index_4"],
+ h3 a[name="index_5"],
+ h3 a[name="index_6"],
+ h3 a[name="index_7"],
+ h3 a[name="index_8"],
+ h3 a[name="index_9"]
+ h3 a[id="index__"],
+ h3 a#index_a,
+ h3 a#index_b,
+ h3 a#index_c,
+ h3 a#index_d,
+ h3 a#index_e,
+ h3 a#index_f,
+ h3 a#index_g,
+ h3 a#index_h,
+ h3 a#index_i,
+ h3 a#index_j,
+ h3 a#index_k,
+ h3 a#index_l,
+ h3 a#index_m,
+ h3 a#index_n,
+ h3 a#index_o,
+ h3 a#index_p,
+ h3 a#index_q,
+ h3 a#index_r,
+ h3 a#index_s,
+ h3 a#index_t,
+ h3 a#index_u,
+ h3 a#index_v,
+ h3 a#index_w,
+ h3 a#index_x,
+ h3 a#index_y,
+ h3 a#index_z,
+ h3 a#index_0,
+ h3 a#index_1,
+ h3 a#index_2,
+ h3 a#index_3,
+ h3 a#index_4,
+ h3 a#index_5,
+ h3 a#index_6,
+ h3 a#index_7,
+ h3 a#index_8,
+ h3 a#index_9,
+ h3 a#index_0x7e
+ {
+   font-family:                 time;
+   font-size:                   250%;
+ }
+
+
+/* -------------------------------------------------------------------
+ * Verbatim Source Code / Examples.
+ */
+
+ /* pre.fragment       { background-color: #EEEEEE; } */
+
+ span.keyword       { color: #008000 }
+ span.keywordtype   { color: #604020 }
+ span.keywordflow   { color: #e08000 }
+ span.comment       { color: #800000 }
+ span.preprocessor  { color: #806020 }
+ span.stringliteral { color: #002080 }
+ span.charliteral   { color: #008080 }
+ span.red           { color: red }
+
+
+/* -------------------------------------------------------------------
+ * Attributes Listing.
+ */
+
+p.formulaDsp {
+  text-align: center;
+}
+
+ .mdTable {
+ /*border:                      1px solid #868686;*/
+ /*background-color:            #DADAEF;*/
+ /*background-color:            #F4F4FB;*/
+   border:                      1px none #008500;
+   border-left-width:           1px;
+   border-left-style:           solid;
+ /*background-color:            #B8E6B8;*/
+ /*background-color:            #CCE6CA;*/
+   margin-top:                  25px;
+   font-size:                   105%;
+ }
+
+ .mdRow {
+   padding:                     5px 10px;
+ }
+
+ /* This Mozilla/Firefox bug has been corrected from v1.5.
+  * .mdname1 {
+  *   padding:                     3px 0px 0px 0px;
+  * }
+ */
+
+ .mdescLeft, .mdescRight {
+   padding:                     0px 8px 4px 8px;
+   font-size:                   11px;
+   font-style:                  italic;
+ /*background-color:            #FAFAFA;*/
+   border-top:                  1px none #E0E0E0;
+   border-right:                1px none #E0E0E0;
+   border-bottom:               1px none #E0E0E0;
+   border-left:                 1px none #E0E0E0;
+   margin:                      0px;
+ }
+
+ .memitem {
+   margin-bottom:               30px;
+   border:                      1px none #008500;
+ }
+
+ .memproto {
+   background-color:            #CCE6CA;
+   border-left-width:           4px;
+   border-left-style:           solid;
+   border-color:                #008500;
+ }
+
+ .memname {
+   white-space:                 nowrap;
+   padding-left:                5px;
+   font-size:                   105%;
+ }
+
+ table.memname * {
+   font-family:                 "Monospace";
+ }
+
+
+ .memdoc{
+   padding-left:                5px;
+ /*margin-top:                  -8px;*/
+   border-left-width:           1px;
+   border-left-style:           solid;
+   border-color:                #008500;
+ }
+
+ div.contents * table tr {
+   padding:                     3px 3px 3px 8px;
+ }
+
+ .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight {
+ /*padding:                     1px 0px 0px 8px;*/
+   padding:                     3px 3px 3px 8px;
+   margin:                      4px;
+   border-top-width:            1px;
+   border-right-width:          1px;
+   border-bottom-width:         1px;
+   border-left-width:           1px;
+ /*
+   border-top-color:            #0c0c0c;
+   border-right-color:          #0c0c0c;
+   border-bottom-color:         #0c0c0c;
+   border-left-color:           #0c0c0c;
+  */
+   border-top-style:            none;
+   border-right-style:          none;
+   border-bottom-style:         dotted;
+   border-left-style:           none;
+ /*background-color:            #DADAEF;*/
+ /*background-color:            #eeeeff;*/
+ /*background-color:            #EEEEEE;*/
+ /*background-color:            #CCE6CA;*/
+   font-family:                 "Monospace";
+ }
+
+ .memTemplItemLeft, .memTemplItemRight {
+   border-bottom-width:         2px;
+   border-bottom-style:         solid;
+   font-weight:                 bold;
+ }
+
+ .memItemLeft       { font-size: 11px; width: 35%; }
+ .memItemRight      { font-size: 12px; }
+ .memTemplItemLeft  { font-size: 11px; }
+ .memTemplItemRight { font-size: 12px; }
+
+ .memTemplParams {
+   color:                       #FFFFFF;
+   background-color:            #000000;
+   font-size:                   11px;
+   font-weight:                 bold;
+ }
+
+ .groupText, .groupHeader       {
+   color:                       #09550B;
+   font-size:                   130%;
+   font-weight:                 bold;
+   margin-top:                  15px;
+ }
+
+ .groupHeader       {
+   margin-bottom:              -30pt;
+ }
+
diff --git a/hurricane/doc/viewer/customSummary.html b/hurricane/doc/viewer/customSummary.html
index 14747174..19e3d093 100644
--- a/hurricane/doc/viewer/customSummary.html
+++ b/hurricane/doc/viewer/customSummary.html
@@ -4,7 +4,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
     <title>Hurricane Documentation</title>
-    <link href="ASIM.css" rel="stylesheet" type="text/css">
+    <link href="SoC.css" rel="stylesheet" type="text/css">
   </head>
     <h1 class="header">Hurricane Documentation</h1>
     <center class="header">
diff --git a/hurricane/doc/viewer/doxyfile b/hurricane/doc/viewer/doxyfile
index 92bcbab5..71e1ef4e 100644
--- a/hurricane/doc/viewer/doxyfile
+++ b/hurricane/doc/viewer/doxyfile
@@ -820,7 +820,7 @@ HTML_FOOTER            = footer.html
 # the style sheet file to the HTML output directory, so don't put your own 
 # stylesheet in the HTML output directory as well, or it will be erased!
 
-HTML_STYLESHEET        = ASIM.css
+HTML_STYLESHEET        = SoC.css
 
 # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
 # files or namespaces will be aligned in HTML using tables. If set to 
diff --git a/hurricane/doc/viewer/header.html b/hurricane/doc/viewer/header.html
index 70e9e997..5555dfc8 100644
--- a/hurricane/doc/viewer/header.html
+++ b/hurricane/doc/viewer/header.html
@@ -3,7 +3,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
     <title>Hurricane Viewer Documentation</title>
-    <link href="ASIM.css" rel="stylesheet" type="text/css">
+    <link href="SoC.css" rel="stylesheet" type="text/css">
   </head>
     <h1 id="pagetop" class="header">Hurricane Viewer Documentation</h1>
     <center class="header">
diff --git a/hurricane/src/hurricane/Cell.cpp b/hurricane/src/hurricane/Cell.cpp
index 807f4272..8181fd80 100644
--- a/hurricane/src/hurricane/Cell.cpp
+++ b/hurricane/src/hurricane/Cell.cpp
@@ -19,6 +19,7 @@
 
 //#define  TEST_INTRUSIVESET
 
+#include "hurricane/SharedName.h"
 #include "hurricane/Cell.h"
 #include "hurricane/DataBase.h"
 #include "hurricane/Library.h"
@@ -215,7 +216,7 @@ void Cell::flattenNets(bool buildRings)
       }
 
       forEach ( Occurrence, iplugOccurrence, hyperNet.getLeafPlugOccurrences() ) {
-        currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea );
+        currentRP = RoutingPad::create ( net, *iplugOccurrence, RoutingPad::BiggestArea|RoutingPad::ShowWarning );
         currentRP->materialize ();
         if ( buildRings ) {
           if ( previousRP ) {
@@ -409,10 +410,10 @@ Name Cell::InstanceMap::_getKey(Instance* instance) const
     return instance->getName();
 }
 
-unsigned Cell::InstanceMap::_getHashValue(Name name) const
+unsigned int  Cell::InstanceMap::_getHashValue(Name name) const
 // *******************************************************
 {
-    return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
+  return name._getSharedName()->getId() / 8;
 }
 
 Instance* Cell::InstanceMap::_getNextElement(Instance* instance) const
@@ -442,7 +443,7 @@ Cell::SlaveInstanceSet::SlaveInstanceSet()
 unsigned Cell::SlaveInstanceSet::_getHashValue(Instance* slaveInstance) const
 // **************************************************************************
 {
-    return ( (unsigned int)( (unsigned long)slaveInstance ) ) / 8;
+  return slaveInstance->getId() / 8;
 }
 
 Instance* Cell::SlaveInstanceSet::_getNextElement(Instance* slaveInstance) const
@@ -478,7 +479,7 @@ Name Cell::NetMap::_getKey(Net* net) const
 unsigned Cell::NetMap::_getHashValue(Name name) const
 // **************************************************
 {
-    return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
+  return (unsigned int)name._getSharedName()->getId() / 8;
 }
 
 Net* Cell::NetMap::_getNextElement(Net* net) const
@@ -513,7 +514,7 @@ Name Cell::PinMap::_getKey(Pin* pin) const
 unsigned Cell::PinMap::_getHashValue(Name name) const
 // **************************************************
 {
-    return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
+  return (unsigned int)name._getSharedName()->getId() / 8;
 }
 
 Pin* Cell::PinMap::_getNextElement(Pin* pin) const
@@ -548,7 +549,7 @@ const Layer* Cell::SliceMap::_getKey(Slice* slice) const
 unsigned Cell::SliceMap::_getHashValue(const Layer* layer) const
 // *************************************************************
 {
-    return ( (unsigned int)( (unsigned long)layer ) ) / 8;
+  return (unsigned int)layer->getMask() / 8;
 }
 
 Slice* Cell::SliceMap::_getNextElement(Slice* slice) const
@@ -578,7 +579,7 @@ Cell::MarkerSet::MarkerSet()
 unsigned Cell::MarkerSet::_getHashValue(Marker* marker) const
 // **********************************************************
 {
-    return ( (unsigned int)( (unsigned long)marker ) ) / 8;
+  return (unsigned int)marker->getId() / 8;
 }
 
 Marker* Cell::MarkerSet::_getNextElement(Marker* marker) const
diff --git a/hurricane/src/hurricane/Entity.cpp b/hurricane/src/hurricane/Entity.cpp
index 3a8d813d..96739147 100644
--- a/hurricane/src/hurricane/Entity.cpp
+++ b/hurricane/src/hurricane/Entity.cpp
@@ -17,6 +17,8 @@
 // not, see <http://www.gnu.org/licenses/>.
 // ****************************************************************************************************
 
+#include <limits>
+#include "hurricane/Error.h"
 #include "hurricane/Entity.h"
 #include "hurricane/Quark.h"
 #include "hurricane/Cell.h"
@@ -31,11 +33,19 @@ namespace Hurricane {
 // Entity implementation
 // ****************************************************************************************************
 
-Entity::Entity()
-// *************
-:    Inherit()
-{
-}
+
+  unsigned int  Entity::_idCounter = 0;
+
+
+  Entity::Entity()
+    : Inherit()
+    , _id(_idCounter++)
+  {
+    if (_idCounter == std::numeric_limits<unsigned int>::max()) {
+      throw Error( "Entity::Entity(): Identifier counter has reached it's limit (%d bits)."
+                 , std::numeric_limits<unsigned int>::digits );
+    }
+  }
 
 
   void Entity::_preDestroy()
@@ -85,7 +95,9 @@ Entity::Entity()
 string Entity::_getString() const
 // ******************************
 {
-    return Inherit::_getString();
+    string s = Inherit::_getString();
+    s.insert(1, "id:"+getString(_id)+" ");
+    return s;
 }
 
 Record* Entity::_getRecord() const
@@ -93,6 +105,7 @@ Record* Entity::_getRecord() const
 {
     Record* record = Inherit::_getRecord();
     if (record) {
+        record->add(getSlot("_id", _id));
         Occurrence occurrence = Occurrence(this);
         if (occurrence.hasProperty())
             record->add(getSlot("Occurrence", occurrence));
diff --git a/hurricane/src/hurricane/Error.cpp b/hurricane/src/hurricane/Error.cpp
index 810c9b22..cc7b2d97 100644
--- a/hurricane/src/hurricane/Error.cpp
+++ b/hurricane/src/hurricane/Error.cpp
@@ -19,12 +19,7 @@
 // License along with Hurricane. If not, see
 //                                     <http://www.gnu.org/licenses/>.
 //
-// ===================================================================
-//
-// $Id$
-//
-// x-----------------------------------------------------------------x
-// |                                                                 |
+// +-----------------------------------------------------------------+
 // |                  H U R R I C A N E                              |
 // |     V L S I   B a c k e n d   D a t a - B a s e                 |
 // |                                                                 |
@@ -32,10 +27,7 @@
 // |  E-mail      :            Jean-Paul.Chaput@lip6.fr              |
 // | =============================================================== |
 // |  C++ Module  :  "./Error.cpp"                                   |
-// | *************************************************************** |
-// |  U p d a t e s                                                  |
-// |                                                                 |
-// x-----------------------------------------------------------------x
+// +-----------------------------------------------------------------+
 
 
 #include  <execinfo.h>
diff --git a/hurricane/src/hurricane/Instance.cpp b/hurricane/src/hurricane/Instance.cpp
index 349693c8..b572d8fe 100644
--- a/hurricane/src/hurricane/Instance.cpp
+++ b/hurricane/src/hurricane/Instance.cpp
@@ -17,6 +17,7 @@
 // not, see <http://www.gnu.org/licenses/>.
 // ****************************************************************************************************
 
+#include "hurricane/SharedPath.h"
 #include "hurricane/Instance.h"
 #include "hurricane/Cell.h"
 #include "hurricane/Net.h"
@@ -639,7 +640,7 @@ const Net* Instance::PlugMap::_getKey(Plug* plug) const
 unsigned Instance::PlugMap::_getHashValue(const Net* masterNet) const
 // ******************************************************************
 {
-    return ( (unsigned int)( (unsigned long)masterNet ) ) / 8;
+  return masterNet->getId() / 8;
 }
 
 Plug* Instance::PlugMap::_getNextElement(Plug* plug) const
@@ -675,7 +676,7 @@ const SharedPath* Instance::SharedPathMap::_getKey(SharedPath* sharedPath) const
 unsigned Instance::SharedPathMap::_getHashValue(const SharedPath* tailSharedPath) const
 // ************************************************************************************
 {
-    return ( (unsigned int)( (unsigned long)tailSharedPath ) ) / 8;
+  return (tailSharedPath) ? (tailSharedPath->getId()/8) : 0;
 }
 
 SharedPath* Instance::SharedPathMap::_getNextElement(SharedPath* sharedPath) const
diff --git a/hurricane/src/hurricane/Library.cpp b/hurricane/src/hurricane/Library.cpp
index 2ecab9df..bf85f7ad 100644
--- a/hurricane/src/hurricane/Library.cpp
+++ b/hurricane/src/hurricane/Library.cpp
@@ -17,6 +17,7 @@
 // not, see <http://www.gnu.org/licenses/>.
 // ****************************************************************************************************
 
+#include "hurricane/SharedName.h"
 #include "hurricane/Library.h"
 #include "hurricane/DataBase.h"
 #include "hurricane/Cell.h"
@@ -163,7 +164,7 @@ Name Library::LibraryMap::_getKey(Library* library) const
 unsigned Library::LibraryMap::_getHashValue(Name name) const
 // *********************************************************
 {
-    return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
+  return name._getSharedName()->getId() / 8;
 }
 
 Library* Library::LibraryMap::_getNextElement(Library* library) const
@@ -199,7 +200,7 @@ Name Library::CellMap::_getKey(Cell* cell) const
 unsigned Library::CellMap::_getHashValue(Name name) const
 // ******************************************************
 {
-    return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
+  return name._getSharedName()->getId() / 8;
 }
 
 Cell* Library::CellMap::_getNextElement(Cell* cell) const
diff --git a/hurricane/src/hurricane/Net.cpp b/hurricane/src/hurricane/Net.cpp
index c18188f1..892e4ed1 100644
--- a/hurricane/src/hurricane/Net.cpp
+++ b/hurricane/src/hurricane/Net.cpp
@@ -770,7 +770,7 @@ Net::ComponentSet::ComponentSet()
 unsigned Net::ComponentSet::_getHashValue(Component* component) const
 // ******************************************************************
 {
-    return ( (unsigned int)( (unsigned long)component ) ) / 8;
+  return component->getId() / 8;
 }
 
 Component* Net::ComponentSet::_getNextElement(Component* component) const
@@ -800,7 +800,7 @@ Net::RubberSet::RubberSet()
 unsigned Net::RubberSet::_getHashValue(Rubber* rubber) const
 // *********************************************************
 {
-    return ( (unsigned int)( (unsigned long)rubber ) ) / 8;
+  return rubber->getId() / 8;
 }
 
 Rubber* Net::RubberSet::_getNextElement(Rubber* rubber) const
diff --git a/hurricane/src/hurricane/Pin.cpp b/hurricane/src/hurricane/Pin.cpp
index 5ecf2821..5f16db04 100644
--- a/hurricane/src/hurricane/Pin.cpp
+++ b/hurricane/src/hurricane/Pin.cpp
@@ -37,7 +37,7 @@ Pin::Pin(Net* net, const Name& name, const AccessDirection& accessDirection, con
     _nextOfCellPinMap(NULL)
 {
     if (getCell()->getPin(name))
-        throw Error("Can't create " + _TName("Pin") + " : already exists");
+      throw Error("Can't create " + _TName("Pin") + " <" + getString(name) + "> : already exists");
 
 }
 
diff --git a/hurricane/src/hurricane/QuadTree.cpp b/hurricane/src/hurricane/QuadTree.cpp
index 6be1da46..f3c54364 100644
--- a/hurricane/src/hurricane/QuadTree.cpp
+++ b/hurricane/src/hurricane/QuadTree.cpp
@@ -464,7 +464,7 @@ void QuadTree::_explode()
         _urChild = new QuadTree(this);
         _llChild = new QuadTree(this);
         _lrChild = new QuadTree(this);
-        set<Go*> goSet;
+        set<Go*,Entity::CompareById> goSet;
         for_each_go(go, _goSet.getElements()) {
             _goSet._remove(go);
             go->_quadTree = NULL;
@@ -539,7 +539,7 @@ QuadTree::GoSet::GoSet()
 unsigned QuadTree::GoSet::_getHashValue(Go* go) const
 // **************************************************
 {
-    return ( (unsigned int)( (unsigned long)go ) ) / 8;
+  return go->getId() / 8;
 }
 
 Go* QuadTree::GoSet::_getNextElement(Go* go) const
diff --git a/hurricane/src/hurricane/RoutingPad.cpp b/hurricane/src/hurricane/RoutingPad.cpp
index b50905e4..55fef687 100644
--- a/hurricane/src/hurricane/RoutingPad.cpp
+++ b/hurricane/src/hurricane/RoutingPad.cpp
@@ -1,7 +1,7 @@
 
 // -*- C++ -*-
 //
-// Copyright (c) BULL S.A. 2000-2010, All Rights Reserved
+// Copyright (c) BULL S.A. 2000-2013, All Rights Reserved
 //
 // This file is part of Hurricane.
 //
@@ -23,8 +23,7 @@
 //
 // $Id$
 //
-// x-----------------------------------------------------------------x
-// |                                                                 |
+// +-----------------------------------------------------------------+
 // |                  H U R R I C A N E                              |
 // |     V L S I   B a c k e n d   D a t a - B a s e                 |
 // |                                                                 |
@@ -32,12 +31,10 @@
 // |  E-mail      :            Jean-Paul.Chaput@lip6.fr              |
 // | =============================================================== |
 // |  C++ Header  :  "./RoutingPad.h"                                |
-// | *************************************************************** |
-// |  U p d a t e s                                                  |
-// |                                                                 |
-// x-----------------------------------------------------------------x
+// +-----------------------------------------------------------------+
 
 
+#include <sstream>
 #include "hurricane/Net.h"
 #include "hurricane/NetExternalComponents.h"
 #include "hurricane/Layer.h"
@@ -48,17 +45,18 @@
 #include "hurricane/Vertical.h"
 #include "hurricane/Cell.h"
 #include "hurricane/Instance.h"
+#include "hurricane/Warning.h"
 #include "hurricane/Error.h"
 #include "hurricane/RoutingPad.h"
 
 
 namespace Hurricane {
 
+  using  std::ostringstream;
 
-  RoutingPad::RoutingPad ( Net* net, const Point& p, Occurrence occurrence )
+
+  RoutingPad::RoutingPad ( Net* net, Occurrence occurrence )
     :  Inherit   (net)
-    , _x         (p.getX())
-    , _y         (p.getY())
     , _occurrence(occurrence)
   { }
 
@@ -71,23 +69,23 @@ namespace Hurricane {
     Plug*    plug    = NULL;
     Pin*     pin     = NULL;
     Contact* contact = NULL;
-    Point    position;
 
-    if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) ) {
-      position = occurrence.getPath().getTransformation().getPoint( plug->getPosition() );
-    } else if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) ) {
-      position = occurrence.getPath().getTransformation().getPoint( pin->getPosition() );
-    } else if ( (contact = dynamic_cast<Contact*>(occurrence.getEntity()) ) ) {
-      position = occurrence.getPath().getTransformation().getPoint( contact->getPosition() );
+    if ( (plug = dynamic_cast<Plug*>(occurrence.getEntity()) ) == NULL) {
+      if ( (pin = dynamic_cast<Pin*>(occurrence.getEntity()) ) == NULL) {
+        contact = dynamic_cast<Contact*>(occurrence.getEntity());
+      }
     }
 
     if ( (not plug) and (not pin) and (not contact) )
-      throw Error ("Can't create RoutingPad : Plug Pin, or Contact Occurrence *required*");
+      throw Error ("Can't create RoutingPad : Plug, Pin, or Contact Occurrence *required*");
 
-    RoutingPad* routingPad = new RoutingPad(net, position, occurrence);
+    RoutingPad* routingPad = new RoutingPad( net, occurrence );
     routingPad->_postCreate();
 
-    if ( plug and (flags & ComponentSelection) ) routingPad->setOnBestComponent(flags);
+    if ( plug and (flags & ComponentSelection) )
+      routingPad->setOnBestComponent( flags );
+    if (not plug)
+      routingPad->isPlacedOccurrence( flags );
 
     return routingPad;
   }
@@ -117,8 +115,33 @@ namespace Hurricane {
   }
 
 
-  DbU::Unit RoutingPad::getX       () const { return _x; }
-  DbU::Unit RoutingPad::getY       () const { return _y; }
+  bool  RoutingPad::isPlacedOccurrence ( unsigned int flags ) const
+  {
+    vector<Instance*> unplaceds;
+    forEach( Instance*, iinstance, _occurrence.getPath().getInstances() ) {
+      if (iinstance->getPlacementStatus() == Instance::PlacementStatus::UNPLACED) {
+        unplaceds.push_back( *iinstance );
+      }
+    }
+
+    if (not unplaceds.empty() and (flags & ShowWarning)) {
+      ostringstream message;
+      message << "There are unplaced(s) instances in " << this << ":";
+      for ( size_t i=0 ; i<unplaceds.size() ; ++i ) {
+        message << "\n          * Instance <" << unplaceds[i]->getName() << ":"
+                << unplaceds[i]->getMasterCell()->getName() << "> in Cell <"
+                << unplaceds[i]->getCell()->getName() << ">";
+          ;
+      }
+      cerr << Warning( message.str() ) << endl;;
+    }
+
+    return not unplaceds.empty();
+  }
+
+
+  DbU::Unit RoutingPad::getX       () const { return getPosition().getX(); }
+  DbU::Unit RoutingPad::getY       () const { return getPosition().getY(); }
   DbU::Unit RoutingPad::getSourceX () const { return getSourcePosition().getX(); }
   DbU::Unit RoutingPad::getSourceY () const { return getSourcePosition().getY(); }
   DbU::Unit RoutingPad::getTargetX () const { return getTargetPosition().getX(); }
@@ -148,17 +171,28 @@ namespace Hurricane {
   const Layer* RoutingPad::getLayer () const
   {
     Component* component = _getEntityAsComponent();
-    if ( component ) return component->getLayer ();
+    if (component) return component->getLayer ();
 
     return NULL;
   }
 
 
+  Point RoutingPad::getPosition () const
+  {
+    Component* component = _getEntityAsComponent();
+    if (component)
+      return _occurrence.getPath().getTransformation().getPoint( component->getCenter() );
+
+    return Point();
+  }
+
+
   Point RoutingPad::getSourcePosition () const
   {
     Segment* segment = _getEntityAsSegment();
-    if ( segment )
+    if ( segment ) {
       return _occurrence.getPath().getTransformation().getPoint ( segment->getSourcePosition() );
+    }
 
     return getPosition();
   }
@@ -186,25 +220,7 @@ namespace Hurricane {
 
   void RoutingPad::translate(const DbU::Unit& dx, const DbU::Unit& dy)
   {
-    if ( (dx != 0) or (dy != 0) ) {
-      invalidate(true);
-      _x += dx;
-      _y += dy;
-    }
-  }
-
-
-  void RoutingPad::setX        ( const DbU::Unit& x ) { setPosition(x, getY()); }
-  void RoutingPad::setY        ( const DbU::Unit& y ) { setPosition(getX(), y); }
-  void RoutingPad::setPosition ( const DbU::Unit& x, const DbU::Unit& y ) { setOffset(x, y); }
-  void RoutingPad::setPosition ( const Point& position) { setPosition(position.getX(), position.getY()); }
-
-
-  void RoutingPad::setOffset ( const DbU::Unit& x, const DbU::Unit& y )
-  {
-    invalidate(true);
-    _x = x;
-    _y = y;
+  // Does nothing. The position is fixed and relative to the instance path.
   }
 
 
@@ -237,8 +253,6 @@ namespace Hurricane {
   {
     Record* record = Inherit::_getRecord();
     if ( record ) {
-      record->add(getSlot("_x"         , &_x       ));
-      record->add(getSlot("_y"         , &_y       ));
       record->add(getSlot("_occurrence",_occurrence));
     }
     return record;
@@ -275,21 +289,6 @@ namespace Hurricane {
     _occurrence.getMasterCell()->_removeSlaveEntity(_occurrence.getEntity(),this);
     _occurrence = Occurrence(component,Path(plugOccurrence.getPath(),plug->getInstance()));
 
-    Point       position   = _occurrence.getPath().getTransformation().getPoint ( component->getPosition() );
-    Horizontal* horizontal = dynamic_cast<Horizontal*>(component);
-
-    if ( horizontal ) {
-      setX ( 0 );
-      setY ( position.getY() );
-    } else {
-      Vertical* vertical = dynamic_cast<Vertical*>(component);
-      if ( vertical ) {
-        setX ( position.getX() );
-        setY ( 0 );
-      } else
-        setPosition ( position );
-    }
-
     _occurrence.getMasterCell()->_addSlaveEntity(_occurrence.getEntity(),this);
 
     if (!isMaterialized()) materialize();
@@ -320,8 +319,6 @@ namespace Hurricane {
     if (isMaterialized()) unmaterialize();
 
     _occurrence=getPlugOccurrence();
-    setPosition ( _occurrence.getPath().getTransformation().getPoint
-      ( dynamic_cast<Component*>(_occurrence.getEntity())->getPosition() ) );
   }
 
 
@@ -359,6 +356,7 @@ namespace Hurricane {
                   ,getString(plug->getInstance ()).c_str() );
 
     setExternalComponent ( bestComponent );
+    if (flags & ShowWarning) isPlacedOccurrence( flags );
 
     return bestComponent;
   }
diff --git a/hurricane/src/hurricane/SharedName.cpp b/hurricane/src/hurricane/SharedName.cpp
index 84eafa53..bc7c2869 100644
--- a/hurricane/src/hurricane/SharedName.cpp
+++ b/hurricane/src/hurricane/SharedName.cpp
@@ -17,6 +17,8 @@
 // not, see <http://www.gnu.org/licenses/>.
 // ****************************************************************************************************
 
+#include <limits>
+#include "hurricane/Error.h"
 #include "hurricane/SharedName.h"
 
 namespace Hurricane {
@@ -27,17 +29,25 @@ namespace Hurricane {
 // SharedName implementation
 // ****************************************************************************************************
 
-SharedName::SharedNameMap* SharedName::_SHARED_NAME_MAP = NULL;
+  SharedName::SharedNameMap* SharedName::_SHARED_NAME_MAP = NULL;
+  unsigned int               SharedName::_idCounter       = 0;
 
-SharedName::SharedName(const string& s)
-// ************************************
-:    _count(0),
-    _string(s)
+
+  SharedName::SharedName ( const string& name )
+    : _id    (_idCounter++)
+    , _count (0)
+    , _string(name)
 {
     if (!_SHARED_NAME_MAP) _SHARED_NAME_MAP = new SharedNameMap();
     (*_SHARED_NAME_MAP)[&_string] = this;
+
+    if (_idCounter == std::numeric_limits<unsigned int>::max()) {
+      throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)."
+                 , std::numeric_limits<unsigned int>::digits );
+    }
 }
 
+
 SharedName::~SharedName()
 // **********************
 {
@@ -66,8 +76,8 @@ Record* SharedName::_getRecord() const
 // *****************************
 {
     Record* record = new Record(getString(this));
-    record->add(getSlot("Count", &_count));
-    record->add(getSlot("String", &_string));
+    record->add(getSlot("_count", &_count));
+    record->add(getSlot("_string", &_string));
     return record;
 }
 
diff --git a/hurricane/src/hurricane/SharedPath.cpp b/hurricane/src/hurricane/SharedPath.cpp
index c755931b..d4de9bbd 100644
--- a/hurricane/src/hurricane/SharedPath.cpp
+++ b/hurricane/src/hurricane/SharedPath.cpp
@@ -17,6 +17,7 @@
 // not, see <http://www.gnu.org/licenses/>.
 // ****************************************************************************************************
 
+#include <limits>
 #include "hurricane/SharedPath.h"
 #include "hurricane/Instance.h"
 #include "hurricane/Cell.h"
@@ -30,6 +31,7 @@ namespace Hurricane {
 // SharedPath_Instances declaration
 // ****************************************************************************************************
 
+
 class SharedPath_Instances : public Collection<Instance*> {
 // ******************************************************
 
@@ -96,14 +98,22 @@ class SharedPath_Instances : public Collection<Instance*> {
 // ****************************************************************************************************
 
 static char NAME_SEPARATOR = '.';
+unsigned int  SharedPath::_idCounter = 0;
+
 
 SharedPath::SharedPath(Instance* headInstance, SharedPath* tailSharedPath)
 // ***********************************************************************
-:  _headInstance(headInstance),
+  : _id(_idCounter++),
+    _headInstance(headInstance),
     _tailSharedPath(tailSharedPath),
     _quarkMap(),
     _nextOfInstanceSharedPathMap(NULL)
 {
+    if (_idCounter == std::numeric_limits<unsigned int>::max()) {
+      throw Error( "SharedName::SharedName(): Identifier counter has reached it's limit (%d bits)."
+                 , std::numeric_limits<unsigned int>::digits );
+    }
+
     if (!_headInstance)
         throw Error("Can't create " + _TName("SharedPath") + " : null head instance");
 
@@ -252,7 +262,7 @@ const Entity* SharedPath::QuarkMap::_getKey(Quark* quark) const
 unsigned SharedPath::QuarkMap::_getHashValue(const Entity* entity) const
 // *********************************************************************
 {
-    return ( (unsigned int)( (unsigned long)entity ) ) / 8;
+  return entity->getId() / 8;
 }
 
 Quark* SharedPath::QuarkMap::_getNextElement(Quark* quark) const
diff --git a/hurricane/src/hurricane/Technology.cpp b/hurricane/src/hurricane/Technology.cpp
index 9eee226c..c04f0bb2 100644
--- a/hurricane/src/hurricane/Technology.cpp
+++ b/hurricane/src/hurricane/Technology.cpp
@@ -17,6 +17,7 @@
 // not, see <http://www.gnu.org/licenses/>.
 // ****************************************************************************************************
 
+#include "hurricane/SharedName.h"
 #include "hurricane/Technology.h"
 #include "hurricane/DataBase.h"
 #include "hurricane/Layer.h"
@@ -411,7 +412,7 @@ Name Technology::LayerMap::_getKey(Layer* layer) const
 unsigned Technology::LayerMap::_getHashValue(Name name) const
 // **********************************************************
 {
-    return ( (unsigned int)( (unsigned long)name._getSharedName() ) ) / 8;
+  return name._getSharedName()->getId() / 8;
 }
 
 Layer* Technology::LayerMap::_getNextElement(Layer* layer) const
diff --git a/hurricane/src/hurricane/Timer.cpp b/hurricane/src/hurricane/Timer.cpp
index ee670059..e833543f 100644
--- a/hurricane/src/hurricane/Timer.cpp
+++ b/hurricane/src/hurricane/Timer.cpp
@@ -199,10 +199,10 @@ namespace Hurricane {
   string Timer::getStringMemory ( size_t size ) {
     string s;
 
-    if ( size >> 30 )      s = getString(size>>30) + "Mo";
-    else if ( size >> 20 ) s = getString(size>>20) + "Mo";
-    else if ( size >> 10 ) s = getString(size>>10) + "Ko";
-    else                   s = getString(size) + " octets";
+    if ( size >> 30 )      s = getString(size>>30) + "Mb";
+    else if ( size >> 20 ) s = getString(size>>20) + "Mb";
+    else if ( size >> 10 ) s = getString(size>>10) + "Kb";
+    else                   s = getString(size) + " bytes";
 
     return s;
   }
diff --git a/hurricane/src/hurricane/hurricane/Collection.h b/hurricane/src/hurricane/hurricane/Collection.h
index ca7d11de..94465beb 100644
--- a/hurricane/src/hurricane/hurricane/Collection.h
+++ b/hurricane/src/hurricane/hurricane/Collection.h
@@ -838,7 +838,7 @@ class ForEachIterator {
     inline Element                     operator->      ();
     inline ForEachIterator&            operator++      (int);
   public:
-           GenericCollection<Element>& collection;
+           GenericCollection<Element>  collection;
            GenericLocator<Element>     locator;
            Element                     element;
 };
diff --git a/hurricane/src/hurricane/hurricane/Entity.h b/hurricane/src/hurricane/hurricane/Entity.h
index ab2cb112..4023ec32 100644
--- a/hurricane/src/hurricane/hurricane/Entity.h
+++ b/hurricane/src/hurricane/hurricane/Entity.h
@@ -20,58 +20,53 @@
 #ifndef HURRICANE_ENTITY
 #define HURRICANE_ENTITY
 
+#include <functional>
 #include "hurricane/DBo.h"
 #include "hurricane/Entities.h"
 #include "hurricane/Box.h"
 
 namespace Hurricane {
 
-class Cell;
-class Quark;
-class SharedPath;
+  class Cell;
+  class Quark;
+  class SharedPath;
 
 
-
-// ****************************************************************************************************
-// Entity declaration
-// ****************************************************************************************************
-
-class Entity : public DBo {
-// **********************
-
-#   if !defined(__DOXYGEN_PROCESSOR__)
-
-// Types
-// *****
-
-    public: typedef DBo Inherit;
-
-// Constructors
-// ************
-
-    protected: Entity();
-
-// Others
-// ******
-
-    protected: virtual void _preDestroy();
-
-    public: virtual string _getString() const;
-    public: virtual Record* _getRecord() const;
-    public: Quark* _getQuark(SharedPath* sharedPath = NULL) const;
-
-#   endif
-
-// Accessors
-// *********
-
-    public: virtual Cell* getCell() const = 0;
-    public: virtual Box getBoundingBox() const = 0;
-
-};
+// -------------------------------------------------------------------
+// Class  :  "Hurricane::Entity".
 
 
-} // End of Hurricane namespace.
+  class Entity : public DBo
+  {
+    public:
+      typedef DBo Inherit;
+    public:
+      inline  unsigned int  getId         () const;
+      virtual Cell*         getCell       () const = 0;
+      virtual Box           getBoundingBox() const = 0;
+      virtual string        _getString    () const;
+      virtual Record*       _getRecord    () const;
+              Quark*        _getQuark     ( SharedPath* sharedPath = NULL ) const;
+    protected:             
+                            Entity        ();
+      virtual void          _preDestroy   ();
+    private:
+      static  unsigned int  _idCounter;
+              unsigned int  _id;
+
+    public:
+      struct CompareById : public std::binary_function<const Entity*,const Entity*,bool> {
+          inline bool  operator() ( const Entity* lhs, const Entity* rhs ) const;
+      };
+  };
+
+
+  inline  unsigned int  Entity::getId () const { return _id; }
+  inline  bool          Entity::CompareById::operator() ( const Entity* lhs, const Entity* rhs ) const
+                                                        { return ((lhs)?lhs->getId():0) < ((rhs)?rhs->getId():0); }
+
+
+} // Hurricane namespace.
 
 
 INSPECTOR_P_SUPPORT(Hurricane::Entity);
@@ -79,7 +74,6 @@ INSPECTOR_P_SUPPORT(Hurricane::Entity);
 
 #endif // HURRICANE_ENTITY
 
-
 // ****************************************************************************************************
 // Copyright (c) BULL S.A. 2000-2009, All Rights Reserved
 // ****************************************************************************************************
diff --git a/hurricane/src/hurricane/hurricane/Layer.h b/hurricane/src/hurricane/hurricane/Layer.h
index 705b6584..85bea611 100644
--- a/hurricane/src/hurricane/hurricane/Layer.h
+++ b/hurricane/src/hurricane/hurricane/Layer.h
@@ -95,10 +95,6 @@ namespace Hurricane {
       inline  void              _setExtractMask              ( const Mask& extractMask );
       inline  void              _setNextOfTechnologyLayerMap ( Layer* layer );
       virtual void              _onDbuChange                 ( float scale );
-    public:
-      struct MaskCompare {
-          inline bool operator () ( const Layer*, const Layer* ) const;
-      };
 
     private:
     // Internal: Attributes
@@ -121,6 +117,11 @@ namespace Hurricane {
                                                              );
       virtual void              _postCreate                  ();
       virtual void              _preDestroy                  ();
+
+    public:
+      struct CompareByMask : public binary_function<const Layer*,const Layer*,bool> {
+          inline bool  operator() ( const Layer* lhs, const Layer* rhs ) const;
+      };
   };
 
 
@@ -140,8 +141,8 @@ namespace Hurricane {
   inline  void                Layer::_setExtractMask              ( const Mask& extractMask ) { _extractMask = extractMask; }
   inline  void                Layer::_setNextOfTechnologyLayerMap ( Layer* layer ) { _nextOfTechnologyLayerMap = layer; }
 
-  inline  bool  Layer::MaskCompare::operator () ( const Layer* layer1, const Layer* layer2 ) const
-  { return layer1->getMask() < layer2->getMask(); }
+  inline bool   Layer::CompareByMask::operator() ( const Layer* lhs, const Layer* rhs ) const
+  { return (lhs?lhs->getMask():Layer::Mask()) < (rhs?rhs->getMask():Layer::Mask()); }
 
 
 
diff --git a/hurricane/src/hurricane/hurricane/Net.h b/hurricane/src/hurricane/hurricane/Net.h
index 4721f11d..17bdd40d 100644
--- a/hurricane/src/hurricane/hurricane/Net.h
+++ b/hurricane/src/hurricane/hurricane/Net.h
@@ -20,6 +20,7 @@
 #ifndef HURRICANE_NET
 #define HURRICANE_NET
 
+#include <functional>
 #include "hurricane/Entity.h"
 #include "hurricane/Nets.h"
 #include "hurricane/Component.h"
@@ -233,10 +234,6 @@ class Net : public Entity {
 };
 
 
-
-
-
-
 } // End of Hurricane namespace.
 
 
diff --git a/hurricane/src/hurricane/hurricane/RoutingPad.h b/hurricane/src/hurricane/hurricane/RoutingPad.h
index f266cd7d..ad1967c1 100644
--- a/hurricane/src/hurricane/hurricane/RoutingPad.h
+++ b/hurricane/src/hurricane/hurricane/RoutingPad.h
@@ -1,7 +1,7 @@
 
 // -*- C++ -*-
 //
-// Copyright (c) BULL S.A. 2000-2010, All Rights Reserved
+// Copyright (c) BULL S.A. 2000-2013, All Rights Reserved
 //
 // This file is part of Hurricane.
 //
@@ -23,23 +23,19 @@
 //
 // $Id$
 //
-// x-----------------------------------------------------------------x
-// |                                                                 |
+// +-----------------------------------------------------------------+
 // |                  H U R R I C A N E                              |
 // |     V L S I   B a c k e n d   D a t a - B a s e                 |
 // |                                                                 |
 // |  Authors     :          Hugo Clement & Marek Sroka              |
 // |  E-mail      :            Jean-Paul.Chaput@lip6.fr              |
 // | =============================================================== |
-// |  C++ Header  :  "./hurricane/RegularLayer.h"                    |
-// | *************************************************************** |
-// |  U p d a t e s                                                  |
-// |                                                                 |
-// x-----------------------------------------------------------------x
+// |  C++ Header  :  "./hurricane/RoutingPad.h"                      |
+// +-----------------------------------------------------------------+
 
 
-#ifndef __HURRICANE_ROUTINGPAD__
-#define __HURRICANE_ROUTINGPAD__
+#ifndef HURRICANE_ROUTINGPAD_H
+#define HURRICANE_ROUTINGPAD_H
 
 #include "hurricane/Component.h"
 #include "hurricane/Occurrence.h"
@@ -54,16 +50,18 @@ namespace Hurricane {
   class RoutingPad : public Component {
     public:
       typedef Component Inherit;
-      enum    Flags { BiggestArea       =0x1
-                    , HighestLayer      =0x2
-                    , LowestLayer       =0x4
+      enum    Flags { BiggestArea       = 0x0001
+                    , HighestLayer      = 0x0002
+                    , LowestLayer       = 0x0004
                     , ComponentSelection=BiggestArea|HighestLayer|LowestLayer
+                    , ShowWarning       = 0x0008
                     };
     public:
       static RoutingPad*   create                ( Net*, Occurrence, unsigned int flags=0 );
       static RoutingPad*   create                ( Pin* );
     public:
     // Accessors.
+              bool         isPlacedOccurrence    ( unsigned int flags ) const;
       inline  Occurrence   getOccurrence         () const { return _occurrence; };
               Occurrence   getPlugOccurrence     ();
       virtual const Layer* getLayer              () const;
@@ -72,6 +70,7 @@ namespace Hurricane {
       virtual Box          getBoundingBox        () const;
       virtual Box          getBoundingBox        ( const BasicLayer* ) const;
       virtual Point        getCenter             () const;
+      virtual Point        getPosition           () const;
               Point        getSourcePosition     () const;
               Point        getTargetPosition     () const;
               DbU::Unit    getSourceX            () const;
@@ -80,11 +79,6 @@ namespace Hurricane {
               DbU::Unit    getTargetY            () const;
     // Mutators.                                 
       virtual void         translate             ( const DbU::Unit& dx, const DbU::Unit& dy );
-              void         setX                  ( const DbU::Unit& );
-              void         setY                  ( const DbU::Unit& );
-              void         setPosition           ( const DbU::Unit& x, const DbU::Unit& y );
-              void         setPosition           ( const Point& position );
-              void         setOffset             ( const DbU::Unit& dx, const DbU::Unit& dy );
               void         setExternalComponent  ( Component* );
               Component*   setOnBestComponent    ( unsigned int flags );
               void         restorePlugOccurrence ();
@@ -98,11 +92,9 @@ namespace Hurricane {
       virtual void         _postCreate           ();
       virtual void         _preDestroy           ();
     private:
-                           RoutingPad            ( Net*, const Point&, Occurrence occurrence=Occurrence() );
+                           RoutingPad            ( Net*, Occurrence occurrence=Occurrence() );
     private:
     // Attributes.
-      DbU::Unit   _x;
-      DbU::Unit   _y;
       Occurrence  _occurrence;
   };
 
@@ -112,4 +104,4 @@ namespace Hurricane {
 
 INSPECTOR_P_SUPPORT(Hurricane::RoutingPad);
 
-#endif  // __HURRICANE_ROUTINGPAD__
+#endif  // HURRICANE_ROUTINGPAD_H
diff --git a/hurricane/src/hurricane/hurricane/SharedName.h b/hurricane/src/hurricane/hurricane/SharedName.h
index c8c4019e..3ea47f15 100644
--- a/hurricane/src/hurricane/hurricane/SharedName.h
+++ b/hurricane/src/hurricane/hurricane/SharedName.h
@@ -25,73 +25,43 @@
 namespace Hurricane {
 
 
+// -------------------------------------------------------------------
+// Class  :  "Hurricane::SharedName".
 
-// ****************************************************************************************************
-// SharedName declaration
-// ****************************************************************************************************
 
-class SharedName {
-// *************
+  class SharedName {
+      friend class Name;
 
-// Friends
-// *******
+    public:
+      inline unsigned int  getId        () const;
+             const string& _getSString  () const { return _string; };
+             string        _getTypeName () const { return _TName("SharedName"); };
+             string        _getString   () const;
+             Record*       _getRecord   () const;
+    private:
+                           SharedName   ( const string& );
+                           SharedName   ( const SharedName& );
+                          ~SharedName   ();
+             SharedName&   operator=    ( const SharedName& );
+             void          capture      ();
+             void          release      ();
 
-    friend class Name;
+    private:
+      struct SharedNameMapComparator {
+          bool operator() ( string* lhs, string* rhs ) const;
+      };
+      typedef  map<string*, SharedName*, SharedNameMapComparator>  SharedNameMap;
 
-// Types
-// *****
+    private:
+      static SharedNameMap* _SHARED_NAME_MAP;
+      static unsigned int   _idCounter;
+             unsigned int   _id;
+             int            _count;
+             string         _string;
+  };
 
-    private: struct SharedNameMapComparator {
-    // ************************************
 
-        bool operator()(string* s1, string* s2) const;
-
-    };
-
-    private: typedef map<string*, SharedName*, SharedNameMapComparator> SharedNameMap;
-
-// Attributes
-// **********
-
-    private: static SharedNameMap* _SHARED_NAME_MAP;
-
-    private: int _count;
-    private: string _string;
-
-// Constructors
-// ************
-
-    private: SharedName(const string& s);
-
-    private: SharedName(const SharedName& sharedName);
-                // not implemented to forbid copy construction
-
-// Destructor
-// **********
-
-    private: ~SharedName();
-
-// Operators
-// *********
-
-    private: SharedName& operator=(const SharedName& sharedName);
-                // not implemented to forbid assignment
-
-// Updators
-// ********
-
-    private: void capture();
-    private: void release();
-
-// Others
-// ******
-
-    public: const string &_getSString () const { return _string; };
-    public: string _getTypeName() const { return _TName("SharedName"); };
-    public: string _getString() const;
-    public: Record* _getRecord() const;
-
-};
+  inline  unsigned int  SharedName::getId () const { return _id; }
 
 
 } // End of Hurricane namespace.
diff --git a/hurricane/src/hurricane/hurricane/SharedPath.h b/hurricane/src/hurricane/hurricane/SharedPath.h
index 56d04996..9c8b1b2a 100644
--- a/hurricane/src/hurricane/hurricane/SharedPath.h
+++ b/hurricane/src/hurricane/hurricane/SharedPath.h
@@ -60,6 +60,8 @@ class SharedPath {
 // Attributes
 // **********
 
+    private: static unsigned int _idCounter;
+    private: unsigned int _id;
     private: Instance* _headInstance;
     private: SharedPath* _tailSharedPath;
     private: QuarkMap _quarkMap;
@@ -89,6 +91,7 @@ class SharedPath {
 
     public: static char getNameSeparator();
 
+    public: unsigned int  getId() const { return _id; }
     public: Instance* getHeadInstance() const {return _headInstance;};
     public: SharedPath* getTailSharedPath() const {return _tailSharedPath;};
     public: SharedPath* getHeadSharedPath() const;
diff --git a/hurricane/src/isobar/PyRoutingPad.cpp b/hurricane/src/isobar/PyRoutingPad.cpp
index 95c2e76b..c1ddc1d1 100644
--- a/hurricane/src/isobar/PyRoutingPad.cpp
+++ b/hurricane/src/isobar/PyRoutingPad.cpp
@@ -54,8 +54,8 @@ extern "C" {
   DirectGetLongAttribute(PyRoutingPad_getSourceY ,getSourceY ,PyRoutingPad,RoutingPad)
   DirectGetLongAttribute(PyRoutingPad_getTargetX ,getTargetX ,PyRoutingPad,RoutingPad)
   DirectGetLongAttribute(PyRoutingPad_getTargetY ,getTargetY ,PyRoutingPad,RoutingPad)
-  DirectSetLongAttribute(PyRoutingPad_setX       ,setX       ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
-  DirectSetLongAttribute(PyRoutingPad_setY       ,setY       ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
+  // DirectSetLongAttribute(PyRoutingPad_setX       ,setX       ,"RoutingPad.setX",PyRoutingPad,RoutingPad)
+  // DirectSetLongAttribute(PyRoutingPad_setY       ,setY       ,"RoutingPad.setY",PyRoutingPad,RoutingPad)
 
   // Standart destroy (Attribute).
   DBoDestroyAttribute(PyRoutingPad_destroy, PyRoutingPad)
@@ -179,6 +179,7 @@ extern "C" {
   }
 
 
+#if THIS_IS_DEPRECATED
   static PyObject* PyRoutingPad_setPosition ( PyRoutingPad *self, PyObject* args )
   {
     trace << "PyRoutingPad_setPosition ()" << endl;
@@ -229,6 +230,7 @@ extern "C" {
 
     Py_RETURN_NONE;
   }
+#endif
 
 
   static PyObject* PyRoutingPad_setExternalComponent ( PyRoutingPad *self, PyObject* args )
@@ -305,16 +307,16 @@ extern "C" {
     , { "getTargetX"           , (PyCFunction)PyRoutingPad_getTargetX           , METH_NOARGS , "Get the RoutingPad target X position." }
     , { "getTargetY"           , (PyCFunction)PyRoutingPad_getTargetY           , METH_NOARGS , "Get the RoutingPad target Y position." }
     , { "translate"            , (PyCFunction)PyRoutingPad_translate            , METH_VARARGS, "Translates the RoutingPad segment of dx and dy." }
-    , { "setX"                 , (PyCFunction)PyRoutingPad_setX                 , METH_VARARGS, "Modify the RoutingPad X position." }
-    , { "setY"                 , (PyCFunction)PyRoutingPad_setY                 , METH_VARARGS, "Modify the RoutingPad Y position." }
-    , { "setPosition"          , (PyCFunction)PyRoutingPad_setPosition          , METH_VARARGS, "Sets the RoutingPad absolute position." }
-    , { "setOffset"            , (PyCFunction)PyRoutingPad_setOffset            , METH_VARARGS, "Sets the RoutingPad relative position." }
+ // , { "setX"                 , (PyCFunction)PyRoutingPad_setX                 , METH_VARARGS, "Modify the RoutingPad X position." }
+ // , { "setY"                 , (PyCFunction)PyRoutingPad_setY                 , METH_VARARGS, "Modify the RoutingPad Y position." }
+ // , { "setPosition"          , (PyCFunction)PyRoutingPad_setPosition          , METH_VARARGS, "Sets the RoutingPad absolute position." }
+ // , { "setOffset"            , (PyCFunction)PyRoutingPad_setOffset            , METH_VARARGS, "Sets the RoutingPad relative position." }
     , { "setExternalComponent" , (PyCFunction)PyRoutingPad_setExternalComponent , METH_VARARGS, "Sets the RoutingPad on an master net external component." }
     , { "setOnBestComponent"   , (PyCFunction)PyRoutingPad_setOnBestComponent   , METH_VARARGS, "Sets the RoutingPad on master net best external component." }
     , { "restorePlugOccurrence", (PyCFunction)PyRoutingPad_restorePlugOccurrence, METH_VARARGS, "Revert back from an external component to the plug." }
     , { "destroy"              , (PyCFunction)PyRoutingPad_destroy              , METH_NOARGS
                                , "destroy associated hurricane object, the python object remains." }
-    , {NULL, NULL, 0, NULL}           /* sentinel */
+    , {NULL, NULL, 0, NULL}    /* sentinel */
     };