diff --git a/plugins/pyqgv/decorator.cc b/plugins/pyqgv/decorator.cc
index 5477b9c862b5616bca31265c85f13c801fc8ec47..7e644b2c3c1281924df051ec0573a71c719ee466 100644
--- a/plugins/pyqgv/decorator.cc
+++ b/plugins/pyqgv/decorator.cc
@@ -18,13 +18,13 @@
 
 #include <PythonQt.h>
 #include <QGVScene.h>
+#include <QGVSubGraph.h>
 #include <QGVNode.h>
 #include <QGVEdge.h>
 
 namespace PyQgv {
 
 // ------- QGVScene ------------------------------------------- //
-QGVScene* QGVDecorator::new_QGVScene(const QString &name) { return new QGVScene(name); }
 QGVScene* QGVDecorator::new_QGVScene(const QString &name, QObject *parent) { return new QGVScene(name, parent); }
 void QGVDecorator::delete_QGVScene(QGVScene* s) { delete s; }
 
@@ -33,15 +33,12 @@ void QGVDecorator::setNodeAttribute (QGVScene* s, const QString &name, const QSt
 void QGVDecorator::setEdgeAttribute (QGVScene* s, const QString &name, const QString &value) { s->setEdgeAttribute (name, value); }
 
 QGVNode* QGVDecorator::addNode(QGVScene* s, const QString& label) { return s->addNode (label); }
-QGVEdge* QGVDecorator::addEdge(QGVScene* s, QGVNode* source, QGVNode* target) { return s->addEdge (source, target); }
-QGVEdge* QGVDecorator::addEdge(QGVScene* s, QGVNode* source, QGVNode* target, const QString& label) { return s->addEdge (source, target, label); }
-// QGVSubGraph* QGVDecorator::addSubGraph(const QString& name, bool cluster=true);
+QGVEdge* QGVDecorator::addEdge(QGVScene* s, QGVNode* source, QGVNode* target, const QString label) { return s->addEdge (source, target, label); }
+QGVSubGraph* QGVDecorator::addSubGraph(QGVScene* s, const QString& name, bool cluster) { return s->addSubGraph (name, cluster); }
 
 void QGVDecorator::setRootNode(QGVScene* s, QGVNode *node) { s->setRootNode (node); }
 void QGVDecorator::setNodePositionAttribute(QGVScene* s) { s->setNodePositionAttribute (); }
 
-// void QGVDecorator::setNodePositionAttribute();
-
 void QGVDecorator::loadLayout (QGVScene* s, const QString &text)                          { s->loadLayout(text); }
 void QGVDecorator::applyLayout(QGVScene* s, const QString &algorithm)                     { s->applyLayout(algorithm); }
 void QGVDecorator::render     (QGVScene* s, const QString &algorithm)                     { s->render(algorithm); }
@@ -50,6 +47,14 @@ void QGVDecorator::freeLayout (QGVScene* s) { s->freeLayout(); }
 void QGVDecorator::clear      (QGVScene* s) { s->clear(); }
 // ------- QGVScene ------------------------------------------- //
 
+// ------- QGVScene ------------------------------------------- //
+void QGVDecorator::setAttribute (QGVSubGraph* s, const QString &name, const QString &value) { s->setAttribute (name, value); }
+QString QGVDecorator::getAttribute (QGVSubGraph* s, const QString &name) { return s->getAttribute (name); }
+
+QGVNode* QGVDecorator::addNode(QGVSubGraph* s, const QString& label) { return s->addNode (label); }
+QGVSubGraph* QGVDecorator::addSubGraph(QGVSubGraph* s, const QString& name, bool cluster) { return s->addSubGraph (name, cluster); }
+// ------- QGVScene ------------------------------------------- //
+
 // ------- QGVNode  ------------------------------------------- //
 void QGVDecorator::setAttribute (QGVNode* n, const QString &name, const QString &value) { n->setAttribute(name,value); }
 QString QGVDecorator::getAttribute (QGVNode* n, const QString &name) { return n->getAttribute(name); }
@@ -63,9 +68,10 @@ QString QGVDecorator::getAttribute (QGVEdge* e, const QString &name) { return e-
 void registerQGV ()
 {
   PythonQt::self()->addDecorators (new QGVDecorator ());
-  PythonQt::self()->registerCPPClass ("QGVScene", "QGraphicsScene", "qgv");
-  PythonQt::self()->registerCPPClass ("QGVNode" , "QGraphicsItem" , "qgv");
-  PythonQt::self()->registerCPPClass ("QGVEdge" , "QGraphicsItem" , "qgv");
+  PythonQt::self()->registerCPPClass ("QGVScene"   , "QGraphicsScene", "QGraphViz");
+  PythonQt::self()->registerCPPClass ("QGVSubGraph", "QGraphicsItem" , "QGraphViz");
+  PythonQt::self()->registerCPPClass ("QGVNode"    , "QGraphicsItem" , "QGraphViz");
+  PythonQt::self()->registerCPPClass ("QGVEdge"    , "QGraphicsItem" , "QGraphViz");
 }
 
 } // namespace PyQgv
diff --git a/plugins/pyqgv/decorator.hh b/plugins/pyqgv/decorator.hh
index 142614eba26402df8d6cbb2aee330e127c4e0e3c..4b7363897f8e85b4a3958bc971538ff26342e7f5 100644
--- a/plugins/pyqgv/decorator.hh
+++ b/plugins/pyqgv/decorator.hh
@@ -18,6 +18,7 @@
 #include <QObject>
 
 class QGVScene;
+class QGVSubGraph;
 class QGVNode;
 class QGVEdge;
 
@@ -28,9 +29,8 @@ namespace PyQgv {
 
     public slots:
 
-      // ------- QGVScene ------------------------------------------- //
-      QGVScene* new_QGVScene(const QString &name);
-    QGVScene* new_QGVScene(const QString &name, QObject *parent);
+    // ------- QGVScene ------------------------------------------- //
+    QGVScene* new_QGVScene(const QString &name, QObject *parent = NULL);
     void delete_QGVScene(QGVScene* s);
 
     void setGraphAttribute(QGVScene* s, const QString &name, const QString &value);
@@ -38,23 +38,28 @@ namespace PyQgv {
     void setEdgeAttribute (QGVScene* s, const QString &name, const QString &value);
 
     QGVNode* addNode(QGVScene* s, const QString& label);
-    QGVEdge* addEdge(QGVScene* s, QGVNode* source, QGVNode* target);
-    QGVEdge* addEdge(QGVScene* s, QGVNode* source, QGVNode* target, const QString& label);
-    // QGVSubGraph* addSubGraph(const QString& name, bool cluster=true);
+    QGVEdge* addEdge(QGVScene* s, QGVNode* source, QGVNode* target, const QString label = QString());
+    QGVSubGraph* addSubGraph(QGVScene* s, const QString& name, bool cluster=true);
 
     void setRootNode(QGVScene* s, QGVNode *node);
     void setNodePositionAttribute (QGVScene* s);
 
-    // void setNodePositionAttribute();
-
     void loadLayout (QGVScene* s, const QString &text);
-    void applyLayout(QGVScene* s, const QString &algorithm);
+    void applyLayout(QGVScene* s, const QString &algorithm = "dot");
     void render     (QGVScene* s, const QString &algorithm);
     void render     (QGVScene* s, const QString &algorithm, const QString file);
     void freeLayout (QGVScene* s);
     void clear      (QGVScene* s);
     // ------- QGVScene ------------------------------------------- //
 
+    // ------- QGVSubGraph ---------------------------------------- //
+    void setAttribute (QGVSubGraph* n, const QString &name, const QString &value);
+    QString getAttribute (QGVSubGraph* n, const QString &name);
+
+    QGVNode* addNode(QGVSubGraph* s, const QString& label);
+    QGVSubGraph* addSubGraph(QGVSubGraph* s, const QString& name, bool cluster=true);
+    // ------- QGVSubGraph ---------------------------------------- //
+
     // ------- QGVNode  ------------------------------------------- //
     void setAttribute (QGVNode* n, const QString &name, const QString &value);
     QString getAttribute (QGVNode* n, const QString &name);