diff --git a/GISASFW/GISASFW.pro b/GISASFW/GISASFW.pro
new file mode 100644
index 0000000000000000000000000000000000000000..70ea91b6b8a7635d9a6db83789dd5fe20e65cbec
--- /dev/null
+++ b/GISASFW/GISASFW.pro
@@ -0,0 +1,22 @@
+TEMPLATE = app
+CONFIG += console
+CONFIG -= qt
+
+SOURCES += main.cpp \
+    nanoparticle.cpp \
+    layer.cpp \
+    homogeneousmaterial.cpp \
+    multilayer.cpp \
+    layerroughness.cpp \
+    exceptions.cpp
+
+HEADERS += \
+    isample.h \
+    nanoparticle.h \
+    layer.h \
+    imaterial.h \
+    homogeneousmaterial.h \
+    multilayer.h \
+    layerroughness.h \
+    exceptions.h
+
diff --git a/GISASFW/exceptions.cpp b/GISASFW/exceptions.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ca476d994541fa2ff672abb13f6f8e43df9f613e
--- /dev/null
+++ b/GISASFW/exceptions.cpp
@@ -0,0 +1,11 @@
+#include "exceptions.h"
+
+NotImplementedException::NotImplementedException(const std::string& message)
+    : std::logic_error(message)
+{
+}
+
+NullPointerException::NullPointerException(const std::string& message)
+    : std::logic_error(message)
+{
+}
diff --git a/GISASFW/exceptions.h b/GISASFW/exceptions.h
new file mode 100644
index 0000000000000000000000000000000000000000..9196e5e0357d4bf202d76506c245b962b17905dd
--- /dev/null
+++ b/GISASFW/exceptions.h
@@ -0,0 +1,17 @@
+#ifndef EXCEPTIONS_H
+#define EXCEPTIONS_H
+
+#include <stdexcept>
+
+class NotImplementedException : public std::logic_error
+{
+public:
+    NotImplementedException(const std::string& message);
+};
+
+class NullPointerException : public std::logic_error
+{
+public:
+    NullPointerException(const std::string& message);
+};
+#endif // EXCEPTIONS_H
diff --git a/GISASFW/homogeneousmaterial.cpp b/GISASFW/homogeneousmaterial.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2e09ee83f3e21950c51ef903d895e00a36257718
--- /dev/null
+++ b/GISASFW/homogeneousmaterial.cpp
@@ -0,0 +1,6 @@
+#include "homogeneousmaterial.h"
+
+HomogeneousMaterial::HomogeneousMaterial(double refractive_index)
+    : m_refractive_index(refractive_index)
+{
+}
diff --git a/GISASFW/homogeneousmaterial.h b/GISASFW/homogeneousmaterial.h
new file mode 100644
index 0000000000000000000000000000000000000000..6ceac2e18450d564089eef389e5dbd7b892f94de
--- /dev/null
+++ b/GISASFW/homogeneousmaterial.h
@@ -0,0 +1,19 @@
+#ifndef HOMOGENEOUSMATERIAL_H
+#define HOMOGENEOUSMATERIAL_H
+
+#include "imaterial.h"
+
+class HomogeneousMaterial : public IMaterial
+{
+public:
+    HomogeneousMaterial(double refractive_index = 1);
+    virtual ~HomogeneousMaterial() {}
+
+    double getRefractiveIndex() { return m_refractive_index; }
+
+
+private:
+    double m_refractive_index;
+};
+
+#endif // HOMOGENEOUSMATERIAL_H
diff --git a/GISASFW/imaterial.h b/GISASFW/imaterial.h
new file mode 100644
index 0000000000000000000000000000000000000000..1c40c864cc5f39bcfd8b7a2b8103fd6b1991d8c7
--- /dev/null
+++ b/GISASFW/imaterial.h
@@ -0,0 +1,10 @@
+#ifndef IMATERIAL_H
+#define IMATERIAL_H
+
+class IMaterial
+{
+public:
+    virtual ~IMaterial() {}
+};
+
+#endif // IMATERIAL_H
diff --git a/GISASFW/isample.h b/GISASFW/isample.h
new file mode 100644
index 0000000000000000000000000000000000000000..4716c43387e824c391b679ac401e329cf12b206b
--- /dev/null
+++ b/GISASFW/isample.h
@@ -0,0 +1,31 @@
+#ifndef ISAMPLE_H
+#define ISAMPLE_H
+
+#include "exceptions.h"
+
+class ISample
+{
+public:
+    virtual ~ISample() {}
+
+    virtual void add(ISample* p_child);
+//    virtual void remove(ISample* p_child);
+//    virtual ISample* getChild(size_t index);
+};
+
+void ISample::add(ISample* p_child)
+{
+    throw NotImplementedException("This sample class is not allowed to have subsamples.");
+}
+
+//void ISample::remove(ISample* p_child)
+//{
+//    throw NotImplementedException("This sample class is not allowed to have subsamples.");
+//}
+
+//ISample *ISample::getChild(size_t index)
+//{
+//    throw NotImplementedException("This sample class is not allowed to have subsamples.");
+//}
+
+#endif // ISAMPLE_H
diff --git a/GISASFW/layer.cpp b/GISASFW/layer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2bcd5b7ee023b3d43809c52c921cc72a292e27e1
--- /dev/null
+++ b/GISASFW/layer.cpp
@@ -0,0 +1,20 @@
+#include "layer.h"
+# include <stdexcept>
+
+Layer::Layer()
+{
+}
+
+Layer::~Layer()
+{
+}
+
+void Layer::setThickness(double thickness)
+{
+    if (thickness>=0.0)
+    {
+        m_thickness = thickness;
+        return;
+    }
+    throw new std::domain_error("Layer thickness cannot be negative");
+}
diff --git a/GISASFW/layer.h b/GISASFW/layer.h
new file mode 100644
index 0000000000000000000000000000000000000000..ddc1e074eee7e014733f0124cc9cdff1197f1407
--- /dev/null
+++ b/GISASFW/layer.h
@@ -0,0 +1,26 @@
+#ifndef LAYER_H
+#define LAYER_H
+
+#include "isample.h"
+#include "imaterial.h"
+
+class Layer : public ISample
+{
+public:
+    Layer();
+    virtual ~Layer();
+
+    virtual void setThickness(double thickness);
+    virtual const double getThickness() const { return m_thickness; }
+    virtual void setBulkMaterial(IMaterial* p_material) { mp_bulk_material = p_material; }
+    virtual IMaterial* getBulkMaterial() { return mp_bulk_material; }
+
+private:
+    IMaterial* mp_bulk_material;
+    double m_thickness;
+//    LayerRoughness* mp_top_roughness;
+//    LayerRoughness* mp_bottom_roughness;
+
+};
+
+#endif // LAYER_H
diff --git a/GISASFW/layerroughness.cpp b/GISASFW/layerroughness.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0f0a1fff6efda7d82036b5511c816f478059e07b
--- /dev/null
+++ b/GISASFW/layerroughness.cpp
@@ -0,0 +1,5 @@
+#include "layerroughness.h"
+
+LayerRoughness *LayerRoughness::createSmoothLayerInterface(Layer *p_top_layer, Layer *p_bottom_layer)
+{
+}
diff --git a/GISASFW/layerroughness.h b/GISASFW/layerroughness.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8cac04e042d20daa197dda08891d480ae2dab84
--- /dev/null
+++ b/GISASFW/layerroughness.h
@@ -0,0 +1,15 @@
+#ifndef LAYERROUGHNESS_H
+#define LAYERROUGHNESS_H
+
+#include "layer.h"
+
+class LayerRoughness
+{
+public:
+    static LayerRoughness* createSmoothLayerInterface(Layer* p_top_layer, Layer* p_bottom_layer);
+
+protected:
+    LayerRoughness();
+};
+
+#endif // LAYERROUGHNESS_H
diff --git a/GISASFW/main.cpp b/GISASFW/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5f5419b5268aa6bb9df308d316981670e2c1c6e5
--- /dev/null
+++ b/GISASFW/main.cpp
@@ -0,0 +1,10 @@
+#include <iostream>
+
+using namespace std;
+
+int main()
+{
+    cout << "Hello World!" << endl;
+    return 0;
+}
+
diff --git a/GISASFW/multilayer.cpp b/GISASFW/multilayer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..167796f68ebdbadb6fff389e4befecbb177e7876
--- /dev/null
+++ b/GISASFW/multilayer.cpp
@@ -0,0 +1,39 @@
+#include <algorithm>
+#include <stdexcept>
+
+#include "multilayer.h"
+
+MultiLayer::MultiLayer()
+{
+}
+
+MultiLayer::~MultiLayer()
+{
+}
+
+void MultiLayer::addLayerWithTopRoughness(Layer *p_layer, LayerRoughness *p_roughness)
+{
+    if (!p_layer)
+    {
+        throw NullPointerException("The layer to add does not exist.");
+    }
+    if (getNumberOfLayers())
+    {
+        Layer* p_last_layer = dynamic_cast<Layer*>(m_layers[getNumberOfLayers()-1]);
+        LayerRoughness* p_top_roughness = p_roughness;
+        if (!p_top_roughness)
+        {
+            p_top_roughness = LayerRoughness::createSmoothLayerInterface(p_last_layer, p_layer);
+        }
+        m_layers.push_back(p_layer);
+        m_roughnesses.push_back(p_top_roughness);
+        return;
+    }
+    m_layers.push_back(p_layer);
+}
+
+void MultiLayer::add(ISample* p_child)
+{
+    Layer* p_layer = dynamic_cast<Layer*>(p_child);
+    addLayerWithTopRoughness(p_layer, 0);
+}
diff --git a/GISASFW/multilayer.h b/GISASFW/multilayer.h
new file mode 100644
index 0000000000000000000000000000000000000000..4b41dcde6fe409eda6de5b7cadf488ec551513f2
--- /dev/null
+++ b/GISASFW/multilayer.h
@@ -0,0 +1,26 @@
+#ifndef MULTILAYER_H
+#define MULTILAYER_H
+
+#include <vector>
+
+#include "layer.h"
+#include "layerroughness.h"
+
+class MultiLayer : public ISample
+{
+public:
+    MultiLayer();
+    ~MultiLayer();
+
+    void addLayerWithTopRoughness(Layer* p_layer, LayerRoughness* p_roughness);
+    size_t getNumberOfLayers() { return m_layers.size(); }
+
+    // Overrides from ISample:
+    void add(ISample* p_child);
+
+private:
+    std::vector<Layer*> m_layers;
+    std::vector<LayerRoughness*> m_roughnesses;
+};
+
+#endif // MULTILAYER_H
diff --git a/GISASFW/nanoparticle.cpp b/GISASFW/nanoparticle.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a9ebda577fd62650d7eaae8b1470d8bc0b574f70
--- /dev/null
+++ b/GISASFW/nanoparticle.cpp
@@ -0,0 +1,9 @@
+#include "nanoparticle.h"
+
+NanoParticle::NanoParticle()
+{
+}
+
+NanoParticle::~NanoParticle()
+{
+}
diff --git a/GISASFW/nanoparticle.h b/GISASFW/nanoparticle.h
new file mode 100644
index 0000000000000000000000000000000000000000..cb16681b1943fab110055e8e6b46b2ed10e2e897
--- /dev/null
+++ b/GISASFW/nanoparticle.h
@@ -0,0 +1,14 @@
+#ifndef NANOPARTICLE_H
+#define NANOPARTICLE_H
+
+#include "isample.h"
+
+class NanoParticle : public ISample
+{
+public:
+    NanoParticle();
+    virtual ~NanoParticle();
+
+};
+
+#endif // NANOPARTICLE_H
diff --git a/UML/model.notation b/UML/model.notation
index 055e40cebc8d0ec6df8f5b5851a155f3cca9e7da..eddc95f238f92fc3962013b2c42f2c7a1d0c2478 100644
--- a/UML/model.notation
+++ b/UML/model.notation
@@ -58,7 +58,7 @@
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XPQVmXyfEeGb2eulz0VMiA"/>
     </children>
     <element xmi:type="uml:Interface" href="model.uml#_XPLdEHyfEeGb2eulz0VMiA"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XPOgYXyfEeGb2eulz0VMiA" x="282" y="102" width="223" height="124"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XPOgYXyfEeGb2eulz0VMiA" x="180" y="63" width="223" height="124"/>
   </children>
   <children xmi:type="notation:Shape" xmi:id="_B4AdoHy_EeGw39HOdZIuIw" type="2008" fontName="Lucida Grande" fontHeight="11" fillColor="8905185" lineColor="0">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_B4BEsny_EeGw39HOdZIuIw" source="displayNameLabelIcon">
