diff --git a/screens/AdaptiveScreen.cpp b/screens/AdaptiveScreen.cpp
index 3d25631e04fb9c5f569723d0f04e9a32af2b3c8d..c685f4103c01ef6718336af18cafca29668c11dc 100644
--- a/screens/AdaptiveScreen.cpp
+++ b/screens/AdaptiveScreen.cpp
@@ -1,9 +1,9 @@
 #include "AdaptiveScreen.h"
 
-AdaptiveScreen::InitializerFunc AdaptiveScreen::s_initializerFunc = nullptr;
+QMap<QString, void*> AdaptiveScreen::s_initFuncMap;
 
 AdaptiveScreen::AdaptiveScreen(QWidget *a_parent /*= nullptr*/)
     : AdaptiveWidget(a_parent)
 {
-    AdaptiveScreen::initScreen(this);
+//    AdaptiveScreen::initScreen(this);
 }
diff --git a/screens/AdaptiveScreen.h b/screens/AdaptiveScreen.h
index 4b58c4534be9d0e82e2bb38a75be2d768f6368d1..c148214e92fcdf223a4a2f73681cfaed3d5b0c09 100644
--- a/screens/AdaptiveScreen.h
+++ b/screens/AdaptiveScreen.h
@@ -2,6 +2,7 @@
 #define ADAPTIVE_SCREEN_H
 
 #include "AdaptiveWidget.h"
+#include <QDebug>
 
 class AdaptiveScreen : public AdaptiveWidget
 {
@@ -10,21 +11,42 @@ public:
 
     AdaptiveScreen(QWidget *a_parent = nullptr);
 
-//    virtual void activateScreen() = 0;
     virtual QString screenName() = 0;
 
     virtual void initVariantUi(QWidget * a_widget) = 0;
 
+
+    template<typename T>
+    static void setInitFunc(void (*a_initFunc)(T*));
+
 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;
+    static void initScreen(T* a_screen);
+
+private:
+
+    static QMap<QString, void*> s_initFuncMap;
+};
+
+
 
+////////////////////////////////////////////////////////////////////////////////////////////////
+
+template<typename T>
+void AdaptiveScreen::setInitFunc(void (*a_initFunc)(T*)/*typename T::InitializerFunc a_initFunc*/) {
+    s_initFuncMap[T::SCREEN_NAME] = reinterpret_cast<void*>(a_initFunc);
 };
 
+template<typename T>
+void AdaptiveScreen::initScreen(T* a_screen) {
+    void* l_initFunctionVoid = s_initFuncMap.value(T::SCREEN_NAME, nullptr);
+    if (l_initFunctionVoid)
+    {
+        typedef void (*funcType)(T*);
+        auto l_initFunction = reinterpret_cast<funcType>(l_initFunctionVoid);
+        l_initFunction(a_screen);
+    }
+}
+
 #endif // SCREEN_H
diff --git a/screens/MultiScreenAbstract.cpp b/screens/MultiScreenAbstract.cpp
index 6b1b63a6f808c04e579a96a044e2e905238ade8a..f6348ad92e1200954ef8bc7264bdfe995dbaaccb 100755
--- a/screens/MultiScreenAbstract.cpp
+++ b/screens/MultiScreenAbstract.cpp
@@ -30,8 +30,7 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
  * @param a_sw Application window stack.
  */
 MultiScreenAbstract::MultiScreenAbstract(QWidget *parent)
-    :AdaptiveScreen(parent),
-    m_wgtChangingScreen(nullptr)
+    :AdaptiveScreen(parent)
 {
 }
 
diff --git a/screens/MultiScreenAbstract.h b/screens/MultiScreenAbstract.h
index b6f0f063365f36da6d701eac3a47c525869f60c7..8cc8b5313974964aadb5cc1d090080621f39f931 100755
--- a/screens/MultiScreenAbstract.h
+++ b/screens/MultiScreenAbstract.h
@@ -76,7 +76,7 @@ protected:
     virtual void initVariantUi(QWidget * a_widget) = 0; ///<pure virtual method. Must de reimplement it inherited classes
     virtual QString screenName() = 0;
 
-    AnimationChangingWidget *m_wgtChangingScreen;     ///< Pointer to ChangingWidget controll
+    AnimationChangingWidget *m_wgtChangingScreen = nullptr;     ///< Pointer to ChangingWidget controll
 
 private:
     QMap<QString, AdaptiveScreen*> m_screens;          ///< Map with all screens that can be activated