diff --git a/QtMeshViewer/Header/GeometryEngine.h b/QtMeshViewer/Header/GeometryEngine.h
index 235ae9fd4555ee065ebed3ad9f9a3c4808fcdb33..b2556b296a0ce65db72974c3ce277d9d137a8891 100644
--- a/QtMeshViewer/Header/GeometryEngine.h
+++ b/QtMeshViewer/Header/GeometryEngine.h
@@ -37,16 +37,11 @@ private:
 
 public:
 	void drawGeometry(QOpenGLShaderProgram *program, bool wireframe);
-
-// slots
-public slots:
 	void loadFile(QString filePath);
-	
 
 // signals
 signals:
 	void requestResetView();
 	void requestUpdate();
-	void sendFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle);
 };
 
diff --git a/QtMeshViewer/Header/OglViewerWidget.h b/QtMeshViewer/Header/OglViewerWidget.h
index 4050f7ce0f027e709883dfe8dd75f653e0b98d44..799bbc12accaa005f4661a5e8f5f29cd5792d297 100644
--- a/QtMeshViewer/Header/OglViewerWidget.h
+++ b/QtMeshViewer/Header/OglViewerWidget.h
@@ -58,7 +58,6 @@ private:
 // functions
 private:
 	void initShaders();
-	void setConnections();
 	void resetView();
 	void updateLightPosition();
 
@@ -89,8 +88,5 @@ public slots:
 	void setAttFac(double value);
 	void setAmbCoef(double value);
 
-// signals
-signals:
-	void loadFile(QString);
 };
 
diff --git a/QtMeshViewer/Header/OutputDevice.h b/QtMeshViewer/Header/OutputDevice.h
index 3f4ee63f470e313772f5a53b5eef5ea94b85fa4e..10bff7bc955d7f5f437c03cd9551dc2a240d109e 100644
--- a/QtMeshViewer/Header/OutputDevice.h
+++ b/QtMeshViewer/Header/OutputDevice.h
@@ -1,6 +1,8 @@
 #pragma once
 #include <QObject>
 
+struct Material;
+
 class OutputDevice : public QObject
 {
 	Q_OBJECT
@@ -20,8 +22,11 @@ public:
 	};
 
 	void print(QString message, int severity) { emit sendMessage(message, severity); };
+	void setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle) {
+		emit sendFileInfo(name, materials, vertices, triangle);
+	};
 
 signals:
 	void sendMessage(QString message, int severity);
-
+	void sendFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle);
 };
\ No newline at end of file
diff --git a/QtMeshViewer/Source/GeometryEngine.cpp b/QtMeshViewer/Source/GeometryEngine.cpp
index 002817e9f89a4e5c947249fac182ade9da94e080..b8c41f6171c6c66386a3d93646c0d21dc5921b4b 100644
--- a/QtMeshViewer/Source/GeometryEngine.cpp
+++ b/QtMeshViewer/Source/GeometryEngine.cpp
@@ -142,10 +142,6 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program, bool wireframe)
 	}
 }
 