@@ -160,42 +160,6 @@
     <element xmi:type="uml:Class" href="model.uml#_sadhgHy_EeGw39HOdZIuIw"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sajoIXy_EeGw39HOdZIuIw" x="555" y="297"/>
   </children>
-  <children xmi:type="notation:Shape" xmi:id="_sX9KoHzAEeGw39HOdZIuIw" type="2008" fontName="Lucida Grande" fontHeight="11" fillColor="10011046" lineColor="0">
-    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_sX9xsnzAEeGw39HOdZIuIw" source="displayNameLabelIcon">
-      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sX9xs3zAEeGw39HOdZIuIw" key="displayNameLabelIcon_value" value="false"/>
-    </eAnnotations>
-    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_7RNrpHzFEeGw39HOdZIuIw" source="ShadowFigure">
-      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7RNrpXzFEeGw39HOdZIuIw" key="ShadowFigure_Value" value="true"/>
-    </eAnnotations>
-    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_btUKknzGEeGw39HOdZIuIw" source="QualifiedName">
-      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_btUKk3zGEeGw39HOdZIuIw" key="QualifiedNameDepth" value="1"/>
-    </eAnnotations>
-    <children xmi:type="notation:DecorationNode" xmi:id="_sX-YwXzAEeGw39HOdZIuIw" type="5029"/>
-    <children xmi:type="notation:BasicCompartment" xmi:id="_sX-YwnzAEeGw39HOdZIuIw" type="7017">
-      <children xmi:type="notation:Shape" xmi:id="_OCW90HzDEeGw39HOdZIuIw" type="3012" fontName="Lucida Grande" fontHeight="11" lineColor="0">
-        <element xmi:type="uml:Property" href="model.uml#_OCSFUHzDEeGw39HOdZIuIw"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_OCW90XzDEeGw39HOdZIuIw"/>
-      </children>
-      <styles xmi:type="notation:TitleStyle" xmi:id="_sX-Yw3zAEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_sX-YxHzAEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_sX-YxXzAEeGw39HOdZIuIw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sX-YxnzAEeGw39HOdZIuIw"/>
-    </children>
-    <children xmi:type="notation:BasicCompartment" xmi:id="_sX-Yx3zAEeGw39HOdZIuIw" type="7018">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_sX-YyHzAEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_sX-YyXzAEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_sX-YynzAEeGw39HOdZIuIw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sX-Yy3zAEeGw39HOdZIuIw"/>
-    </children>
-    <children xmi:type="notation:BasicCompartment" xmi:id="_sX-YzHzAEeGw39HOdZIuIw" visible="false" type="7019">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_sX-YzXzAEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_sX-YznzAEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_sX-Yz3zAEeGw39HOdZIuIw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sX-Y0HzAEeGw39HOdZIuIw"/>
-    </children>
-    <element xmi:type="uml:Class" href="model.uml#_sX3EAHzAEeGw39HOdZIuIw"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sX9KoXzAEeGw39HOdZIuIw" x="857" y="297"/>
-  </children>
   <children xmi:type="notation:Shape" xmi:id="_tpFbUHzAEeGw39HOdZIuIw" type="2008" fontName="Lucida Grande" fontHeight="11" fillColor="10011046" lineColor="0">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_tpFbVHzAEeGw39HOdZIuIw" source="displayNameLabelIcon">
       <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_tpFbVXzAEeGw39HOdZIuIw" key="displayNameLabelIcon_value" value="false"/>
