diff --git a/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp b/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp
index 8cb26eefb1b46eb28b5945383a7986af38e6fbf6..5aacfdadaf7c25d298d26d5c8f9b70d2f75e1f81 100644
--- a/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp
+++ b/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp
@@ -146,11 +146,13 @@ void DesignerScene::updateScene()
 void DesignerScene::onRowsInserted(const QModelIndex & /* parent */, int /* first */,
                                    int /* last */)
 {
+    qDebug() << "DesignerScene::onRowsInserted";
     updateScene();
 }
 
 void DesignerScene::onRowsRemoved(const QModelIndex & /* parent */, int /* first */, int /* last */)
 {
+    qDebug() << "DesignerScene::onRowsRemoved";
     updateScene();
 }
 
@@ -286,15 +288,15 @@ void DesignerScene::alignViews()
 }
 
 //! runs recursively through model's item and schedules view removal
-void DesignerScene::deleteViews(const QModelIndex &parentIndex)
+void DesignerScene::deleteViews(const QModelIndex &viewIndex)
 {
-    qDebug() << "DesignerScene::deleteViews()" << parentIndex;
+    qDebug() << "DesignerScene::deleteViews()" << viewIndex;
 
-    for (int i_row = 0; i_row < m_sampleModel->rowCount(parentIndex); ++i_row) {
-        QModelIndex itemIndex = m_sampleModel->index(i_row, 0, parentIndex);
+    for (int i_row = 0; i_row < m_sampleModel->rowCount(viewIndex); ++i_row) {
+        QModelIndex itemIndex = m_sampleModel->index(i_row, 0, viewIndex);
 
         if (SessionItem *item = m_sampleModel->itemForIndex(itemIndex)) {
-
+            qDebug() << "   deleteViews" << item->modelType() << item->displayName();
             removeItemViewFromScene(item);
 
         } else {
@@ -302,21 +304,24 @@ void DesignerScene::deleteViews(const QModelIndex &parentIndex)
         }
         deleteViews(itemIndex);
     }
-    removeItemViewFromScene(m_sampleModel->itemForIndex(parentIndex)); // deleting parent item
+    removeItemViewFromScene(m_sampleModel->itemForIndex(viewIndex)); // deleting view itself
 }
 
 //! removes view from scene corresponding to given item
 void DesignerScene::removeItemViewFromScene(SessionItem *item)
 {
-    qDebug() << "DesignerScene::removeItemFromScene()" << item->modelType();
+    Q_ASSERT(item);
+
+    qDebug() << "DesignerScene::removeItemFromScene()" << item->modelType() << item->displayName();
     for (QMap<SessionItem *, IView *>::iterator it = m_ItemToView.begin();
          it != m_ItemToView.end(); ++it) {
         if (it.key() == item) {
             IView *view = it.value();
             view->setSelected(false);
             m_ItemToView.erase(it);
-            emit view->aboutToBeDeleted();
+//            emit view->aboutToBeDeleted();
             view->deleteLater();
+//            delete view;
             update();
             break;
         }
@@ -339,6 +344,7 @@ void DesignerScene::deleteSelectedItems()
     // Since we don't know the order of items and their parent/child relationship, we need this
     while (indexes.size()) {
         QModelIndex current = m_proxy->mapToSource(indexes.back());
+        qDebug() << "   DesignerScene::deleteSelectedItems() current.selected" << current;
         m_sampleModel->removeRows(current.row(), 1, current.parent());
         indexes = m_selectionModel->selectedIndexes();
     }
@@ -396,8 +402,10 @@ void DesignerScene::onEstablishedConnection(NodeEditorConnection *connection)
         if (connection->getInputPort()->getPortType() == NodeEditorPort::TRANSFORMATION)
             tag = ParticleItem::T_TRANSFORMATION;
     }
+    qDebug() << "onEstablishedConnection deleting just created connection";
     delete connection; // deleting just created connection because it will be recreated from the
                        // model
+    qDebug() << "onEstablishedConnection preparing to move";
     m_sampleModel->moveParameterizedItem(childView->getItem(),
                                          parentView->getItem(), -1, tag);
 }
diff --git a/GUI/coregui/Views/SampleDesigner/IView.cpp b/GUI/coregui/Views/SampleDesigner/IView.cpp
index cf4e6606554e936ad44ca035d61ee12e60c7d172..0dd6d1ecb3d46342cfa0392dabad744724241796 100644
--- a/GUI/coregui/Views/SampleDesigner/IView.cpp
+++ b/GUI/coregui/Views/SampleDesigner/IView.cpp
@@ -57,7 +57,7 @@ void IView::setParameterizedItem(SessionItem *item)
     m_item->mapper()->setOnItemDestroy(
                 [this](SessionItem *) {
         m_item = 0;
-    });
+    }, this);
 
 
     update_appearance();
