diff --git a/Model/ClassVisitor.php b/Model/ClassVisitor.php
index e559f0d3e2abcc875469c4916da19607f90ec31a..0ee2cba7d8aafd3a80603e23aebccab2e059ba13 100644
--- a/Model/ClassVisitor.php
+++ b/Model/ClassVisitor.php
@@ -81,17 +81,17 @@ class ClassVisitor implements ClassVisitorInterface, WritableInterface
      */
     protected function visitClassReflection(ReflectionClass $class)
     {
+        $namespace = $this->rootNamespace->getNamespace($class->getNamespaceName());
+
         if ($class->isTrait()) {
-            $node  = new Trait_($class->getName());
+            $node  = new Trait_($namespace, $class->getName());
         } elseif ($class->isInterface()) {
-            $node  = new Interface_($class->getName());
+            $node  = new Interface_($namespace, $class->getName());
         } else {
-            $node = new Class_($class->getName(), $class->isAbstract(), $class->isFinal());
+            $node = new Class_($namespace, $class->getName(), $class->isAbstract(), $class->isFinal());
         }
 
         $this->nodes[$class->getName()] = $node;
-
-        $namespace = $this->rootNamespace->getNamespace($class->getNamespaceName());
         $namespace->addNode($node);
 
         $parentClass = $class->getParentClass();
@@ -112,21 +112,21 @@ class ClassVisitor implements ClassVisitorInterface, WritableInterface
         if ($parentClass) {
             $traitNames = array_diff($traitNames, $parentClass->getTraitNames());
             $interfaceNames = array_diff($interfaceNames, $parentClass->getInterfaceNames());
-            $this->visitRelations($node, $namespace, [$parentClass->getName()], 'Irstea\PlantUmlBundle\Model\Arrow\ExtendsClass');
+            $this->visitRelations($node, [$parentClass->getName()], 'Irstea\PlantUmlBundle\Model\Arrow\ExtendsClass');
         }
 
-        $this->visitRelations($node, $namespace, $interfaceNames, 'Irstea\PlantUmlBundle\Model\Arrow\ImplementsInterface');
-        $this->visitRelations($node, $namespace, $traitNames, 'Irstea\PlantUmlBundle\Model\Arrow\UsesTrait');
+        $this->visitRelations($node, $interfaceNames, 'Irstea\PlantUmlBundle\Model\Arrow\ImplementsInterface');
+        $this->visitRelations($node, $traitNames, 'Irstea\PlantUmlBundle\Model\Arrow\UsesTrait');
 
         return $node;
     }
 
-    protected function visitRelations(WritableNodeInterface $source, NamespaceInterface $namespace, array $classNames, $relationClass)
+    protected function visitRelations(NodeInterface $source, array $classNames, $relationClass)
     {
         foreach ($classNames as $className) {
             $target = $this->visitClass($className);
             if ($target) {
-                $namespace->addArrow(new $relationClass($source, $target));
+                $source->addArrow(new $relationClass($source, $target));
             }
         }
     }
diff --git a/Model/Node/BaseNode.php b/Model/Node/BaseNode.php
index aa60ea45d935975159c53a22c279a1902fb79eb7..ced060790c03aab280d08813728aed19b89f0b58 100644
--- a/Model/Node/BaseNode.php
+++ b/Model/Node/BaseNode.php
@@ -8,6 +8,8 @@
 
 namespace Irstea\PlantUmlBundle\Model\Node;
 
+use Irstea\PlantUmlBundle\Model\ArrowInterface;
+use Irstea\PlantUmlBundle\Model\NamespaceInterface;
 use Irstea\PlantUmlBundle\Model\NodeInterface;
 use Irstea\PlantUmlBundle\Writer\WriterInterface;
 
@@ -44,18 +46,21 @@ class BaseNode implements NodeInterface
     private $stereotypes;
 
     /**
-     * @var int
+     * @var NamespaceInterface
      */
-    private $ordering;
+    private $namespace;
 
     /**
+     * @param NamespaceInterface $namespace
      * @param string $name
      * @param string $nodeType
      * @param array $classifiers
      * @param array $stereotypes
      */
-    function __construct($name, $nodeType, array $classifiers = [], array $stereotypes = [], $ordering = 0)
+    function __construct(NamespaceInterface $namespace, $name, $nodeType, array $classifiers = [], array $stereotypes = [])
     {
+        $this->namespace = $namespace;
+
         $pos = strrpos($name, '\\');
         $this->name        = substr($name, $pos + 1);
         $this->alias       = str_replace('\\', '.', $name)."_node";
@@ -63,7 +68,6 @@ class BaseNode implements NodeInterface
         $this->nodeType    = $nodeType;
         $this->classifiers = $classifiers;
         $this->stereotypes = $stereotypes;
-        $this->ordering    = $ordering;
     }
 
     public function outputTo(WriterInterface $writer)