@@ -214,6 +178,13 @@
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tpGCZ3zAEeGw39HOdZIuIw"/>
     </children>
     <children xmi:type="notation:BasicCompartment" xmi:id="_tpGCaHzAEeGw39HOdZIuIw" type="7018">
+      <children xmi:type="notation:Shape" xmi:id="_UpXxMH2LEeGcxOnjc91t-Q" type="3013" fontName="Lucida Grande" fontHeight="11" lineColor="0">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MEQqoH2NEeGcxOnjc91t-Q" source="CustomAppearance_Annotation">
+          <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MEQqoX2NEeGcxOnjc91t-Q" key="CustomAppearance_MaskValue" value="2826"/>
+        </eAnnotations>
+        <element xmi:type="uml:Operation" href="model.uml#_UpPOUH2LEeGcxOnjc91t-Q"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_UpXxMX2LEeGcxOnjc91t-Q"/>
+      </children>
       <styles xmi:type="notation:TitleStyle" xmi:id="_tpGCaXzAEeGw39HOdZIuIw"/>
       <styles xmi:type="notation:SortingStyle" xmi:id="_tpGCanzAEeGw39HOdZIuIw"/>
       <styles xmi:type="notation:FilteringStyle" xmi:id="_tpGCa3zAEeGw39HOdZIuIw"/>
@@ -226,39 +197,7 @@
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tpGCcXzAEeGw39HOdZIuIw"/>
     </children>
     <element xmi:type="uml:Class" href="model.uml#_to-toHzAEeGw39HOdZIuIw"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tpFbUXzAEeGw39HOdZIuIw" x="857" y="108"/>
