diff --git a/GUI/coregui/mainwindow/mainwindow.cpp b/GUI/coregui/mainwindow/mainwindow.cpp
index 73d04f2470a5bd8d21960ebfba6e1328b4b87c45..c3b5dc709bdc3fead147bc07714d75eed3fbfe5a 100644
--- a/GUI/coregui/mainwindow/mainwindow.cpp
+++ b/GUI/coregui/mainwindow/mainwindow.cpp
@@ -95,7 +95,7 @@ MainWindow::MainWindow(QWidget *parent)
 //    QCoreApplication::setApplicationVersion(QLatin1String(Constants::APPLICATION_VERSION));
 //    QCoreApplication::setOrganizationName(QLatin1String(Constants::APPLICATION_NAME));
 
-    initModels();
+    createModels();
 
     if (!Utils::HostOsInfo::isMacHost())
         QApplication::setWindowIcon(QIcon(":/images/BornAgain.ico"));
@@ -241,66 +241,80 @@ void MainWindow::closeEvent(QCloseEvent *event)
     }
 }
 
-void MainWindow::initModels()
+//! creates and initializes models
+void MainWindow::createModels()
 {
-    initMaterialModel(); // should be first
+    createMaterialModel(); // should be first
 
-    initSampleModel();
+    createSampleModel();
 
-    initJobModel();
+    createJobModel();
 
-    initInstrumentModel();
+    createInstrumentModel();
 
-    //initFitModel();
+    //createFitModel();
+
+    resetModels();
 }
 
-void MainWindow::initMaterialModel()
+void MainWindow::createMaterialModel()
 {
     delete m_materialModel;
-
     m_materialModel = new MaterialModel(this);
-    m_materialModel->addMaterial("Default", 1e-3, 1e-5);
-    m_materialModel->addMaterial("Air", 0.0, 0.0);
-    m_materialModel->addMaterial("Particle", 6e-4, 2e-8);
-    m_materialModel->addMaterial("Substrate", 6e-6, 2e-8);
-
-    m_materialEditor = new MaterialEditor(m_materialModel);
+//    m_materialModel->addMaterial("Default", 1e-3, 1e-5);
+//    m_materialModel->addMaterial("Air", 0.0, 0.0);
+//    m_materialModel->addMaterial("Particle", 6e-4, 2e-8);
+//    m_materialModel->addMaterial("Substrate", 6e-6, 2e-8);
+//    m_materialEditor = new MaterialEditor(m_materialModel);
 }
 
-void MainWindow::initSampleModel()
+void MainWindow::createSampleModel()
 {
     Q_ASSERT(m_materialModel);
-
     delete m_sampleModel;
     m_sampleModel = new SampleModel(this);
-
-    connect(m_materialModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), m_sampleModel, SLOT(onMaterialModelChanged(QModelIndex,QModelIndex)));
-
-//    ParameterizedItem *multilayer = m_sampleModel->insertNewItem(Constants::MultiLayerType);
-//    ParameterizedItem *layer0 = m_sampleModel->insertNewItem(Constants::LayerType, m_sampleModel->indexOfItem(multilayer));
-//    layer0->setItemName("layer0");
-//    ParameterizedItem *layer1 = m_sampleModel->insertNewItem(Constants::LayerType, m_sampleModel->indexOfItem(multilayer));
-//    layer1->setItemName("layer1");
+    connect(m_materialModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+            m_sampleModel, SLOT(onMaterialModelChanged(QModelIndex,QModelIndex)));
 }
 
-void MainWindow::initJobModel()
+void MainWindow::createJobModel()
 {
     delete m_jobModel;
     m_jobModel = new JobModel(this);
 }
 
-void MainWindow::initInstrumentModel()
+void MainWindow::createInstrumentModel()
 {
     delete m_instrumentModel;
     m_instrumentModel = new InstrumentModel(this);
     m_instrumentModel->setIconProvider(new IconProvider());
 }
 