@@ -123,4 +127,10 @@ class BaseNode implements NodeInterface
     {
         return $this;
     }
+
+    public function addArrow(ArrowInterface $arrow)
+    {
+        $this->namespace->addArrow($arrow);
+        return $this;
+    }
 }
diff --git a/Model/Node/Class_.php b/Model/Node/Class_.php
index f3f66081cd1e37efc0d0fcd1fdaf366513d7f465..d9e5477c26d952f1d398076bf9a95ee165aac4ab 100644
--- a/Model/Node/Class_.php
+++ b/Model/Node/Class_.php
@@ -8,6 +8,8 @@
 
 namespace Irstea\PlantUmlBundle\Model\Node;
 
+use Irstea\PlantUmlBundle\Model\NamespaceInterface;
+
 /**
  * Description of Class_
  *
@@ -15,7 +17,7 @@ namespace Irstea\PlantUmlBundle\Model\Node;
  */
 class Class_ extends BaseNode
 {
-    public function __construct($name, $isAbstract, $isFinal)
+    public function __construct(NamespaceInterface $namespace, $name, $isAbstract, $isFinal)
     {
         $classifiers = [];
         if ($isAbstract) {
@@ -23,6 +25,6 @@ class Class_ extends BaseNode
         } elseif ($isFinal) {
             $classifiers[] = 'final';
         }
-        parent::__construct($name, "class", $classifiers, [], $isAbstract ? 0 : ($isFinal ? 20 : 10));
+        parent::__construct($namespace, $name, "class", $classifiers, []);
     }
 }
diff --git a/Model/Node/Interface_.php b/Model/Node/Interface_.php
index bedfc708f9f2de832b8d899a3cab7592c918fb10..6d36ccf14dff3e397b6430c925696b04b08d36ef 100644
--- a/Model/Node/Interface_.php
+++ b/Model/Node/Interface_.php
@@ -8,6 +8,8 @@
 
 namespace Irstea\PlantUmlBundle\Model\Node;
 
+use Irstea\PlantUmlBundle\Model\NamespaceInterface;
+
 /**
  * Description of Interface_
  *
@@ -15,8 +17,8 @@ namespace Irstea\PlantUmlBundle\Model\Node;
  */
 class Interface_ extends BaseNode
 {
-    public function __construct($name)
+    public function __construct(NamespaceInterface $namespace, $name)
     {
-        parent::__construct($name, 'interface', [], [], -20);
+        parent::__construct($namespace, $name, 'interface', [], []);
     }
 }
diff --git a/Model/Node/Trait_.php b/Model/Node/Trait_.php
index e2597219e4bd3836f121a0fe63d4f7b377be619b..62a50dcb3dd0ac8fde328e75d9481ce9eb8636e8 100644
--- a/Model/Node/Trait_.php
+++ b/Model/Node/Trait_.php
@@ -8,6 +8,8 @@
 
 namespace Irstea\PlantUmlBundle\Model\Node;
 
+use Irstea\PlantUmlBundle\Model\NamespaceInterface;
+
 /**
  * Description of Trait_
  *
@@ -15,8 +17,8 @@ namespace Irstea\PlantUmlBundle\Model\Node;
  */
 class Trait_ extends BaseNode
 {
-    public function __construct($name)
+    public function __construct(NamespaceInterface $namespace, $name)
     {
-        parent::__construct($name, 'class', [], ['trait'], -10);
+        parent::__construct($namespace, $name, 'class', [], ['trait']);
     }
 }
diff --git a/Model/NodeInterface.php b/Model/NodeInterface.php
index d4e3522be563408f4231b8c8d501d29bfb4a8e92..bf2ba6e2d2d8097468b055c906eb962fb9fb33bc 100644
--- a/Model/NodeInterface.php
+++ b/Model/NodeInterface.php
@@ -16,5 +16,9 @@ use Irstea\PlantUmlBundle\Writer\WritableNodeInterface;
  */
 interface NodeInterface extends WritableNodeInterface
 {
-    //put your code here
+    /**
+     * @param ArrowInterface $arrow
+     * @return self
+     */
+    public function addArrow(ArrowInterface $arrow);
 }