-  </children>
-  <children xmi:type="notation:Shape" xmi:id="_ps6rQHzBEeGw39HOdZIuIw" type="2008" fontName="Lucida Grande" fontHeight="11" fillColor="8905185" lineColor="0">
-    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ps6rRHzBEeGw39HOdZIuIw" source="displayNameLabelIcon">
-      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ps6rRXzBEeGw39HOdZIuIw" key="displayNameLabelIcon_value" value="false"/>
-    </eAnnotations>
-    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ps7SUHzBEeGw39HOdZIuIw" source="QualifiedName">
-      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ps7SUXzBEeGw39HOdZIuIw" key="QualifiedNameDepth" value="1000"/>
-    </eAnnotations>
-    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_7RNroHzFEeGw39HOdZIuIw" source="ShadowFigure">
-      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7RNroXzFEeGw39HOdZIuIw" key="ShadowFigure_Value" value="true"/>
-    </eAnnotations>
-    <children xmi:type="notation:DecorationNode" xmi:id="_ps7SUnzBEeGw39HOdZIuIw" type="5029"/>
-    <children xmi:type="notation:BasicCompartment" xmi:id="_ps7SU3zBEeGw39HOdZIuIw" type="7017">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_ps7SVHzBEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_ps7SVXzBEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_ps7SVnzBEeGw39HOdZIuIw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ps7SV3zBEeGw39HOdZIuIw"/>
-    </children>
-    <children xmi:type="notation:BasicCompartment" xmi:id="_ps7SWHzBEeGw39HOdZIuIw" type="7018">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_ps7SWXzBEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_ps7SWnzBEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_ps7SW3zBEeGw39HOdZIuIw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ps7SXHzBEeGw39HOdZIuIw"/>
-    </children>
-    <children xmi:type="notation:BasicCompartment" xmi:id="_ps7SXXzBEeGw39HOdZIuIw" visible="false" type="7019">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_ps7SXnzBEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:SortingStyle" xmi:id="_ps7SX3zBEeGw39HOdZIuIw"/>
-      <styles xmi:type="notation:FilteringStyle" xmi:id="_ps7SYHzBEeGw39HOdZIuIw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ps7SYXzBEeGw39HOdZIuIw"/>
-    </children>
-    <element xmi:type="uml:Class" href="model.uml#_pszWgHzBEeGw39HOdZIuIw"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ps6rQXzBEeGw39HOdZIuIw" x="555" y="450" width="139"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tpFbUXzAEeGw39HOdZIuIw" x="495" y="63"/>
   </children>
   <children xmi:type="notation:Shape" xmi:id="_vHIRMHzBEeGw39HOdZIuIw" type="2008" fontName="Lucida Grande" fontHeight="11" fillColor="10011046" lineColor="0">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vHI4QnzBEeGw39HOdZIuIw" source="displayNameLabelIcon">
@@ -278,6 +217,10 @@
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vHJfVXzBEeGw39HOdZIuIw"/>
     </children>
     <children xmi:type="notation:BasicCompartment" xmi:id="_vHJfVnzBEeGw39HOdZIuIw" type="7018">
+      <children xmi:type="notation:Shape" xmi:id="_qBskMH2MEeGcxOnjc91t-Q" type="3013" fontName="Lucida Grande" fontHeight="11" lineColor="0">
+        <element xmi:type="uml:Operation" href="model.uml#_qBmdkH2MEeGcxOnjc91t-Q"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_qBskMX2MEeGcxOnjc91t-Q"/>
+      </children>
       <styles xmi:type="notation:TitleStyle" xmi:id="_vHJfV3zBEeGw39HOdZIuIw"/>
       <styles xmi:type="notation:SortingStyle" xmi:id="_vHJfWHzBEeGw39HOdZIuIw"/>
       <styles xmi:type="notation:FilteringStyle" xmi:id="_vHJfWXzBEeGw39HOdZIuIw"/>
@@ -290,7 +233,39 @@
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vHJfX3zBEeGw39HOdZIuIw"/>
     </children>
     <element xmi:type="uml:Class" href="model.uml#_vHBjgHzBEeGw39HOdZIuIw"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vHIRMXzBEeGw39HOdZIuIw" x="857" y="448" width="131"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vHIRMXzBEeGw39HOdZIuIw" x="819" y="432" width="190"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_eNEKcH2KEeGcxOnjc91t-Q" type="2004" fontName="Lucida Grande" fontHeight="11" fillColor="10011046" lineColor="0">
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_eNGmsH2KEeGcxOnjc91t-Q" source="displayNameLabelIcon">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_eNGmsX2KEeGcxOnjc91t-Q" key="displayNameLabelIcon_value" value="false"/>
+    </eAnnotations>
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_eNGmsn2KEeGcxOnjc91t-Q" source="QualifiedName">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_eNGms32KEeGcxOnjc91t-Q" key="QualifiedNameDepth" value="1000"/>
+    </eAnnotations>
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wyvFEH2KEeGcxOnjc91t-Q" source="ShadowFigure">
+      <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wyvFEX2KEeGcxOnjc91t-Q" key="ShadowFigure_Value" value="true"/>
+    </eAnnotations>
+    <children xmi:type="notation:DecorationNode" xmi:id="_eNGmtH2KEeGcxOnjc91t-Q" type="5011"/>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_eNGmtX2KEeGcxOnjc91t-Q" type="7006">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_eNGmtn2KEeGcxOnjc91t-Q"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_eNGmt32KEeGcxOnjc91t-Q"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_eNGmuH2KEeGcxOnjc91t-Q"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eNGmuX2KEeGcxOnjc91t-Q"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_eNGmun2KEeGcxOnjc91t-Q" type="7007">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_eNHNwH2KEeGcxOnjc91t-Q"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_eNHNwX2KEeGcxOnjc91t-Q"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_eNHNwn2KEeGcxOnjc91t-Q"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eNHNw32KEeGcxOnjc91t-Q"/>
+    </children>
+    <children xmi:type="notation:BasicCompartment" xmi:id="_eNHNxH2KEeGcxOnjc91t-Q" visible="false" type="7008">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_eNHNxX2KEeGcxOnjc91t-Q"/>
+      <styles xmi:type="notation:SortingStyle" xmi:id="_eNHNxn2KEeGcxOnjc91t-Q"/>
+      <styles xmi:type="notation:FilteringStyle" xmi:id="_eNHNx32KEeGcxOnjc91t-Q"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eNHNyH2KEeGcxOnjc91t-Q"/>
+    </children>
+    <element xmi:type="uml:Interface" href="model.uml#_eMp6wH2KEeGcxOnjc91t-Q"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eNEKcX2KEeGcxOnjc91t-Q" x="819" y="297" width="127"/>
   </children>
   <styles xmi:type="notation:DiagramStyle" xmi:id="_xN4QMXyeEeGb2eulz0VMiA"/>
   <element xmi:type="uml:Model" href="model.uml#_xLNWsHyeEeGb2eulz0VMiA"/>
@@ -300,7 +275,7 @@
     </children>
     <styles xmi:type="notation:FontStyle" xmi:id="_eUjWwXy_EeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
     <element xmi:type="uml:Generalization" href="model.uml#_eTr0EHy_EeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eUjWwny_EeGw39HOdZIuIw" points="[-12, -9, -84, 105]$[-12, -45, -84, 69]$[135, -45, 63, 69]$[135, -80, 63, 34]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eUjWwny_EeGw39HOdZIuIw" points="[-47, -9, -17, 144]$[-47, -72, -17, 81]$[45, -72, 75, 81]$[45, -119, 75, 34]"/>
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eV3lYHy_EeGw39HOdZIuIw" id="(0.72,0.09)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eV3lYXy_EeGw39HOdZIuIw" id="(0.18834080717488788,0.7258064516129032)"/>
   </edges>
