diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/Editor.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/Editor.cpp
index 2b515ac..644595d 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/Editor.cpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/Editor.cpp
@@ -18,15 +18,13 @@
 #include "qt_classes.hpp"
 
 
-void Editor::webViewloadFinished(bool ok) {}
 
-Editor::Editor(QWidget *parent, Qt::WindowFlags f) {}
-Editor::~Editor() {}
+Editor::Editor() {
+    webView.setParent(this);
+
+    layout.setContentsMargins(0, 0, 0, 0);
+    layout.addWidget(&webView);
+    setLayout(&layout);
+}
 
 
-void Editor::mouseDoubleClickEvent(QMouseEvent *event) {}
-void Editor::mouseMoveEvent(QMouseEvent *event) {}
-void Editor::mousePressEvent(QMouseEvent *event) {}
-void Editor::mouseReleaseEvent(QMouseEvent *event) {}
-void Editor::resizeEvent(QResizeEvent *event) {}
-bool Editor::eventFilter(QObject *obj, QEvent *event) { return true; }
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/MainWindow.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/MainWindow.cpp
index f31cb0c..3456152 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/MainWindow.cpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/MainWindow.cpp
@@ -18,7 +18,7 @@
 #include "qt_classes.hpp"
 
 
-MainWindow::MainWindow() {
+MainWindow::MainWindow() : QWidget(0) {
     toolbar.setParent(this);
     editor.setParent(this);
 
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_qt_classes.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_qt_classes.cpp
index be69779..924eab3 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_qt_classes.cpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/moc_qt_classes.cpp
@@ -19,8 +19,8 @@
 
 QT_BEGIN_MOC_NAMESPACE
 struct qt_meta_stringdata_Editor_t {
-    QByteArrayData data[4];
-    char stringdata0[31];
+    QByteArrayData data[1];
+    char stringdata0[7];
 };
 #define QT_MOC_LITERAL(idx, ofs, len) \
     Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
@@ -29,13 +29,10 @@
     )
 static const qt_meta_stringdata_Editor_t qt_meta_stringdata_Editor = {
     {
-QT_MOC_LITERAL(0, 0, 6), // "Editor"
-QT_MOC_LITERAL(1, 7, 19), // "webViewloadFinished"
-QT_MOC_LITERAL(2, 27, 0), // ""
-QT_MOC_LITERAL(3, 28, 2) // "ok"
+QT_MOC_LITERAL(0, 0, 6) // "Editor"
 
     },
-    "Editor\0webViewloadFinished\0\0ok"
+    "Editor"
 };
 #undef QT_MOC_LITERAL
 
@@ -45,32 +42,22 @@
        7,       // revision
        0,       // classname
        0,    0, // classinfo
-       1,   14, // methods
+       0,    0, // methods
        0,    0, // properties
        0,    0, // enums/sets
        0,    0, // constructors
        0,       // flags
        0,       // signalCount
 
- // slots: name, argc, parameters, tag, flags
-       1,    1,   19,    2, 0x0a /* Public */,
-
- // slots: parameters
-    QMetaType::Void, QMetaType::Bool,    3,
-
        0        // eod
 };
 
 void Editor::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
 {
-    if (_c == QMetaObject::InvokeMetaMethod) {
-        Editor *_t = static_cast<Editor *>(_o);
-        Q_UNUSED(_t)
-        switch (_id) {
-        case 0: _t->webViewloadFinished((*reinterpret_cast< bool(*)>(_a[1]))); break;
-        default: ;
-        }
-    }
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
 }
 
 const QMetaObject Editor::staticMetaObject = {
@@ -97,15 +84,6 @@
     _id = QWidget::qt_metacall(_c, _id, _a);
     if (_id < 0)
         return _id;
-    if (_c == QMetaObject::InvokeMetaMethod) {
-        if (_id < 1)
-            qt_static_metacall(this, _c, _id, _a);
-        _id -= 1;
-    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
-        if (_id < 1)
-            *reinterpret_cast<int*>(_a[0]) = -1;
-        _id -= 1;
-    }
     return _id;
 }
 struct qt_meta_stringdata_Toolbar_t {
@@ -245,8 +223,8 @@
     return _id;
 }
 struct qt_meta_stringdata_qt_toolkit_t {
-    QByteArrayData data[5];
-    char stringdata0[29];
+    QByteArrayData data[7];
+    char stringdata0[52];
 };
 #define QT_MOC_LITERAL(idx, ofs, len) \
     Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
