diff --git a/screens/AdaptiveScreen.cpp b/screens/AdaptiveScreen.cpp
index c11ab7086aae1b5d57479a8d5f360dbef4af9d56..3d25631e04fb9c5f569723d0f04e9a32af2b3c8d 100644
--- a/screens/AdaptiveScreen.cpp
+++ b/screens/AdaptiveScreen.cpp
@@ -1,8 +1,9 @@
 #include "AdaptiveScreen.h"
 
+AdaptiveScreen::InitializerFunc AdaptiveScreen::s_initializerFunc = nullptr;
 
 AdaptiveScreen::AdaptiveScreen(QWidget *a_parent /*= nullptr*/)
     : AdaptiveWidget(a_parent)
 {
-
+    AdaptiveScreen::initScreen(this);
 }
diff --git a/screens/AdaptiveScreen.h b/screens/AdaptiveScreen.h
index e2400d3beb9f32ff27a710e1e38ce6a44e8a1bca..b7af8408e17cb3a48278fd28aac2d9d4705b4ee8 100644
--- a/screens/AdaptiveScreen.h
+++ b/screens/AdaptiveScreen.h
@@ -6,12 +6,24 @@
 class AdaptiveScreen : public AdaptiveWidget
 {
 public:
+
     AdaptiveScreen(QWidget *a_parent = nullptr);
 
 //    virtual void activateScreen() = 0;
-//    virtual QString screenName() = 0;
+    virtual QString screenName() = 0;
 
     virtual void initVariantUi(QWidget * a_widget) = 0;
+
+protected:
+    typedef void (*InitializerFunc)(AdaptiveScreen*);
+
+    template<typename T>
+    static void initScreen(T* a_screen){
+        if (T::s_initializerFunc)
+            T::s_initializerFunc(a_screen);
+    };
+    static InitializerFunc s_initializerFunc;
+
 };
 
 #endif // SCREEN_H
diff --git a/screens/DefaultMultiScreen.cpp b/screens/DefaultMultiScreen.cpp
index caf73e3fd28ec1615e398afe08f8a2dffc91357e..67a0a74d6b69182b71acb2a4da7dec87f367b42b 100755
--- a/screens/DefaultMultiScreen.cpp
+++ b/screens/DefaultMultiScreen.cpp
@@ -24,6 +24,8 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 
 #include "DefaultMultiScreen.h"
 
+const QString DefaultMultiScreen::SCREEN_NAME("FullScreen");
+
 /**
  * @brief Overloaded constructor.
  * @param a_parent Parent.
@@ -35,6 +37,11 @@ DefaultMultiScreen::DefaultMultiScreen(QWidget *a_parent)
     create<Ui_DefaultMultiScreen>();
 }
 
+QString DefaultMultiScreen::screenName()
+{
+    return DefaultMultiScreen::SCREEN_NAME;
+}
+
 /**
  * @brief Form initialization.
  * @param a_w Window GUI widget.
diff --git a/screens/DefaultMultiScreen.h b/screens/DefaultMultiScreen.h
index a619df5b470eb47bd25006998e8872805ef32de9..2a9595934f018d10747588c550a33619600d9c0b 100755
--- a/screens/DefaultMultiScreen.h
+++ b/screens/DefaultMultiScreen.h
@@ -34,6 +34,10 @@ class DefaultMultiScreen : public MultiScreenAbstract
 public:
     DefaultMultiScreen(QWidget *a_parent = nullptr);
 
+    virtual QString screenName() override;
+    static const QString SCREEN_NAME;
+
+
 protected:
     virtual void initVariantUi(QWidget * a_widget) override;
 
diff --git a/screens/MultiScreenAbstract.h b/screens/MultiScreenAbstract.h
index 86a06f49e3f43086ce2b9317de483a6215d4f89f..9ede96a4d25ff0f9049a91e8d10910208e27eb23 100755
--- a/screens/MultiScreenAbstract.h
+++ b/screens/MultiScreenAbstract.h
@@ -72,11 +72,12 @@ signals:
 protected:
     virtual void initChangedScreen(QWidget * a_w);  ///< Find changingWidget and assign to m_wgChangedScreen
     virtual void initVariantUi(QWidget * a_widget) = 0; ///<pure virtual method. Must de reimplement it inherited classes
+    virtual QString screenName() = 0;
 
     AnimationChangingWidget *m_wgChangedScreen;     ///< Pointer to ChangingWidget controll
 
 private:
-    QMap<QString, DapUiScreen*> m_screens;          ///< Map with all screens that can be activated
+    QMap<QString, AdaptiveScreen*> m_screens;          ///< Map with all screens that can be activated
 };
 
 
@@ -103,12 +104,11 @@ T *MultiScreenAbstract::createSubScreen(int a_index /*= -1*/)
     if (subScreen<T>())
         return newScreen;
 