@@ -310,7 +285,7 @@
     </children>
     <styles xmi:type="notation:FontStyle" xmi:id="_hilZAXy_EeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
     <element xmi:type="uml:Generalization" href="model.uml#_hihuoHy_EeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hilZAny_EeGw39HOdZIuIw" points="[-5, -50, -6, 151]$[-5, -139, -6, 62]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hilZAny_EeGw39HOdZIuIw" points="[-27, -50, 74, 172]$[-27, -113, 74, 109]$[-95, -113, 6, 109]$[-95, -160, 6, 62]"/>
   </edges>
   <edges xmi:type="notation:Connector" xmi:id="_wglpYHy_EeGw39HOdZIuIw" type="4002" source="_sajoIHy_EeGw39HOdZIuIw" target="_XPOgYHyfEeGb2eulz0VMiA" routing="Rectilinear" lineColor="0">
     <children xmi:type="notation:DecorationNode" xmi:id="_wgmQcHy_EeGw39HOdZIuIw" type="6007">
@@ -318,7 +293,7 @@
     </children>
     <styles xmi:type="notation:FontStyle" xmi:id="_wglpYXy_EeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
     <element xmi:type="uml:Generalization" href="model.uml#_wggJ0Hy_EeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wglpYny_EeGw39HOdZIuIw" points="[-26, -50, 206, 133]$[-26, -86, 206, 97]$[-238, -86, -6, 97]$[-238, -121, -6, 62]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wglpYny_EeGw39HOdZIuIw" points="[-60, -50, 274, 172]$[-60, -113, 274, 109]$[-328, -113, 6, 109]$[-328, -160, 6, 62]"/>
   </edges>
   <edges xmi:type="notation:Connector" xmi:id="_9TBaEHy_EeGw39HOdZIuIw" type="4001" source="_fotGQHy_EeGw39HOdZIuIw" target="_sajoIHy_EeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_IFyZEHzAEeGw39HOdZIuIw" source="QualifiedName">
@@ -360,7 +335,7 @@
     <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9TCBIXy_EeGw39HOdZIuIw" points="[17, 3, -148, -14]$[115, 3, -50, -14]"/>
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9T6x8Hy_EeGw39HOdZIuIw" id="(0.83,0.33)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_IlQt4HzBEeGw39HOdZIuIw" type="4001" source="_sajoIHy_EeGw39HOdZIuIw" target="_tpFbUHzAEeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
+  <edges xmi:type="notation:Connector" xmi:id="_IlQt4HzBEeGw39HOdZIuIw" type="4001" source="_tpFbUHzAEeGw39HOdZIuIw" target="_sajoIHy_EeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JXElUHzBEeGw39HOdZIuIw" source="Stereotype_Annotation">
       <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JX0MMHzBEeGw39HOdZIuIw" key="StereotypeWithQualifiedNameList" value=""/>
       <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JX0zQHzBEeGw39HOdZIuIw" key="StereotypeList" value=""/>
@@ -372,7 +347,7 @@
       <layoutConstraint xmi:type="notation:Location" xmi:id="_IlRU8XzBEeGw39HOdZIuIw" y="-20"/>
     </children>
     <children xmi:type="notation:DecorationNode" xmi:id="_IlRU8nzBEeGw39HOdZIuIw" type="6002">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_IlRU83zBEeGw39HOdZIuIw" x="20" y="8"/>
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_IlRU83zBEeGw39HOdZIuIw" x="-90" y="48"/>
     </children>
     <children xmi:type="notation:DecorationNode" xmi:id="_IlRU9HzBEeGw39HOdZIuIw" visible="false" type="6003">
       <layoutConstraint xmi:type="notation:Location" xmi:id="_IlRU9XzBEeGw39HOdZIuIw" y="-20"/>
@@ -381,22 +356,23 @@
       <layoutConstraint xmi:type="notation:Location" xmi:id="_IlR8AHzBEeGw39HOdZIuIw" y="20"/>
     </children>
     <children xmi:type="notation:DecorationNode" xmi:id="_IlR8AXzBEeGw39HOdZIuIw" type="6033">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_IlR8AnzBEeGw39HOdZIuIw" x="-6" y="-16"/>
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_IlR8AnzBEeGw39HOdZIuIw" x="-19" y="22"/>
     </children>
     <children xmi:type="notation:DecorationNode" xmi:id="_IlR8A3zBEeGw39HOdZIuIw" type="6034">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_IlR8BHzBEeGw39HOdZIuIw" x="13" y="-14"/>
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_IlR8BHzBEeGw39HOdZIuIw" x="21" y="16"/>
     </children>
     <styles xmi:type="notation:FontStyle" xmi:id="_IlQt4XzBEeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
     <element xmi:type="uml:Association" href="model.uml#_IlKnQHzBEeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IlQt4nzBEeGw39HOdZIuIw" points="[21, -26, -249, 157]$[74, -26, -196, 157]$[74, -150, -196, 33]$[220, -150, -50, 33]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IlcUEHzBEeGw39HOdZIuIw" id="(0.79,0.44)"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IlQt4nzBEeGw39HOdZIuIw" points="[-62, 7, 75, -148]$[-62, 78, 75, -77]$[-149, 78, -12, -77]$[-149, 141, -12, -14]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IlcUEHzBEeGw39HOdZIuIw" id="(0.6806930693069307,0.93)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SJKfcH2lEeGcxOnjc91t-Q" id="(0.5571428571428572,0.14)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_b9ZnQHzBEeGw39HOdZIuIw" type="4001" source="_sajoIHy_EeGw39HOdZIuIw" target="_sX9KoHzAEeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