-void MainWindow::initFitModel()
+void MainWindow::createFitModel()
 {
     m_fitProxyModel = new FitProxyModel;
 }
 
+//! reset all models to initial state
+void MainWindow::resetModels()
+{
+    m_materialModel->clear();
+    m_materialModel->addMaterial("Default", 1e-3, 1e-5);
+    m_materialModel->addMaterial("Air", 0.0, 0.0);
+    m_materialModel->addMaterial("Particle", 6e-4, 2e-8);
+    m_materialModel->addMaterial("Substrate", 6e-6, 2e-8);
+
+    m_sampleModel->clear();
+
+    m_jobModel->clear();
+
+    m_instrumentModel->clear();
+    ParameterizedItem *instrument = m_instrumentModel->insertNewItem(Constants::InstrumentType);
+    instrument->setItemName("Default GISAS");
+    m_instrumentModel->insertNewItem(Constants::DetectorType, m_instrumentModel->indexOfItem(instrument));
+    m_instrumentModel->insertNewItem(Constants::BeamType, m_instrumentModel->indexOfItem(instrument));
+}
+
 void MainWindow::testGUIObjectBuilder()
 {
     SampleBuilderFactory factory;
diff --git a/GUI/coregui/mainwindow/mainwindow.h b/GUI/coregui/mainwindow/mainwindow.h
index 26aafb9d8c7688fe4de8d69412fc4b02d839dfd3..35898d2c2bb6c3bc68691424aad08980812d2c1d 100644
--- a/GUI/coregui/mainwindow/mainwindow.h
+++ b/GUI/coregui/mainwindow/mainwindow.h
@@ -75,6 +75,7 @@ public slots:
     void writeSettings();
     void onRunSimulationShortcut();
     void onAboutApplication();
+    void resetModels();
 
 protected:
     virtual void closeEvent(QCloseEvent *event);
@@ -104,16 +105,12 @@ private:
     ToolTipDataBase *m_toolTipDataBase;
     FitProxyModel *m_fitProxyModel;
 
-    void initModels();
-    void initMaterialModel();
-    void initSampleModel();
-    void initJobModel();
-    void initInstrumentModel();
-    void initFitModel();
-
-    void updateSimModel();
-    void updateSamples();
-    void updateInstruments();
+    void createModels();
+    void createMaterialModel();
+    void createSampleModel();
+    void createJobModel();
+    void createInstrumentModel();
+    void createFitModel();
 
     void testGUIObjectBuilder();
 };
diff --git a/GUI/coregui/mainwindow/projectdocument.cpp b/GUI/coregui/mainwindow/projectdocument.cpp
index f62134e8134453279af855341f8b38144eeb1565..c2f36df9407b0c1f6d3193d123633caff2d741be 100644
--- a/GUI/coregui/mainwindow/projectdocument.cpp
+++ b/GUI/coregui/mainwindow/projectdocument.cpp
@@ -158,23 +158,31 @@ bool ProjectDocument::save()
 }
 
 
-bool ProjectDocument::load()
+bool ProjectDocument::load(const QString &project_file_name)
 {
-    //qDebug() << "ProjectDocument::load() -> " << getProjectFileName();
+    bool success_read(false);
+    m_error_message.clear();
+    setProjectFileName(project_file_name);
 
     QFile file(getProjectFileName());
     if (!file.open(QFile::ReadOnly | QFile::Text)) {
-        //qDebug() << "ProjectDocument::openExistingDocument -> Error. Can't open file" << getProjectFileName();
-        return 0;
+        m_error_message = QString("Can't open '%1'. Wrong permissions or binary file.")
+                .arg(project_file_name);
+        return false;
     }
 
-    //ProjectDocument *result = new ProjectDocument(info.path(), info.baseName());
-
-    bool success_read = readFrom(&file);
-    file.close();
-
-    // loading non-xml data
-    loadOutputData();
+    try{
+        // loading project file
+        success_read = readFrom(&file);
+        file.close();
+
+        // loading accompanying non-xml data
+        loadOutputData();
+    } catch(const std::exception &ex) {
+        m_error_message = QString("Exception was thrown with the error message '%1'")
+                .arg(QString(ex.what()));
+        success_read = false;
+    }
 
     return success_read;
 }