@@ -259,10 +237,13 @@
 QT_MOC_LITERAL(1, 11, 4), // "save"
 QT_MOC_LITERAL(2, 16, 0), // ""
 QT_MOC_LITERAL(3, 17, 6), // "saveAs"
-QT_MOC_LITERAL(4, 24, 4) // "load"
+QT_MOC_LITERAL(4, 24, 4), // "load"
+QT_MOC_LITERAL(5, 29, 19), // "webViewloadFinished"
+QT_MOC_LITERAL(6, 49, 2) // "ok"
 
     },
-    "qt_toolkit\0save\0\0saveAs\0load"
+    "qt_toolkit\0save\0\0saveAs\0load\0"
+    "webViewloadFinished\0ok"
 };
 #undef QT_MOC_LITERAL
 
@@ -272,7 +253,7 @@
        7,       // revision
        0,       // classname
        0,    0, // classinfo
-       3,   14, // methods
+       4,   14, // methods
        0,    0, // properties
        0,    0, // enums/sets
        0,    0, // constructors
@@ -280,14 +261,16 @@
        0,       // signalCount
 
  // slots: name, argc, parameters, tag, flags
-       1,    0,   29,    2, 0x0a /* Public */,
-       3,    0,   30,    2, 0x0a /* Public */,
-       4,    0,   31,    2, 0x0a /* Public */,
+       1,    0,   34,    2, 0x0a /* Public */,
+       3,    0,   35,    2, 0x0a /* Public */,
+       4,    0,   36,    2, 0x0a /* Public */,
+       5,    1,   37,    2, 0x0a /* Public */,
 
  // slots: parameters
     QMetaType::Void,
     QMetaType::Void,
     QMetaType::Void,
+    QMetaType::Void, QMetaType::Bool,    6,
 
        0        // eod
 };
@@ -301,10 +284,10 @@
         case 0: _t->save(); break;
         case 1: _t->saveAs(); break;
         case 2: _t->load(); break;
+        case 3: _t->webViewloadFinished((*reinterpret_cast< bool(*)>(_a[1]))); break;
         default: ;
         }
     }
-    Q_UNUSED(_a);
 }
 
 const QMetaObject qt_toolkit::staticMetaObject = {
@@ -334,13 +317,13 @@
     if (_id < 0)
         return _id;
     if (_c == QMetaObject::InvokeMetaMethod) {
-        if (_id < 3)
+        if (_id < 4)
             qt_static_metacall(this, _c, _id, _a);
-        _id -= 3;
+        _id -= 4;
     } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
-        if (_id < 3)
+        if (_id < 4)
             *reinterpret_cast<int*>(_a[0]) = -1;
-        _id -= 3;
+        _id -= 4;
     }
     return _id;
 }
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_classes.hpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_classes.hpp
index 3d51aa0..238f7f0 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_classes.hpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_classes.hpp
@@ -19,6 +19,7 @@
 #include <QtWidgets/QWidget>
 #include <QtWidgets/QBoxLayout>
 #include <QtWidgets/QPushbutton>
+#include <QtWebkitWidgets/QWebView>
 
 
 