+  <edges xmi:type="notation:Connector" xmi:id="_b9ZnQHzBEeGw39HOdZIuIw" type="4001" source="_sajoIHy_EeGw39HOdZIuIw" target="_eNEKcH2KEeGcxOnjc91t-Q" routing="Rectilinear" lineColor="0">
     <children xmi:type="notation:DecorationNode" xmi:id="_b9aOUHzBEeGw39HOdZIuIw" type="6001">
       <layoutConstraint xmi:type="notation:Location" xmi:id="_b9aOUXzBEeGw39HOdZIuIw" y="-20"/>
     </children>
     <children xmi:type="notation:DecorationNode" xmi:id="_b9aOUnzBEeGw39HOdZIuIw" type="6002">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_b9aOU3zBEeGw39HOdZIuIw" x="-20" y="-12"/>
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_b9aOU3zBEeGw39HOdZIuIw" x="-2" y="-12"/>
     </children>
     <children xmi:type="notation:DecorationNode" xmi:id="_b9a1YHzBEeGw39HOdZIuIw" visible="false" type="6003">
       <layoutConstraint xmi:type="notation:Location" xmi:id="_b9a1YXzBEeGw39HOdZIuIw" y="-20"/>
@@ -412,49 +388,41 @@
     </children>
     <styles xmi:type="notation:FontStyle" xmi:id="_b9ZnQXzBEeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
     <element xmi:type="uml:Association" href="model.uml#_b9UHsHzBEeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_b9ZnQnzBEeGw39HOdZIuIw" points="[24, -5, -216, 4]$[184, -5, -56, 4]"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_b9ZnQnzBEeGw39HOdZIuIw" points="[24, -14, -172, 0]$[184, -14, -12, 0]"/>
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b9j_UHzBEeGw39HOdZIuIw" id="(0.83,0.59)"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kwjFkH2KEeGcxOnjc91t-Q" id="(0.12,0.45)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_yO1pAHzBEeGw39HOdZIuIw" type="4002" source="_vHIRMHzBEeGw39HOdZIuIw" target="_sX9KoHzAEeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
+  <edges xmi:type="notation:Connector" xmi:id="_yO1pAHzBEeGw39HOdZIuIw" type="4002" source="_vHIRMHzBEeGw39HOdZIuIw" target="_eNEKcH2KEeGcxOnjc91t-Q" routing="Rectilinear" lineColor="0">
     <children xmi:type="notation:DecorationNode" xmi:id="_yO2QEnzBEeGw39HOdZIuIw" type="6007">
       <layoutConstraint xmi:type="notation:Location" xmi:id="_yO23IHzBEeGw39HOdZIuIw" y="40"/>
     </children>
     <styles xmi:type="notation:FontStyle" xmi:id="_yO2QEHzBEeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
     <element xmi:type="uml:Generalization" href="model.uml#_yOx-oHzBEeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yO2QEXzBEeGw39HOdZIuIw" points="[-8, -50, 36, 165]$[-17, -165, 27, 50]"/>
-  </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_yvXjMHzBEeGw39HOdZIuIw" type="4002" source="_ps6rQHzBEeGw39HOdZIuIw" target="_sajoIHy_EeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
-    <children xmi:type="notation:DecorationNode" xmi:id="_yvYKQHzBEeGw39HOdZIuIw" type="6007">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_yvYKQXzBEeGw39HOdZIuIw" y="40"/>
-    </children>
-    <styles xmi:type="notation:FontStyle" xmi:id="_yvXjMXzBEeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
-    <element xmi:type="uml:Generalization" href="model.uml#_yvT40HzBEeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yvXjMnzBEeGw39HOdZIuIw" points="[6, -50, -27, 63]$[6, -103, -27, 10]"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yvffAHzBEeGw39HOdZIuIw" id="(0.73,0.9)"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yO2QEXzBEeGw39HOdZIuIw" points="[-14, -50, 17, 39]$[-14, -85, 17, 4]"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_j2ROoH2KEeGcxOnjc91t-Q" id="(0.51,0.96)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_dM-jUHzCEeGw39HOdZIuIw" type="4001" source="_ps6rQHzBEeGw39HOdZIuIw" target="_vHIRMHzBEeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
-    <children xmi:type="notation:DecorationNode" xmi:id="_dM_KYHzCEeGw39HOdZIuIw" type="6001">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_dM_KYXzCEeGw39HOdZIuIw" y="-20"/>
+  <edges xmi:type="notation:Connector" xmi:id="_sc7F8H2LEeGcxOnjc91t-Q" type="4001" source="_fotGQHy_EeGw39HOdZIuIw" target="_tpFbUHzAEeGw39HOdZIuIw" routing="Rectilinear" lineColor="0">
+    <children xmi:type="notation:DecorationNode" xmi:id="_sc8UEH2LEeGcxOnjc91t-Q" type="6001">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sc8UEX2LEeGcxOnjc91t-Q" y="-20"/>
     </children>
-    <children xmi:type="notation:DecorationNode" xmi:id="_dM_KYnzCEeGw39HOdZIuIw" type="6002">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_dM_KY3zCEeGw39HOdZIuIw" x="-21" y="-14"/>
+    <children xmi:type="notation:DecorationNode" xmi:id="_sc8UEn2LEeGcxOnjc91t-Q" type="6002">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sc8UE32LEeGcxOnjc91t-Q" x="-33" y="-12"/>
     </children>
-    <children xmi:type="notation:DecorationNode" xmi:id="_dM_KZHzCEeGw39HOdZIuIw" visible="false" type="6003">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_dM_xcHzCEeGw39HOdZIuIw" y="-20"/>
+    <children xmi:type="notation:DecorationNode" xmi:id="_sc8UFH2LEeGcxOnjc91t-Q" visible="false" type="6003">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sc8UFX2LEeGcxOnjc91t-Q" y="-20"/>
     </children>
-    <children xmi:type="notation:DecorationNode" xmi:id="_dM_xcXzCEeGw39HOdZIuIw" visible="false" type="6005">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_dM_xcnzCEeGw39HOdZIuIw" y="20"/>
+    <children xmi:type="notation:DecorationNode" xmi:id="_sc8UFn2LEeGcxOnjc91t-Q" visible="false" type="6005">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sc8UF32LEeGcxOnjc91t-Q" y="20"/>
     </children>
-    <children xmi:type="notation:DecorationNode" xmi:id="_dM_xc3zCEeGw39HOdZIuIw" type="6033">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_dM_xdHzCEeGw39HOdZIuIw" x="-6" y="13"/>
+    <children xmi:type="notation:DecorationNode" xmi:id="_sc8UGH2LEeGcxOnjc91t-Q" type="6033">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sc8UGX2LEeGcxOnjc91t-Q" y="20"/>
     </children>
