diff --git a/CMakeLists.txt b/CMakeLists.txt
index 093960cc3ba40a0766469ea90a342825846e277e..595cebeb246d53cde0b4c490bee6fc5987b0d752 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,6 +44,7 @@ endif()
 
 if(BORNAGAIN_GUI)
     add_subdirectory(GUI)
+    add_subdirectory(Tests/UnitTests/TestGUI)
 endif()
 
 add_subdirectory(Tests/FunctionalTests)  # functional tests (make check)
diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp
index 8871c76e872d0762edc744328c157c42ebdae935..4580984f087e20febb3a8d2f7e5ebaeb72d36e06 100644
--- a/GUI/coregui/Models/GUIObjectBuilder.cpp
+++ b/GUI/coregui/Models/GUIObjectBuilder.cpp
@@ -169,14 +169,15 @@ void GUIObjectBuilder::visit(const FormFactorAnisoPyramid *sample)
     ParameterizedItem *particleItem = m_levelToParent[getLevel()-1];
     ParameterizedItem *ffItem = particleItem->setGroupProperty(
         ParticleItem::P_FORM_FACTOR, "AnisoPyramid");
-    ffItem->setRegisteredProperty(AnisoPyramidItem::P_LENGTH,
-                                  sample->getLength());
-    ffItem->setRegisteredProperty(AnisoPyramidItem::P_WIDTH,
-                                  sample->getWidth());
-    ffItem->setRegisteredProperty(AnisoPyramidItem::P_HEIGHT,
-                                  sample->getHeight());
-    ffItem->setRegisteredProperty(AnisoPyramidItem::P_ALPHA,
-                                  Units::rad2deg(sample->getAlpha()));
+//    ffItem->setRegisteredProperty(AnisoPyramidItem::P_LENGTH,
+//                                  sample->getLength());
+//    ffItem->setRegisteredProperty(AnisoPyramidItem::P_WIDTH,
+//                                  sample->getWidth());
+//    ffItem->setRegisteredProperty(AnisoPyramidItem::P_HEIGHT,
+//                                  sample->getHeight());
+//    ffItem->setRegisteredProperty(AnisoPyramidItem::P_ALPHA,
+//                                  Units::rad2deg(sample->getAlpha()));
+    TransformFromDomain::setItemFromSample(ffItem, sample);
     m_levelToParent[getLevel()] = particleItem;
 }
 
diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp
index 05b686990e8ef958543fc2725e8d6c9a29068417..25e4a51d81aaf36f6fb27317727875b9785c79f9 100644
--- a/GUI/coregui/Models/ParameterizedItem.cpp
+++ b/GUI/coregui/Models/ParameterizedItem.cpp
@@ -195,14 +195,13 @@ ParameterizedItem * ParameterizedItem::setGroupProperty(
 
 void ParameterizedItem::registerProperty(const QString &name, const QVariant &variant, PropertyAttribute property_attribute)
 {
-    qDebug() << "   XXX   ParameterizedItem::registerProperty() " << modelType() << name;
+    //qDebug() << "   XXX   ParameterizedItem::registerProperty() " << modelType() << name;
     if(m_registered_properties.contains(name))
         throw GUIHelpers::Error("ParameterizedItem::registerProperty() -> Error. Already existing property "+name);
 
     m_registered_properties << name;
     m_property_attribute[name] = property_attribute;
 
-    //if(visibility == HiddenProperty) m_hidden_properties << name;
     setProperty(name.toUtf8().constData(), variant);
 }
 
diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp
index 8d0814ad4bd1cd5f1642fe20057f23738ee7d3fc..95e0f99dca4f5369bf00e7e2e5fa8dcbfd9be7e3 100644
--- a/GUI/coregui/Models/TransformFromDomain.cpp
+++ b/GUI/coregui/Models/TransformFromDomain.cpp
@@ -8,11 +8,27 @@
 #include "Numeric.h"
 #include "Units.h"
 #include "GUIHelpers.h"
+#include "FormFactors.h"
+#include "FormFactorItems.h"
 #include <QString>
 #include <QDebug>
 #include <vector>
 
 
+void TransformFromDomain::setItemFromSample(ParameterizedItem *item,
+                       const FormFactorAnisoPyramid *sample)
+{
+    item->setRegisteredProperty(AnisoPyramidItem::P_LENGTH,
+                                  sample->getLength());
+    item->setRegisteredProperty(AnisoPyramidItem::P_WIDTH,
+                                  sample->getWidth());
+    item->setRegisteredProperty(AnisoPyramidItem::P_HEIGHT,
+                                  sample->getHeight());
+    item->setRegisteredProperty(AnisoPyramidItem::P_ALPHA,
+                                  Units::rad2deg(sample->getAlpha()));
+}
+
+
 void TransformFromDomain::setItemFromSample(ParameterizedItem *item,
                               const InterferenceFunction2DParaCrystal *sample)
 {
diff --git a/GUI/coregui/Models/TransformFromDomain.h b/GUI/coregui/Models/TransformFromDomain.h
index 00a50e8616d0e2b940b781e18d7ca5a38403430c..b2a35435e014e9f725fc2973ccf98a123ab162c8 100644
--- a/GUI/coregui/Models/TransformFromDomain.h
+++ b/GUI/coregui/Models/TransformFromDomain.h
@@ -1,14 +1,19 @@
 #ifndef TRANSFORMFROMDOMAIN_H
 #define TRANSFORMFROMDOMAIN_H
 
+class FormFactorAnisoPyramid;
 class ParameterizedItem;
 class InterferenceFunction2DParaCrystal;
 class InterferenceFunction1DParaCrystal;
 
 namespace TransformFromDomain
 {
+void setItemFromSample(ParameterizedItem *item,
+                       const FormFactorAnisoPyramid *sample);
+
 void setItemFromSample(ParameterizedItem *item,
                        const InterferenceFunction2DParaCrystal *sample);
+
 void setItemFromSample(ParameterizedItem *item,
                        const InterferenceFunction1DParaCrystal *sample);
 
diff --git a/Tests/UnitTests/TestGUI/CMakeLists.txt b/Tests/UnitTests/TestGUI/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b0c27401b90259ed0574e6ab64602b0638d7a967
--- /dev/null
+++ b/Tests/UnitTests/TestGUI/CMakeLists.txt
@@ -0,0 +1,43 @@
+############################################################################
+# CMakeLists.txt file for building and running unit tests
+############################################################################
+
+enable_testing()
+
+file(GLOB source_files "*.cpp")
+file(GLOB include_files "*.h")
+
+find_package(Qt5Widgets REQUIRED)
+
+include_directories(
+    ${Boost_INCLUDE_DIRS}
+    ${BornAgainCore_INCLUDE_DIRS}
+    ${EIGEN3_INCLUDE_DIR}
+#    ${GSL_INCLUDE_DIR}
+    ${BornAgainGUI_INCLUDE_DIRS}
+)
+
+
+# to build executable right in lib directory to not to have problems with finding libBornAgainCore.dll under Windows
+#set_property(TARGET TestGUI PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+
+set(CMAKE_AUTOMOC ON)
+
+add_executable( TestGUI ${source_files} ${include_files})
+
+target_link_libraries(TestGUI
+    ${BornAgainCore_LIBRARY}
+#    ${Boost_LIBRARIES}
+#    ${GSL_LIBRARIES}
+    ${BornAgainGUI_LIBRARY}
+)
+
+qt5_use_modules(TestGUI Widgets Core Gui Script Designer PrintSupport Test)
+
+add_test( TestGUI TestGUI) # TestName ExeName
+
+# add execution of TestCore just after compilation
+add_custom_command(TARGET TestGUI POST_BUILD COMMAND TestGUI)
+
+
+
diff --git a/Tests/UnitTests/TestGUI/TestFormFactorItems.h b/Tests/UnitTests/TestGUI/TestFormFactorItems.h
new file mode 100644
index 0000000000000000000000000000000000000000..ebd38b8ea3dede7f2d50778ef5b10cea114d5bc5
--- /dev/null
+++ b/Tests/UnitTests/TestGUI/TestFormFactorItems.h
@@ -0,0 +1,54 @@
+#ifndef TESTFORMFACTORITEMS_H
+#define TESTFORMFACTORITEMS_H
+
+
+#include <QtTest>
+#include "FormFactors.h"
+#include "FormFactorItems.h"
+#include "TransformToDomain.h"
+#include "TransformFromDomain.h"
+#include "Units.h"
+#include "Numeric.h"
+
+class TestFormFactorItems : public QObject {
+    Q_OBJECT
+
+private slots:
+    void test_AnisoPyramidItem();
+
+private:
+};
+
+
+
+#endif
+
+
+
+inline void TestFormFactorItems::test_AnisoPyramidItem()
+{
+    // to domain
+    AnisoPyramidItem item;
+    item.setRegisteredProperty(AnisoPyramidItem::P_LENGTH, 20.0);
+    item.setRegisteredProperty(AnisoPyramidItem::P_WIDTH, 16.0);
+    item.setRegisteredProperty(AnisoPyramidItem::P_HEIGHT, 13.0);
+    item.setRegisteredProperty(AnisoPyramidItem::P_ALPHA, 60.0);
+    FormFactorAnisoPyramid *ff = dynamic_cast<FormFactorAnisoPyramid *>(TransformToDomain::createFormFactor(item));
+    QVERIFY(ff);
+    QVERIFY(ff->getLength() == 20.0);
+    QVERIFY(ff->getWidth() == 16.0);
+    QVERIFY(ff->getHeight() == 13.0);
+    QVERIFY( Numeric::areAlmostEqual(ff->getAlpha(), Units::deg2rad(60.0)));
+    delete ff;
+
+    // from domain
+    FormFactorAnisoPyramid ff2(2.0, 1.6, 1.3, 70.0*Units::degree);
+    AnisoPyramidItem item2;
+    TransformFromDomain::setItemFromSample(&item2, &ff2);
+    QVERIFY(item2.getRegisteredProperty(AnisoPyramidItem::P_LENGTH).toDouble() == 2.0);
+    QVERIFY(item2.getRegisteredProperty(AnisoPyramidItem::P_WIDTH).toDouble() == 1.6);
+    QVERIFY(item2.getRegisteredProperty(AnisoPyramidItem::P_HEIGHT).toDouble() == 1.3);
+    QVERIFY(item2.getRegisteredProperty(AnisoPyramidItem::P_ALPHA).toDouble() == 70.0);
+}
+
+
diff --git a/Tests/UnitTests/TestGUI/TestGUI.cpp b/Tests/UnitTests/TestGUI/TestGUI.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d84b4ac418d6b956cb0b65c236a59c73df83e8e9
--- /dev/null
+++ b/Tests/UnitTests/TestGUI/TestGUI.cpp
@@ -0,0 +1,12 @@
+#include <QtTest>
+#include <QString>
+#include <QDebug>
+#include "TestFormFactorItems.h"
+
+int main(int argc, char** argv) {
+    QApplication app(argc, argv);
+
+    TestFormFactorItems test1;
+
+    return QTest::qExec(&test1, argc, argv);
+}