@@ -47,30 +48,17 @@
 
 class Editor : public QWidget
 {
+    // Editor is the html viewer / editor
     Q_OBJECT
 public:
-    Editor(QWidget *parent = 0, Qt::WindowFlags f = 0);
-    virtual ~Editor();
-    QWebView *webView() const { return _webView; }
-//    JSInterface *js() const { return _js; }
+    // Constructor/Destructor
+    Editor();
+    ~Editor() {};
 
-    public slots:
-    void webViewloadFinished(bool ok);
 
-protected:
-    virtual void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
-    virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
-    virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
-    virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
-    virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
-    virtual bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
-
-private:
-    QWebView *_webView;
-//    EditorJSCallbacks *_callbacks;
-//    EditorJSEvaluator *_evaluator;
-//    JSInterface *_js;
-    bool _selecting;
+    // Graphical elements
+    QWebView    webView;
+    QVBoxLayout layout;
 };
 
 
@@ -86,7 +74,10 @@
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 class Toolbar : public QWidget
 {
+    /* toolbar contains all buttons for the editor*/
     Q_OBJECT
+
+
 public:
     // Constructor/Destructor
     Toolbar();
@@ -111,6 +102,8 @@
 {
     /* Main window, this adds all other widgets inside */
     Q_OBJECT
+
+
 public:
     // Constructor/Destructor
     MainWindow();
@@ -147,16 +140,15 @@
     void run();
     bool callJavascript(const char *function);
 
+    static QApplication *app;
+    MainWindow           window;
+    toolkit_callback    *callback;
+    int                  debugLevel;
+
 
 public slots:
     void save();
     void saveAs();
     void load();
-
- 
-private:
-    static QApplication *app;
-    MainWindow           window;
-    toolkit_callback    *callback;
-    int                  debugLevel;
+    void webViewloadFinished(bool ok);
 };
diff --git a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp
index c3a2ea4..dc84019 100644
--- a/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp
+++ b/experiments/editorFramework/src/Toolkit_Layer_1/qt/qt_toolkit.cpp
@@ -38,25 +38,26 @@
 
 // Constructor/Destructor
 qt_toolkit::qt_toolkit(toolkit_callback *setCallback, int setDebugLevel) :
+    window(),
     callback(setCallback),
     debugLevel(setDebugLevel)
 {
-    // Application is only added once 
-    if (!app) {
-        int    argc = 0;
-        char **argv = NULL;
-        app         = new QApplication(argc, argv);
-    }
-
     // get notification, when user click on button
-    QObject::connect((const QObject *)&window.toolbar.saveButton, SIGNAL(clicked()), this, SLOT(saveButton()));
-    QObject::connect((const QObject *)&window.toolbar.saveAsButton, SIGNAL(clicked()), this, SLOT(saveAsButton()));
-    QObject::connect((const QObject *)&window.toolbar.loadButton, SIGNAL(clicked()), this, SLOT(saveAsButton()));
+    QObject::connect((const QObject *)&window.toolbar.saveButton,   SIGNAL(clicked()),          this, SLOT(saveButton()));
+    QObject::connect((const QObject *)&window.toolbar.saveAsButton, SIGNAL(clicked()),          this, SLOT(saveAsButton()));
+    QObject::connect((const QObject *)&window.toolbar.loadButton,   SIGNAL(clicked()),          this, SLOT(saveAsButton()));
+    QObject::connect((const QObject *)&window.editor.webView,       SIGNAL(loadFinished(bool)), this, SLOT(webViewloadFinished(bool)));
 }
 
 
 // Instanciate the derived class.
 toolkit * toolkit::createInstance(toolkit_callback *tk, int setDebugLevel) {
+    // Application is only added once 
+    if (!qt_toolkit::app) {
+        int    argc = 0;
+        char **argv = NULL;
+        qt_toolkit::app = new QApplication(argc, argv);
+    }
     return (toolkit *)new qt_toolkit(tk, setDebugLevel);
 }
 
@@ -92,4 +93,9 @@
 
 // Notify load was requested
 void qt_toolkit::load() {
+}
+
+
+// Notify load was done
+void qt_toolkit::webViewloadFinished(bool ok) {
 }
\ No newline at end of file