-    <children xmi:type="notation:DecorationNode" xmi:id="_dM_xdXzCEeGw39HOdZIuIw" type="6034">
-      <layoutConstraint xmi:type="notation:Location" xmi:id="_dM_xdnzCEeGw39HOdZIuIw" y="-20"/>
+    <children xmi:type="notation:DecorationNode" xmi:id="_sc87IH2LEeGcxOnjc91t-Q" type="6034">
+      <layoutConstraint xmi:type="notation:Location" xmi:id="_sc87IX2LEeGcxOnjc91t-Q" x="31" y="-15"/>
     </children>
-    <styles xmi:type="notation:FontStyle" xmi:id="_dM-jUXzCEeGw39HOdZIuIw" fontName="Lucida Grande" fontHeight="11"/>
-    <element xmi:type="uml:Association" href="model.uml#_dM5DwnzCEeGw39HOdZIuIw"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dM-jUnzCEeGw39HOdZIuIw" points="[23, -2, -212, 16]$[216, -2, -19, 16]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dNI7YHzCEeGw39HOdZIuIw" id="(0.7830188679245284,0.36)"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dNI7YXzCEeGw39HOdZIuIw" id="(0.1450381679389313,0.4)"/>
+    <styles xmi:type="notation:FontStyle" xmi:id="_sc7F8X2LEeGcxOnjc91t-Q" fontName="Lucida Grande" fontHeight="11"/>
+    <element xmi:type="uml:Association" href="model.uml#_scyjEH2LEeGcxOnjc91t-Q"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sc7F8n2LEeGcxOnjc91t-Q" points="[4, -50, -149, 150]$[4, -77, -149, 123]$[164, -77, 11, 123]$[164, -184, 11, 16]"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sdK9kH2LEeGcxOnjc91t-Q" id="(0.10211267605633803,0.84)"/>
   </edges>
 </notation:Diagram>
diff --git a/UML/model.uml b/UML/model.uml
index 438ad8b1c90607d82f90c44b5b2f5dfacc903167..0c580508f0d1b9599af5b05f8a2426ddd9b2b899 100644
--- a/UML/model.uml
+++ b/UML/model.uml
@@ -32,14 +32,18 @@
       <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_9S5eQXy_EeGw39HOdZIuIw" value="*"/>
       <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_9S5eQny_EeGw39HOdZIuIw" value="1"/>
     </ownedAttribute>
+    <ownedAttribute xmi:id="_scxU8H2LEeGcxOnjc91t-Q" name="layerRoughness" type="_to-toHzAEeGw39HOdZIuIw" aggregation="composite" association="_scyjEH2LEeGcxOnjc91t-Q">
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_scxU8X2LEeGcxOnjc91t-Q" value="*"/>
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_scxU8n2LEeGcxOnjc91t-Q"/>
+    </ownedAttribute>
   </packagedElement>
   <packagedElement xmi:type="uml:Class" xmi:id="_sadhgHy_EeGw39HOdZIuIw" name="Layer">
     <generalization xmi:id="_wggJ0Hy_EeGw39HOdZIuIw" general="_XPLdEHyfEeGb2eulz0VMiA"/>
-    <ownedAttribute xmi:id="_IlKAMHzBEeGw39HOdZIuIw" name="" type="_to-toHzAEeGw39HOdZIuIw" aggregation="shared" association="_IlKnQHzBEeGw39HOdZIuIw">
+    <ownedAttribute xmi:id="_IlKAMHzBEeGw39HOdZIuIw" name="" type="_sadhgHy_EeGw39HOdZIuIw" aggregation="shared" association="_IlKnQHzBEeGw39HOdZIuIw">
       <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_IlKAMXzBEeGw39HOdZIuIw" value="2"/>
-      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_IlKAMnzBEeGw39HOdZIuIw" value="1"/>
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_IlKAMnzBEeGw39HOdZIuIw" value="2"/>
     </ownedAttribute>
-    <ownedAttribute xmi:id="_b9TgoHzBEeGw39HOdZIuIw" name="material" type="_sX3EAHzAEeGw39HOdZIuIw" aggregation="shared" association="_b9UHsHzBEeGw39HOdZIuIw">
+    <ownedAttribute xmi:id="_b9TgoHzBEeGw39HOdZIuIw" name="material" type="_eMp6wH2KEeGcxOnjc91t-Q" aggregation="shared" association="_b9UHsHzBEeGw39HOdZIuIw">
       <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_b9TgoXzBEeGw39HOdZIuIw" value="1"/>
       <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_b9TgonzBEeGw39HOdZIuIw" value="1"/>
     </ownedAttribute>
@@ -51,16 +55,22 @@
       <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_9S7Tc3y_EeGw39HOdZIuIw" value="1"/>
     </ownedEnd>
   </packagedElement>
-  <packagedElement xmi:type="uml:Class" xmi:id="_sX3EAHzAEeGw39HOdZIuIw" name="Material">
+  <packagedElement xmi:type="uml:Class" xmi:id="_sX3EAHzAEeGw39HOdZIuIw" name="IMaterial" isAbstract="true">
     <ownedAttribute xmi:id="_OCSFUHzDEeGw39HOdZIuIw" name="m_name">
       <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
     </ownedAttribute>
   </packagedElement>
-  <packagedElement xmi:type="uml:Class" xmi:id="_to-toHzAEeGw39HOdZIuIw" name="LayerRoughness"/>
-  <packagedElement xmi:type="uml:Association" xmi:id="_IlKnQHzBEeGw39HOdZIuIw" name="Top/bottom roughness" memberEnd="_IlKnQXzBEeGw39HOdZIuIw _IlKAMHzBEeGw39HOdZIuIw">
-    <ownedEnd xmi:id="_IlKnQXzBEeGw39HOdZIuIw" name="" type="_sadhgHy_EeGw39HOdZIuIw" association="_IlKnQHzBEeGw39HOdZIuIw">
+  <packagedElement xmi:type="uml:Class" xmi:id="_to-toHzAEeGw39HOdZIuIw" name="LayerRoughness">
+    <ownedOperation xmi:id="_UpPOUH2LEeGcxOnjc91t-Q" name="createSmoothLayerInterface" isStatic="true">
+      <ownedParameter xmi:id="_f4YAQH2LEeGcxOnjc91t-Q" name="top_layer" type="_sadhgHy_EeGw39HOdZIuIw"/>
+      <ownedParameter xmi:id="_iI3cMH2LEeGcxOnjc91t-Q" name="bottom_layer" type="_sadhgHy_EeGw39HOdZIuIw"/>
+      <ownedParameter xmi:id="_n2KWMH2LEeGcxOnjc91t-Q" name="smoothLayerInterface" type="_to-toHzAEeGw39HOdZIuIw" direction="return"/>
+    </ownedOperation>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Association" xmi:id="_IlKnQHzBEeGw39HOdZIuIw" name="Top/bottom layer" memberEnd="_IlKnQXzBEeGw39HOdZIuIw _IlKAMHzBEeGw39HOdZIuIw">
+    <ownedEnd xmi:id="_IlKnQXzBEeGw39HOdZIuIw" name="" type="_to-toHzAEeGw39HOdZIuIw" association="_IlKnQHzBEeGw39HOdZIuIw">
       <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_IlKnQnzBEeGw39HOdZIuIw" value="2"/>
