diff --git a/Tests/UnitTests/TestGUI/TestGUI.cpp b/Tests/UnitTests/TestGUI/TestGUI.cpp
index f697316c599b2296e1083e0f683e05ee9fe6c561..f009b055a9bc4af0823378d182f09426a712ae42 100644
--- a/Tests/UnitTests/TestGUI/TestGUI.cpp
+++ b/Tests/UnitTests/TestGUI/TestGUI.cpp
@@ -34,18 +34,18 @@ int main(int argc, char** argv) {
 
     bool status(false);
 
-    status |= QTest::qExec(&testFormFactorItems, argc, argv);
-    status |= QTest::qExec(&testFTDistributionItems, argc, argv);
-    status |= QTest::qExec(&testParameterizedItem, argc, argv);
-    status |= QTest::qExec(&testParticleItems, argc, argv);
-    status |= QTest::qExec(&testLayerRoughnessItems, argc, argv);
-    status |= QTest::qExec(&testParaCrystalItems, argc, argv);
-    status |= QTest::qExec(&testSessionModel, argc, argv);
-    status |= QTest::qExec(&testGUICoreObjectCorrespondence, argc, argv);
-    status |= QTest::qExec(&testSessionItem);
-    //status |= QTest::qExec(&testPropertyAttributes, argc, argv);
-    status |= QTest::qExec(&testMapperCases, argc, argv);
-    //status |= QTest::qExec(&testSessionModel, argc, argv);
+//    status |= QTest::qExec(&testFormFactorItems, argc, argv);
+//    status |= QTest::qExec(&testFTDistributionItems, argc, argv);
+//    status |= QTest::qExec(&testParameterizedItem, argc, argv);
+//    status |= QTest::qExec(&testParticleItems, argc, argv);
+//    status |= QTest::qExec(&testLayerRoughnessItems, argc, argv);
+//    status |= QTest::qExec(&testParaCrystalItems, argc, argv);
+//    status |= QTest::qExec(&testSessionModel, argc, argv);
+//    status |= QTest::qExec(&testGUICoreObjectCorrespondence, argc, argv);
+//    status |= QTest::qExec(&testSessionItem);
+//    //status |= QTest::qExec(&testPropertyAttributes, argc, argv);
+//    status |= QTest::qExec(&testMapperCases, argc, argv);
+//    //status |= QTest::qExec(&testSessionModel, argc, argv);
     status |= QTest::qExec(&testMapperForItem, argc, argv);
 
 
diff --git a/Tests/UnitTests/TestGUI/TestMapperForItem.h b/Tests/UnitTests/TestGUI/TestMapperForItem.h
index a4acda1d7705034a00ff617884c6b362247d2675..bb213fa7f4c2fcbd1c8ee91834eac5ceefdf3c2d 100644
--- a/Tests/UnitTests/TestGUI/TestMapperForItem.h
+++ b/Tests/UnitTests/TestGUI/TestMapperForItem.h
@@ -23,7 +23,6 @@ public:
         , m_onParentChangeCount(0)
         , m_onChildrenChangeCount(0)
         , m_mapped_item(0)
-        , m_reporting_item(0)
     { }
 
     void clear()
@@ -33,8 +32,8 @@ public:
         m_onParentChangeCount = 0;
         m_onChildrenChangeCount = 0;
         m_mapped_item = 0;
-        m_reporting_item = 0;
-        m_reporting_name.clear();
+        m_reported_items.clear();
+        m_reported_names.clear();
     }
 
     void setItem(SessionItem *item)
@@ -75,20 +74,20 @@ public:
 private:
     void onPropertyChange(const QString &name)
     {
-        m_reporting_name = name;
+        m_reported_names.append(name);
         m_onPropertyChangeCount++;
     }
 
     void onChildPropertyChange(SessionItem *item, const QString &name)
     {
-        m_reporting_item = item;
-        m_reporting_name = name;
+        m_reported_items.append(item);
+        m_reported_names.append(name);
         m_onChildPropertyChangeCount++;
     }
 
     void onParentChange(SessionItem *item)
     {
-        m_reporting_item = item;
+        m_reported_items.append(item);
         m_onParentChangeCount++;
     }
 
@@ -102,15 +101,15 @@ private:
     int m_onParentChangeCount;
     int m_onChildrenChangeCount;
     SessionItem *m_mapped_item;
-    SessionItem *m_reporting_item;
-    QString m_reporting_name;
+    QList<SessionItem *> m_reported_items;
+    QStringList m_reported_names;
     std::unique_ptr<ModelMapper> m_mapper;
 
 private slots:
 
     void test_onPropertyChange();
-
-
+    void test_onParentChange();
+    void test_onChildrenChange();
 };
 
 inline void TestMapperForItem::test_onPropertyChange()
@@ -125,8 +124,8 @@ inline void TestMapperForItem::test_onPropertyChange()
     QVERIFY(m_onParentChangeCount == 0);
     QVERIFY(m_onChildrenChangeCount == 0);
     QVERIFY(m_mapped_item == nullptr);
