diff --git a/CgEvents/CgWheelEvent.cpp b/CgEvents/CgWheelEvent.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0826a4b635407e59a74cde3861ea03a6aada13ef
--- /dev/null
+++ b/CgEvents/CgWheelEvent.cpp
@@ -0,0 +1,35 @@
+#include "CgWheelEvent.h"
+
+
+CgWheelEvent::CgWheelEvent(Cg::EventType type, float numDegrees)
+{
+    m_type=type;
+    m_numDegrees = numDegrees;
+}
+
+CgWheelEvent::~CgWheelEvent()
+{
+
+}
+
+Cg::EventType  CgWheelEvent::getType()
+{
+    return m_type;
+}
+
+CgBaseEvent* CgWheelEvent::clone()
+{
+    return new CgWheelEvent(m_type,m_numDegrees);
+}
+
+std::ostream& operator<<(std::ostream& os,const CgWheelEvent& e)
+{
+    os << "Wheel-Event of Type: "<< e.m_type <<", Amount: " << e.numDegrees();
+    return os;
+}
+
+float CgWheelEvent::numDegrees() const
+{
+  return m_numDegrees;
+}
+
diff --git a/CgEvents/CgWheelEvent.h b/CgEvents/CgWheelEvent.h
new file mode 100644
index 0000000000000000000000000000000000000000..5b5e4d088e87c368e2507f02e7a18ebe004ffd0c
--- /dev/null
+++ b/CgEvents/CgWheelEvent.h
@@ -0,0 +1,29 @@
+#ifndef CGWHEELEVENT
+#define CGWHEELEVENT
+
+#include "../CgBase/CgBaseEvent.h"
+#include "glm/glm.hpp"
+#include <iostream>
+
+class CgWheelEvent: public CgBaseEvent
+{
+public:
+
+    CgWheelEvent(Cg::EventType type, float numDegrees);
+    ~CgWheelEvent();
+
+    Cg::EventType  getType();
+    CgBaseEvent* clone();
+
+    float numDegrees() const;
+
+    friend std::ostream& operator <<(std::ostream& os, const CgWheelEvent& e);
+
+
+private:
+
+    Cg::EventType m_type;
+    float m_numDegrees;
+};
+
+#endif // CGWHEELEVENT
\ No newline at end of file
diff --git a/CgQtViewer/CgQtGui.cpp b/CgQtViewer/CgQtGui.cpp
index ee9858faf8af6d3e193e033ff83ae81ec5c370d1..25ec6b15db992bae9bf91ae390f1fb6bf49eac7a 100644
--- a/CgQtViewer/CgQtGui.cpp
+++ b/CgQtViewer/CgQtGui.cpp
@@ -12,6 +12,7 @@
 #include "../CgEvents/CgTrackballEvent.h"
 #include "../CgEvents/CgSplatEvent.h"
 #include "../CgEvents/CgPickRayEvent.h"
+#include "../CgEvents/CgWheelEvent.h"
 
 #include <QSlider>
 #include <QVBoxLayout>
@@ -355,6 +356,12 @@ void CgQtGui::mouseEvent(QMouseEvent* event)
 
 }
 
+void CgQtGui::wheelEvent(QWheelEvent* event)
+{
+    CgBaseEvent* e = new CgWheelEvent(Cg::CgMouseWheel, event->angleDelta().y() / 8.0);
+    notifyObserver(e);
+}
+
 void CgQtGui::keyPressEvent(QKeyEvent *event)
 {
    CgBaseEvent* e= new CgKeyEvent(Cg::CgKeyPressEvent,(Cg::Key)event->key(),(Cg::KeyboardModifiers)event->nativeModifiers(),event->text().toStdString());
diff --git a/CgQtViewer/CgQtGui.h b/CgQtViewer/CgQtGui.h
index ba1dd68d65883ca150db9236542d32c891b25fd1..8a51e74fcb67e3dfdc07f6eb2643233e53bc0ef7 100644
--- a/CgQtViewer/CgQtGui.h
+++ b/CgQtViewer/CgQtGui.h
@@ -113,6 +113,7 @@ private slots:
 
     /* slots to catch events directly from renderer */
     void mouseEvent(QMouseEvent* event);
+    void wheelEvent(QWheelEvent* event);
     void viewportChanged(int,int);
     void slotTrackballChanged();
 
diff --git a/CgSceneGraph/CgSceneControl.cpp b/CgSceneGraph/CgSceneControl.cpp
index 60d9168b5566d01203f4b4ff5ec37272704f017a..6eaa3d821f0335ea3ba72e808a023d6ce4e28da1 100644
--- a/CgSceneGraph/CgSceneControl.cpp
+++ b/CgSceneGraph/CgSceneControl.cpp
@@ -3,6 +3,7 @@
 #include "CgSceneControl.h"
 #include "CgBase/CgEnums.h"
 #include "CgEvents/CgMouseEvent.h"
+#include "CgEvents/CgWheelEvent.h"
 #include "CgEvents/CgKeyEvent.h"
 #include "CgEvents/CgWindowResizeEvent.h"
 #include "CgEvents/CgLoadMeshEvent.h"
@@ -168,6 +169,17 @@ void CgSceneControl::handleEvent(CgBaseEvent* e)
         CgMouseEvent* ev = (CgMouseEvent*)e;
         if(ev->button()==Cg::RightButton)
             calculatePickRay((double)ev->x(),(double)ev->y());
+    } 
+
+    if(e->getType() & Cg::CgMouseWheel) 
+    {
+      CgWheelEvent* ev = (CgWheelEvent*)e;
+      //scaling of scene, i.e. of the one single object
+      float scaleFactor = 1.0f + 0.01f * ev->numDegrees();
+      glm::mat4 scalemat = glm::mat4(1.);
+      scalemat = glm::scale(scalemat, glm::vec3(scaleFactor,scaleFactor,scaleFactor));
+      m_current_transformation = m_current_transformation * scalemat;
+      m_renderer->redraw();
     }
 
     if(e->getType() & Cg::CgTrackballEvent)
@@ -307,8 +319,6 @@ void CgSceneControl::handleEvent(CgBaseEvent* e)
 
     // delete event
     delete e;
-
-
 }
 
 
diff --git a/ExerciseVC.pro b/ExerciseVC.pro
index df9ff8dc94c921d09e43913e383dfd06a4c0d981..4311c9226db6d49356decd78597ae982d8aefe4c 100644
--- a/ExerciseVC.pro
+++ b/ExerciseVC.pro
@@ -14,6 +14,7 @@ SOURCES += main.cpp \
     CgQtViewer/CgQtGui.cpp \
     CgBase/CgObservable.cpp \
     CgEvents/CgMouseEvent.cpp \
+    CgEvents/CgWheelEvent.cpp \
     CgQtViewer/CgQtMainApplication.cpp \
     CgSceneGraph/CgPointCloud.cpp \
     CgSceneGraph/CgPolyLine.cpp \
@@ -42,6 +43,7 @@ HEADERS += \
     CgBase/CgBaseEvent.h \
     CgBase/CgEnums.h \
     CgEvents/CgMouseEvent.h \
+    CgEvents/CgWheelEvent.h \
     CgQtViewer/CgQtMainApplication.h \
     CgSceneGraph/CgPointCloud.h \
     CgSceneGraph/CgPolyLine.h \