-      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_IlKnQ3zBEeGw39HOdZIuIw" value="2"/>
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_IlKnQ3zBEeGw39HOdZIuIw" value="1"/>
     </ownedEnd>
   </packagedElement>
   <packagedElement xmi:type="uml:Association" xmi:id="_b9UHsHzBEeGw39HOdZIuIw" name="m_bulk_material" memberEnd="_b9UHsXzBEeGw39HOdZIuIw _b9TgoHzBEeGw39HOdZIuIw">
@@ -69,31 +79,18 @@
       <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_b9UHs3zBEeGw39HOdZIuIw"/>
     </ownedEnd>
   </packagedElement>
-  <packagedElement xmi:type="uml:Class" xmi:id="_pszWgHzBEeGw39HOdZIuIw" name="HomogeneousLayer">
-    <generalization xmi:id="_yvT40HzBEeGw39HOdZIuIw" general="_sadhgHy_EeGw39HOdZIuIw"/>
-    <ownedAttribute xmi:id="_acEh8HzCEeGw39HOdZIuIw" name="homogeneousMaterial" type="_vHBjgHzBEeGw39HOdZIuIw" association="_acFJAHzCEeGw39HOdZIuIw">
-      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_acEh8XzCEeGw39HOdZIuIw" value="1"/>
-      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_acEh8nzCEeGw39HOdZIuIw" value="1"/>
-    </ownedAttribute>
-    <ownedAttribute xmi:id="_dM4csHzCEeGw39HOdZIuIw" name="homogeneousMaterial" type="_vHBjgHzBEeGw39HOdZIuIw" aggregation="shared" association="_dM5DwnzCEeGw39HOdZIuIw">
-      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_dM5DwHzCEeGw39HOdZIuIw" value="1"/>
-      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_dM5DwXzCEeGw39HOdZIuIw" value="1"/>
-    </ownedAttribute>
-  </packagedElement>
   <packagedElement xmi:type="uml:Class" xmi:id="_vHBjgHzBEeGw39HOdZIuIw" name="HomogeneousMaterial">
-    <generalization xmi:id="_yOx-oHzBEeGw39HOdZIuIw" general="_sX3EAHzAEeGw39HOdZIuIw"/>
-  </packagedElement>
-  <packagedElement xmi:type="uml:Association" xmi:id="_acFJAHzCEeGw39HOdZIuIw" name="homogeneousLayer_homogeneousMaterial_1" memberEnd="_acFJAXzCEeGw39HOdZIuIw _acEh8HzCEeGw39HOdZIuIw">
-    <ownedEnd xmi:id="_acFJAXzCEeGw39HOdZIuIw" name="homogeneousLayer" type="_pszWgHzBEeGw39HOdZIuIw" association="_acFJAHzCEeGw39HOdZIuIw">
-      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_acFJAnzCEeGw39HOdZIuIw" value="1"/>
-      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_acFJA3zCEeGw39HOdZIuIw" value="1"/>
-    </ownedEnd>
+    <generalization xmi:id="_yOx-oHzBEeGw39HOdZIuIw" general="_eMp6wH2KEeGcxOnjc91t-Q"/>
+    <ownedOperation xmi:id="_qBmdkH2MEeGcxOnjc91t-Q" name="getRefractiveIndex">
+      <ownedParameter xmi:id="_vWDZwH2MEeGcxOnjc91t-Q" name="refractive_index" type="_cHz1kHzDEeGw39HOdZIuIw" direction="return"/>
+    </ownedOperation>
   </packagedElement>
-  <packagedElement xmi:type="uml:Association" xmi:id="_dM5DwnzCEeGw39HOdZIuIw" name="m_bulk_material" memberEnd="_dM5Dw3zCEeGw39HOdZIuIw _dM4csHzCEeGw39HOdZIuIw">
-    <ownedEnd xmi:id="_dM5Dw3zCEeGw39HOdZIuIw" name="homogeneousLayer" type="_pszWgHzBEeGw39HOdZIuIw" association="_dM5DwnzCEeGw39HOdZIuIw">
-      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_dM5DxHzCEeGw39HOdZIuIw" value="*"/>
-      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_dM5DxXzCEeGw39HOdZIuIw"/>
+  <packagedElement xmi:type="uml:DataType" xmi:id="_cHz1kHzDEeGw39HOdZIuIw" name="double"/>
+  <packagedElement xmi:type="uml:Interface" xmi:id="_eMp6wH2KEeGcxOnjc91t-Q" name="IMaterial"/>
+  <packagedElement xmi:type="uml:Association" xmi:id="_scyjEH2LEeGcxOnjc91t-Q" name="m_roughnesses" memberEnd="_scyjEX2LEeGcxOnjc91t-Q _scxU8H2LEeGcxOnjc91t-Q">
+    <ownedEnd xmi:id="_scyjEX2LEeGcxOnjc91t-Q" name="multilayer" type="_fom_oHy_EeGw39HOdZIuIw" association="_scyjEH2LEeGcxOnjc91t-Q">
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_scyjEn2LEeGcxOnjc91t-Q" value="1"/>
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_scyjE32LEeGcxOnjc91t-Q" value="1"/>
     </ownedEnd>
   </packagedElement>
-  <packagedElement xmi:type="uml:DataType" xmi:id="_cHz1kHzDEeGw39HOdZIuIw" name="double"/>
 </uml:Model>