SdiWindow::iSdiWindow * win = evafQueryInterface<SdiWindow::iSdiWindow>("iSdiWindow");
     EVAF_TEST_X(win, "No iSdiWindow interface");
 
+    QWidget * masterWidget = new QWidget;
+    win->addWidget(masterWidget);
+
     QVBoxLayout * v = new QVBoxLayout;
-    win->widget()->setLayout(v);
+    masterWidget->setLayout(v);
 
     QGridLayout * g = new QGridLayout;
     v->addLayout(g);
     }
     connect(wName, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));
     g->addWidget(wName, 1, 1, 1, 2);
-    win->widget()->setFocusProxy(wName);
+    masterWidget->setFocusProxy(wName);
 
     l = new QLabel(tr("&Length of the password:", VER_MODULE_NAME_STR));
     l->setAlignment(Qt::AlignRight);
     connect(wCopy, SIGNAL(clicked()), this, SLOT(copyClicked()));
     h->addWidget(wCopy);
 
-    QAction * a = new QAction(win->widget());
+    QAction * a = new QAction(masterWidget);
     a->setShortcut(Qt::Key_Return);
     connect(a, SIGNAL(triggered()), this, SLOT(generateClicked()));
-    win->widget()->addAction(a);
+    masterWidget->addAction(a);
 
-    a = new QAction(win->widget());
+    a = new QAction(masterWidget);
     a->setShortcut(Qt::Key_Escape);
     connect(a, SIGNAL(triggered()), qApp, SLOT(quit()));
-    win->widget()->addAction(a);
+    masterWidget->addAction(a);
 
     mReady = true;
 
 
 /**
  * Module/library version number in the form major,minor,release,build
  */
-#define VER_FILE_VERSION                0,1,2,3
+#define VER_FILE_VERSION                0,1,3,4
 
 /**
  * Module/library version number in the string format (shall end with \0)
  */
-#define VER_FILE_VERSION_STR            "0.1.2.3\0"
+#define VER_FILE_VERSION_STR            "0.1.3.4\0"
 
 /**
  * Module/library name (shall end with \0)
 
 #include <QObject>
 #include <QString>
 
+class QWidget;
+class QLayout;
+
 namespace eVaf {
 namespace SdiWindow {
 
  * Main window interface for eVaf applications implementing the Single Document Interface.
  *
  * The iSdiWindow interface provides access to the SDI main window. The SDI main window is
- * an empty window that the application needs to fill with widgets.
+ * an empty window that the application can fill with widgets.
  */
 class SDIWINDOW_EXPORT iSdiWindow : public QObject
 {
     static iSdiWindow * instance();
 
     /**
-     * Returns the main window widget
-     * @return The main window widget
+     * Adds the widget to the end of the main window layout
+     * @param widget The widget
+     *
+     * This function adds the widget to the end of the main window layout.
+     */
+    virtual void addWidget(QWidget * widget) = 0;
+
+    /**
+     * Adds the layout to the end of the main window layout
+     * @param layout The layout
      *
-     * This function provides access to the main window widget. The main window is an empty QWidget and
-     * needs to be filled with additional widgets in order to provide some functionality.
+     * This function adds the new layout to the end of the main window layout.
      */
-    virtual QWidget * widget() const = 0;
+    virtual void addLayout(QLayout * layout) = 0;
 
 };
 
 
     // Apply the size specified in a) properties; or b) on the command line
     setWindowSize();
 
+    // Create the default layout
+    mLayout = new QVBoxLayout;
+    setLayout(mLayout);
+
     EVAF_INFO("%s created", qPrintable(objectName()));
 }
 
 {
     close();
 
+    // Delete all the items added to the main window
+    while (mItemsAdded.count() > 0)
+        delete mItemsAdded.takeAt(0);
+
     EVAF_INFO("%s finalized", qPrintable(objectName()));
 }
 
+void MainWindow::addWidget(QWidget * widget)
+{
+    mLayout->addWidget(widget);
+    mItemsAdded.append(widget);
+}
+
+void MainWindow::addLayout(QLayout * layout)
+{
+    mLayout->addLayout(layout);
+    mItemsAdded.append(layout);
+}
+
 void MainWindow::saveSettings()
 {
     static int ver[4] = {VER_FILE_VERSION};
 
 #include <QObject>
 #include <QString>
 #include <QWidget>
+#include <QList>
+
+class QVBoxLayout;
 
 namespace eVaf {
 namespace SdiWindow {
 
     void done();
 
+    void addWidget(QWidget * widget);
+
+    void addLayout(QLayout * layout);
+
 
 private: // Methods
 
     void saveSettings();
 
     void restoreSettings();
+
+
+private: // Members
+
+    /// The layout of the window
+    QVBoxLayout * mLayout;
+
+    /// Widgets and layouts added to the main window
+    QList<QObject *> mItemsAdded;
+
 };
 
 /**
 
     bool isReady() const { return mReady; }
 
-    virtual QWidget * widget() const { return wWindow; }
+    virtual void addWidget(QWidget * widget) { wWindow->addWidget(widget); }
+
+    virtual void addLayout(QLayout * layout) { wWindow->addLayout(layout); }
 
 
 private: // Members
 
 /**
  * Module/library version number in the form major,minor,release,build
  */
-#define VER_FILE_VERSION                0,1,1,1
+#define VER_FILE_VERSION                0,2,1,2
 
 /**
  * Module/library version number in the string format (shall end with \0)
  */
-#define VER_FILE_VERSION_STR            "0.1.1.1\0"
+#define VER_FILE_VERSION_STR            "0.2.1.2\0"
 
 /**
  * Module/library name (shall end with \0)