-    QStackedWidget *newSW = new QStackedWidget(m_wgChangedScreen);  // Create QStackedWidget for new screen and screen;
-    newScreen = new T(this, newSW);                              // Create new screen
+    newScreen = new T(this);                              // Create new screen
 
     //insert screen to m_screens and changing sreen widget
     m_screens.insert(typeid(T).name(), newScreen);
-    m_wgChangedScreen->insertWidget(a_index, newScreen->sw());
+    m_wgChangedScreen->insertWidget(a_index, newScreen);
 
     return newScreen;
 }
diff --git a/screens/MultiScreenWindow.cpp b/screens/MultiScreenWindow.cpp
index d15a28803b922c81123a41b7b5612889eab6532e..f985664067875d2dbf5354608c608242c013f3b1 100644
--- a/screens/MultiScreenWindow.cpp
+++ b/screens/MultiScreenWindow.cpp
@@ -1,8 +1,33 @@
 #include "MultiScreenWindow.h"
 
+#include "StartScreen.h"
+
 MultiScreenWindow::MultiScreenWindow(MultiScreenAbstract* a_centralScreen /*= nullptr*/, QWidget *a_parent /*= nullptr*/)
     : QMainWindow(a_parent)
 {
     if (!a_centralScreen)
         a_centralScreen = new DefaultMultiScreen(this);
+
+    m_centralScreen = a_centralScreen;
+    setCentralWidget(a_centralScreen);
+}
+
+void MultiScreenWindow::activateScreen(const QString &a_screenName)
+{
+    if (a_screenName == StartScreen::SCREEN_NAME)
+        m_centralScreen->activateScreen<StartScreen>();
+    else
+        return;
+
+    m_activeScreen = a_screenName;
+}
+
+QString MultiScreenWindow::activeScreen()
+{
+
+}
+
+MultiScreenAbstract *MultiScreenWindow::centralScreen()
+{
+    return m_centralScreen;
 }
diff --git a/screens/MultiScreenWindow.h b/screens/MultiScreenWindow.h
index 94bc30a8a500e7c9955d505a63b2772a572dfe3d..d1af8cdf5a938231d804c05c7eafb3d5b3de9ce4 100644
--- a/screens/MultiScreenWindow.h
+++ b/screens/MultiScreenWindow.h
@@ -6,11 +6,20 @@
 class MultiScreenWindow : public QMainWindow
 {
     Q_OBJECT
+    Q_PROPERTY(QString activeScreen READ activeScreen WRITE activateScreen)
+
+    using QMainWindow::setCentralWidget; //disable access to setCentralWidget.
 public:
     explicit MultiScreenWindow(MultiScreenAbstract* a_centralScreen = nullptr, QWidget *a_parent = nullptr);
 
-signals:
+    void activateScreen (const QString& a_screenName);
+    QString activeScreen();
+
+    MultiScreenAbstract* centralScreen();
+    MultiScreenAbstract* m_centralScreen;
 
+private:
+    QString m_activeScreen;
 };
 
 #endif // MULTISCREENWINDOW_H