@@ -221,8 +229,10 @@ bool ProjectDocument::readFrom(QIODevice *device)
         }
     }
 
-    if (reader.hasError())
-        throw GUIHelpers::Error(reader.errorString());
+    if (reader.hasError()) {
+        m_error_message = QString("File parse error with error message '%1").arg(reader.errorString());
+        return false;
+    }
 
     connect(m_materialModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(onDataChanged(QModelIndex, QModelIndex)) );
     connect(m_instrumentModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(onDataChanged(QModelIndex, QModelIndex)) );
diff --git a/GUI/coregui/mainwindow/projectdocument.h b/GUI/coregui/mainwindow/projectdocument.h
index 4862f5a07d91412597f6befd7c3117c413cab871..3d091b35bbed1227c03d8f52d7ab86ac1b6cb87f 100644
--- a/GUI/coregui/mainwindow/projectdocument.h
+++ b/GUI/coregui/mainwindow/projectdocument.h
@@ -53,7 +53,7 @@ public:
     ProjectDocument(const QString &path, const QString &name);
 
     bool save();
-    bool load();
+    bool load(const QString &project_file_name);
 
     QString getProjectPath() const { return m_project_path; }
     QString getProjectName() const { return m_project_name; }
@@ -73,6 +73,8 @@ public:
 
     bool hasValidNameAndPath();
 
+    QString getErrorMessage() const { return m_error_message; }
+
 signals:
     void modified();
 
@@ -94,6 +96,7 @@ private:
     SampleModel *m_sampleModel;
     JobModel *m_jobModel;
     bool m_modified;
+    QString m_error_message;
 };
 
 
diff --git a/GUI/coregui/mainwindow/projectmanager.cpp b/GUI/coregui/mainwindow/projectmanager.cpp
index c3e2a2fac82fbe5fc54291da87cdbc6fdaed14ef..50eeb84fad7afef833f72f06b242893805883196 100644
--- a/GUI/coregui/mainwindow/projectmanager.cpp
+++ b/GUI/coregui/mainwindow/projectmanager.cpp
@@ -193,17 +193,39 @@ void ProjectManager::openProject(QString fileName)
     qDebug() << "ProjectManager::openProject()" << fileName;
     if( !closeCurrentProject()) return;
 
+//    if(fileName.isEmpty()) {
+//        fileName = QFileDialog::getOpenFileName(m_mainWindow, tr("Open project file"),
+//                                                    getDefaultProjectPath(),
+//                                         tr("BornAgain project Files (*.pro)"));
+//    }
+
     if(fileName.isEmpty()) {
-        fileName = QFileDialog::getOpenFileName(m_mainWindow, tr("Open project file"),
-                                                    getDefaultProjectPath(),
-                                         tr("BornAgain project Files (*.pro)"));
+        QMessageBox::warning(m_mainWindow, tr("Error while opening project file"),
+                             tr("File name is empty."));
+        return;
+    }
+
+    QFile fin(fileName);
+    if(!fin.exists()) {
+        QMessageBox::warning(m_mainWindow, tr("Error while opening project file"),
+                             QString("File '%1' doesn't exist").arg(fileName));
+        return;
     }
 
     if(!fileName.isEmpty()) {
         createNewProject();
-        m_project_document->setProjectFileName(fileName);
-        m_project_document->load();
-        emit modified();
+        bool success_read = m_project_document->load(fileName);
+        if(success_read) {
+            emit modified();
+        } else {
+            QMessageBox::warning(m_mainWindow, tr("Error while opening project file"),
+                                 QString("Can't load the project '%1' \n\n%2").arg(fileName).arg(m_project_document->getErrorMessage()));
+            delete m_project_document;
+            m_project_document = 0;
+            m_mainWindow->resetModels();
+            createNewProject();
+            return;
+        }
     }
 }