diff --git a/GUI/coregui/Views/SampleDesigner/LayerView.cpp b/GUI/coregui/Views/SampleDesigner/LayerView.cpp
index 12993439794eb7bc95eb7d12c311557d6b50e1a7..9fa5432aa8718e7ea81ee5c49f09c73c6358f082 100644
--- a/GUI/coregui/Views/SampleDesigner/LayerView.cpp
+++ b/GUI/coregui/Views/SampleDesigner/LayerView.cpp
@@ -20,6 +20,7 @@
 #include "SessionItem.h"
 #include "MaterialProperty.h"
 #include "tooltipdatabase.h"
+#include "MultiLayerView.h"
 #include <QPainter>
 #include <QStyleOptionGraphicsItem>
 #include <QDebug>
@@ -38,6 +39,16 @@ LayerView::LayerView(QGraphicsItem *parent)
     addPort(QString(), NodeEditorPort::INPUT, NodeEditorPort::PARTICLE_LAYOUT);
 }
 
+LayerView::~LayerView()
+{
+    qDebug() << "LayerView::~LayerView()";
+    // FIXME replace with onChildrenChange inside MultiLayerView
+    MultiLayerView *mlView = dynamic_cast<MultiLayerView *>(parentItem());
+    if(mlView) {
+        mlView->removeLayer(this);
+    }
+}
+
 
 void LayerView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 {
diff --git a/GUI/coregui/Views/SampleDesigner/LayerView.h b/GUI/coregui/Views/SampleDesigner/LayerView.h
index ca3c72c0bc1cb484040f8728c0787f44612d9636..7c787ce97e878134a467c47c2b04007408de4970 100644
--- a/GUI/coregui/Views/SampleDesigner/LayerView.h
+++ b/GUI/coregui/Views/SampleDesigner/LayerView.h
@@ -27,7 +27,7 @@ public:
     enum { TYPE = DesignerHelper::LAYER };
 
     LayerView(QGraphicsItem *parent = 0);
-    virtual ~LayerView() { }
+    virtual ~LayerView();
 
     virtual int type() const { return TYPE; }
 
diff --git a/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp b/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp
index 7531b584380c9f191734385dfc02bb4d7e24a5f0..723132983b7ad5bd87b7d4dca9af2c180b39e4a5 100644
--- a/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp
+++ b/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp
@@ -77,8 +77,8 @@ void MultiLayerView::addNewLayer(ILayerView *layer, int row)
 {
     qDebug() << "MultiLayerView::addNewLayer(), row" << row;
     m_layers.insert(row, layer);
-    connect(layer, SIGNAL(heightChanged()), this, SLOT(updateHeight()) );
-    connect(layer, SIGNAL(aboutToBeDeleted()), this, SLOT(onLayerAboutToBeDeleted()) );
+    connect(layer, SIGNAL(heightChanged()), this, SLOT(updateHeight()), Qt::UniqueConnection);
+    connect(layer, SIGNAL(aboutToBeDeleted()), this, SLOT(onLayerAboutToBeDeleted()), Qt::UniqueConnection);
     layer->setParentItem(this);
 }
 
@@ -287,3 +287,9 @@ QVariant MultiLayerView::itemChange(QGraphicsItem::GraphicsItemChange change, co
 {
     return QGraphicsItem::itemChange(change, value);
 }
+
+void MultiLayerView::onSiblingsChange()
+{
+    qDebug() << "MultiLayerView::onSiblingsChange()";
+
+}
diff --git a/GUI/coregui/Views/SampleDesigner/MultiLayerView.h b/GUI/coregui/Views/SampleDesigner/MultiLayerView.h
index e5387c3bd1a908a3fe4d7b65fe2d7aa68ed63860..7b281480484cea08a88bc795c9be412caee94282 100644
--- a/GUI/coregui/Views/SampleDesigner/MultiLayerView.h
+++ b/GUI/coregui/Views/SampleDesigner/MultiLayerView.h
@@ -59,6 +59,7 @@ protected:
     void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
     const DesignerMimeData *checkDragEvent(QGraphicsSceneDragDropEvent * event);
     QVariant itemChange(GraphicsItemChange change, const QVariant &value);
+    virtual void onSiblingsChange();
 
 private:
     QList<ILayerView *> m_layers;
diff --git a/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp b/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp
index 17ad23dca110a415baf95a4440adab48d3e100c6..594aef5e1abd6addb0fa605e85eba71edd588406 100644
--- a/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp
+++ b/GUI/coregui/Views/SampleDesigner/NodeEditorConnection.cpp
@@ -17,32 +17,36 @@
 #include "NodeEditorConnection.h"
 #include "NodeEditorPort.h"
 #include "ConnectableView.h"
-
 #include <QBrush>
 #include <QPen>
 #include <QGraphicsScene>
 #include <QPainter>
-#include <iostream>
+#include <QDebug>
 
 NodeEditorConnection::NodeEditorConnection(QGraphicsItem *parent, QGraphicsScene *scene)
     : QGraphicsPathItem(parent)
+    , m_port1(0)
+    , m_port2(0)
 {
     setFlag(QGraphicsItem::ItemIsSelectable, true);
     setPen(QPen(Qt::darkGray, 2));
     setBrush(Qt::NoBrush);
     setZValue(-1);
-    m_port1 = 0;
-    m_port2 = 0;
     if(scene) scene->addItem(this);
 }
 
 
 NodeEditorConnection::~NodeEditorConnection()
 {
-    if (m_port1)
-        m_port1->connections().remove(m_port1->connections().indexOf(this));
-    if (m_port2)
-        m_port2->connections().remove(m_port2->connections().indexOf(this));
+    qDebug() << "NodeEditorConnection::~NodeEditorConnection()" << this;
+    if (m_port1) {
+        qDebug() << " NodeEditorConnection removeAll from " << m_port1;
+        m_port1->connections().removeAll(this);
+    }
+    if (m_port2) {
+        qDebug() << " NodeEditorConnection removeAll from " << m_port2;
+        m_port2->connections().removeAll(this);
+    }
 }
 
 void NodeEditorConnection::setPos1(const QPointF &p)
@@ -64,7 +68,6 @@ void NodeEditorConnection::setPort1(NodeEditorPort *p)
     setPos1(p->scenePos());
 }
 
-
 void NodeEditorConnection::setPort2(NodeEditorPort *p)
 {
     m_port2 = p;
@@ -72,7 +75,6 @@ void NodeEditorConnection::setPort2(NodeEditorPort *p)
     setPos2(p->scenePos());
 }
 
-
 void NodeEditorConnection::updatePosFromPorts()
 {
     pos1 = m_port1->scenePos();
diff --git a/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp b/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp
index 016f91c37bac017f315f1c0582830356a6a0b3fc..61c8e148a34052b0aa43d09c1bcecafffaf6d0c1 100644
--- a/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp
+++ b/GUI/coregui/Views/SampleDesigner/NodeEditorPort.cpp
@@ -16,12 +16,12 @@
 
 #include "NodeEditorPort.h"
 #include "NodeEditorConnection.h"
-
 #include <QGraphicsScene>
 #include <QFontMetrics>
 #include <QPen>
 #include <QPainter>
-#include <iostream>
+#include <QDebug>
+
 
 NodeEditorPort::NodeEditorPort(QGraphicsItem *parent, const QString &name,
                                NodeEditorPort::EPortDirection direction,
@@ -57,7 +57,8 @@ NodeEditorPort::NodeEditorPort(QGraphicsItem *parent, const QString &name,
 
 NodeEditorPort::~NodeEditorPort()
 {
-    foreach (NodeEditorConnection *conn, m_connections) {
+    QVector<NodeEditorConnection *> connections = m_connections;
+    foreach (NodeEditorConnection *conn, connections) {
         conn->setSelected(false);
         delete conn;
     }
diff --git a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp
index 5f0e9d5829ac003fb10fb04aebc95cba3cccef34..5c4cdd21499102ad882390394e745bd9ac1937ed 100644
--- a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp
+++ b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp
@@ -34,6 +34,11 @@ ParticleLayoutView::ParticleLayoutView(QGraphicsItem *parent)
     m_roundpar = 3;
 }
 
+ParticleLayoutView::~ParticleLayoutView()
+{
+    qDebug() << "ParticleLayoutView::~ParticleLayoutView()";
+}
+
 void ParticleLayoutView::addView(IView *childView, int /* row */)
 {
     qDebug() << "ParticleLayoutView::addView() xxx " << m_item->itemName()
diff --git a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h
index e7517c318824ae7049c9f99677fc9f7f1313e9a4..e1a12bed7d0d3a7110eb0b8e5cf8effd149e9e69 100644
--- a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h
+++ b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.h
@@ -25,6 +25,7 @@ public:
     enum { TYPE = DesignerHelper::PARTICLE_LAYOUT };
 
     ParticleLayoutView(QGraphicsItem *parent = 0);
+    ~ParticleLayoutView();
 
     int type() const { return TYPE; }