-
-/////////////////////////////////////////////////////////////////////////
-// slots
-
 void GeometryEngine::loadFile(QString filePath)
 {
 	// cleanup old stuff and recreate buffers
@@ -215,7 +211,7 @@ void GeometryEngine::loadFile(QString filePath)
 
 		emit requestUpdate();
 		OutputDevice::getInstance()->print("done..", 0);
-		emit sendFileInfo(filePath.right(filePath.size() - filePath.lastIndexOf(QRegExp("/|\\\\")) - 1), m_materials, vertexData.size(), indexData.size() / 3);
+		OutputDevice::getInstance()->setFileInfo(filePath.right(filePath.size() - filePath.lastIndexOf(QRegExp("/|\\\\")) - 1), m_materials, vertexData.size(), indexData.size() / 3);
 	}
 	catch (std::invalid_argument e)
 	{
diff --git a/QtMeshViewer/Source/MainWindow.cpp b/QtMeshViewer/Source/MainWindow.cpp
index ffa2daa77860a701d695ecac6317410e7e34a186..05c12b679eff55ed25217b892f71daf54ffc63c4 100644
--- a/QtMeshViewer/Source/MainWindow.cpp
+++ b/QtMeshViewer/Source/MainWindow.cpp
@@ -31,6 +31,7 @@ MainWindow::MainWindow(QWidget *parent)
 	setWindowIcon(QIcon(":/images/icon.ico"));
 
 	connect(OutputDevice::getInstance(this), &OutputDevice::sendMessage, this, &MainWindow::printMessage);
+	connect(OutputDevice::getInstance(this), &OutputDevice::sendFileInfo, this, &MainWindow::setFileInfo);
 
 	// setup opengl things
 	QSurfaceFormat format;
diff --git a/QtMeshViewer/Source/OglViewerWidget.cpp b/QtMeshViewer/Source/OglViewerWidget.cpp
index 588066d713e3c337ddee148bd4f3f93aa45dd9ca..fbd971ff5cec0ac9f194c9914294d35d4e0b9dec 100644
--- a/QtMeshViewer/Source/OglViewerWidget.cpp
+++ b/QtMeshViewer/Source/OglViewerWidget.cpp
@@ -1,5 +1,6 @@
 #include "..\Header\OglViewerWidget.h"
 #include "..\Header\OutputDevice.h"
+#include "..\Header\MainWindow.h"
 #include <QMouseEvent>
 #include <QDropEvent>
 #include <QMimeData>
@@ -17,6 +18,7 @@ OglViewerWidget::OglViewerWidget(QWidget *parent)
 	setFocus();
 	setAcceptDrops(true);
 
+	// settings window
 	m_settings = new SettingsWindow(m_backgroundColorOff.toVector3D() * 255, m_backgroundColorOn.toVector3D() * 255, m_light.intensities * 255, true, m_light.ambientCoefficient, m_light.attenuationFactor, 1, this);
 
 	connect(m_settings, &SettingsWindow::updateBGColorOff, this, &OglViewerWidget::setBGColorOff);
@@ -60,15 +62,6 @@ void OglViewerWidget::initShaders()
 		close();
 }
 
-void OglViewerWidget::setConnections()
-{
-	connect(m_dataEngine, &GeometryEngine::requestResetView, this, &OglViewerWidget::resetView);
-	connect(parentWidget(), SIGNAL(loadFile(QString)), m_dataEngine, SLOT(loadFile(QString)));
-	connect(this, SIGNAL(loadFile(QString)), m_dataEngine, SLOT(loadFile(QString)));
-	connect(m_dataEngine, SIGNAL(requestUpdate()), this, SLOT(update()));
-	connect(m_dataEngine, SIGNAL(sendFileInfo(QString, QVector<Material>*, int, int)), parentWidget(), SLOT(setFileInfo(QString, QVector<Material>*, int, int)));
-}
-
 void OglViewerWidget::resetView()
 {
 	m_rotation = QQuaternion();
@@ -107,7 +100,14 @@ void OglViewerWidget::initializeGL()
 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
 	m_dataEngine = new GeometryEngine(this);
-	setConnections();
+	connect(m_dataEngine, &GeometryEngine::requestResetView, this, &OglViewerWidget::resetView);
+	connect(m_dataEngine, &GeometryEngine::requestUpdate, this, static_cast<void(OglViewerWidget::*)(void)>(&OglViewerWidget::update));
+
+	//TODO: better solution
+	MainWindow* parent = dynamic_cast<MainWindow*>(parentWidget());
+	if (parent != NULL)
+		connect(parent, &MainWindow::loadFile, [this](QString value) {m_dataEngine->loadFile(value); });
+
 }
 
 void OglViewerWidget::resizeGL(int w, int h)
@@ -327,7 +327,7 @@ void OglViewerWidget::dragEnterEvent(QDragEnterEvent *e)
 
 void OglViewerWidget::dropEvent(QDropEvent * e)
 {
-	emit loadFile(e->mimeData()->urls().first().toLocalFile());
+	m_dataEngine->loadFile(e->mimeData()->urls().first().toLocalFile());
 }