-    QVERIFY(m_reporting_item == nullptr);
-    QVERIFY(m_reporting_name.isEmpty());
+    QVERIFY(m_reported_items.isEmpty());
+    QVERIFY(m_reported_names.isEmpty());
 
     // Mapper is looking on child; set property of child
     setItem(layer);
@@ -136,8 +135,8 @@ inline void TestMapperForItem::test_onPropertyChange()
     QVERIFY(m_onParentChangeCount == 0);
     QVERIFY(m_onChildrenChangeCount == 0);
     QVERIFY(m_mapped_item == layer);
-    QVERIFY(m_reporting_item == nullptr);
-    QVERIFY(m_reporting_name == LayerItem::P_THICKNESS);
+    QVERIFY(m_reported_items.isEmpty());
+    QVERIFY((m_reported_names.size() == 1) && (m_reported_names[0] == LayerItem::P_THICKNESS));
 
     // Mapper is looking on child; set property of parent;
     setItem(layer);
@@ -147,21 +146,73 @@ inline void TestMapperForItem::test_onPropertyChange()
     QVERIFY(m_onParentChangeCount == 0);
     QVERIFY(m_onChildrenChangeCount == 0);
     QVERIFY(m_mapped_item == layer);
-    QVERIFY(m_reporting_item == nullptr);
-    QVERIFY(m_reporting_name.isEmpty());
+    QVERIFY(m_reported_items.isEmpty());
+    QVERIFY(m_reported_names.isEmpty());
 
     // Mapper is looking on parent; set property of child;
-//    setItem(multilayer);
-//    layer->setItemValue(LayerItem::P_THICKNESS, 1.0);
-//    QVERIFY(m_onPropertyChangeCount == 0);
-////    QVERIFY(m_onChildPropertyChangeCount == 1);
-//    QVERIFY(m_onParentChangeCount == 0);
-//    QVERIFY(m_onChildrenChangeCount == 0);
-//    QVERIFY(m_mapped_item == multilayer);
-////    QVERIFY(m_reporting_item == layer);
-//    QVERIFY(m_reporting_name == LayerItem::P_THICKNESS);
+    setItem(multilayer);
+    layer->setItemValue(LayerItem::P_THICKNESS, 2.0);
+    QVERIFY(m_onPropertyChangeCount == 0);
+    QVERIFY(m_onChildPropertyChangeCount == 1);
+    QVERIFY(m_onParentChangeCount == 0);
+    QVERIFY(m_onChildrenChangeCount == 0);
+    QVERIFY(m_mapped_item == multilayer);
+    QVERIFY( (m_reported_items.size() == 1) && (m_reported_items[0] == layer));
+    QVERIFY((m_reported_names.size() == 1) && (m_reported_names[0] == LayerItem::P_THICKNESS));
+
+    // Mapper is looking on parent; set property of parent;
+    setItem(multilayer);
+    multilayer->setItemValue(MultiLayerItem::P_CROSS_CORR_LENGTH, 2.0);
+    QVERIFY(m_onPropertyChangeCount == 1);
+    QVERIFY(m_onChildPropertyChangeCount == 0);
+    QVERIFY(m_onParentChangeCount == 0);
+    QVERIFY(m_onChildrenChangeCount == 0);
+    QVERIFY(m_mapped_item == multilayer);
+    QVERIFY(m_reported_items.isEmpty());
+    QVERIFY((m_reported_names.size() == 1) && (m_reported_names[0] == MultiLayerItem::P_CROSS_CORR_LENGTH));
+}
+
+inline void TestMapperForItem::test_onParentChange()
+{
+    clear();
+    SampleModel model;
+    SessionItem *multilayer = model.insertNewItem(Constants::MultiLayerType);
+    SessionItem *layer = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
+//    SessionItem *layer = model.insertNewItem(Constants::LayerType);
 
+    // Mapper is looking on child; changing child's parent
+    setItem(layer);
+    multilayer->takeRow(layer->parentRow());
+//    model.moveParameterizedItem(layer, multilayer);
+    // FIXME check onParentChange while moving an item
+
+    QVERIFY(m_onPropertyChangeCount == 0);
+    QVERIFY(m_onChildPropertyChangeCount == 0);
+    QVERIFY(m_onParentChangeCount == 1);
+    QVERIFY(m_onChildrenChangeCount == 0);
+    QVERIFY(m_mapped_item == layer);
+    QVERIFY((m_reported_items.size() == 1) && (m_reported_items[0] == nullptr));
+    QVERIFY(m_reported_names.isEmpty());
+}
+
+inline void TestMapperForItem::test_onChildrenChange()
+{
+    clear();
+    SampleModel model;
+    SessionItem *multilayer = model.insertNewItem(Constants::MultiLayerType);
+
+    // Mapper is looking on child; adding new child to parent
+    setItem(multilayer);
+    SessionItem *layer = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer));
 
+    QVERIFY(m_onPropertyChangeCount == 0);
+    QVERIFY(m_onChildPropertyChangeCount == 2);
+    QVERIFY(m_onParentChangeCount == 0);
+    QVERIFY(m_onChildrenChangeCount == 1);
+    QVERIFY(m_mapped_item == multilayer);
+    QVERIFY(m_reported_items.size() == 2);
+    QVERIFY(m_reported_names.size() == 2);
 }
 
+
 #endif