diff --git a/.vscode/launch.json b/.vscode/launch.json
index ecc3836c22ece4359ac0dde4cfb75739bdd6c26a..2294c9c7f7f220432acad562c1a05c607f9f6db0 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -9,7 +9,7 @@
             "type": "cppdbg",
             "request": "launch",
             "program": "${workspaceFolder}/build/bin/scigl_viewer",
-            "args": ["${workspaceFolder}/model/beckenkamm.dae"],
+            "args": ["${workspaceFolder}/model/monkey.blend"],
             "stopAtEntry": false,
             "cwd": "${workspaceFolder}",
             "environment": [],
diff --git a/conanfile.py b/conanfile.py
index b89961d576274d8de5dbd004e4114c2ca4fcb621..c2729bfb58ceb2788b4ba2c24e45a677e07890b4 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -3,7 +3,7 @@ from conans import ConanFile, CMake
 
 class SciglRenderConan(ConanFile):
     name = "scigl_render"
-    version = "0.3"
+    version = "0.4"
     license = "MIT"
     url = "https://git.rwth-aachen.de/robo_guide/scigl_render"
     description = ("Library to simplify rendering objects via OpenGL."
diff --git a/include/scigl_render/shader/simple.vs b/include/scigl_render/shader/simple.vs
index f060ce1c0688e0b1b6626390098de1f448938e84..2d9db8c4989e6f9a8b21c194b470f33ebb5ef36b 100644
--- a/include/scigl_render/shader/simple.vs
+++ b/include/scigl_render/shader/simple.vs
@@ -1,16 +1,20 @@
 R""(
 #version 330 core
 layout (location = 0) in vec3 position;
+
 uniform mat4 model_matrix;
 uniform mat4 view_matrix;
 uniform mat4 projection_matrix;
+
 out float depth;
+out vec3 world_position;
 
 // simple linear transformation into projection space
 void main()
 {
-  vec4 local_pos = vec4(position, 1.0);
-  vec4 view_pos  = view_matrix * model_matrix * local_pos;
+  vec4 local_position = vec4(position, 1.0);
+  world_position = (model_matrix * local_position).xyz;
+  vec4 view_pos  = view_matrix * vec4(world_position, 1.0);
   depth = view_pos.z;
   gl_Position = projection_matrix * view_pos;
 })""
\ No newline at end of file
diff --git a/include/scigl_render/shader/texture.fs b/include/scigl_render/shader/texture.fs
index 8f4f67fe6b266f663bc74bf1f7d713c15a9ceadf..235fd6e44ce585246c185e7f96eaaa93583c6803 100644
--- a/include/scigl_render/shader/texture.fs
+++ b/include/scigl_render/shader/texture.fs
@@ -32,15 +32,15 @@ void main()
   vec3 diffuse_color = material.diffuse + diffuse_texture_strength
     * texture(texture0, texture_coordinate).xyz;
   float diff = max(dot(normal, light_direction), 0.0);
-  vec3 diffuse = diff * diffuse_color;
+  vec3 diffuse = diff * diffuse_color * light_color;
   // specular
   vec3 view_direction = normalize(camera_position - world_position);
   vec3 reflection_direction = reflect(-light_direction, normal);
   float spec = pow(max(dot(view_direction, reflection_direction), 0.0), 
                    material.shininess);
-  vec3 specular = material.specular * spec;
+  vec3 specular = spec * material.specular * light_color;
   // combined
-  vec3 result = (ambient + diffuse + specular) * light_color;
+  vec3 result = ambient + diffuse + specular;
   fragment_color = vec4(result, 1.0);
 }
 )""
\ No newline at end of file
diff --git a/model/monkey.3ds b/model/monkey.3ds
index 58aac10ee46bf42f023ed84333e8e038f70767db..acce76c0737a4524ab9c02a0a140ce7e03f70883 100644
--- a/model/monkey.3ds
+++ b/model/monkey.3ds
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:3e3f7ba7b28a7ba92a680b8f02ac848e9a43ae98de088f6c6e468264d221a508
+oid sha256:fcd144e99a0cce6f39b1e7b2158aafea10e12138ef3dc6edacbdece069b184bb
 size 15959
diff --git a/model/monkey.blend b/model/monkey.blend
index 71e82c7f03b9268543333670a975c378b662fc04..dc1358469e425ef3d1dc1db4af8b84822a75a6c2 100644
--- a/model/monkey.blend
+++ b/model/monkey.blend
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:324ff7b630d6ed00bc1684991a39f44b3ee04b99da10beda39140de93b468dd4
-size 479060
+oid sha256:abdad4657db2421ec9966e81f9944a22824ea49afa5825ca1beee42ed6e8e34d
+size 499076
diff --git a/package.xml b/package.xml
index cbe6de2420c1f9bc1906e738798d48993a993250..1e3cb31b9027609ac4685f13b620915fba184c80 100644
--- a/package.xml
+++ b/package.xml
@@ -2,7 +2,7 @@
 <?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
 <package format="2">
   <name>scigl_render</name>
-  <version>0.3</version>
+  <version>0.4</version>
   <description>
   Library to simplify rendering objects via OpenGL. The intendet use case
   is scientific (e.g. probabalistic filtering). It is not supposed to be a 
diff --git a/src/example/scigl_viewer.cpp b/src/example/scigl_viewer.cpp
index 111cdf7f45bb1ae2390c0c4f2bb750ed660ba3f8..927c10d5a7c3ed71c4916855988f19b1cb22776f 100644
--- a/src/example/scigl_viewer.cpp
+++ b/src/example/scigl_viewer.cpp
@@ -67,7 +67,11 @@ int main(int argc, char *argv[])
   camera_intrinsics.c_y = 310;
   camera_intrinsics.f_x = 511;
   camera_intrinsics.f_y = 513;
-  camera_intrinsics.dist_coeffs[0] = 5;
+  camera_intrinsics.dist_coeffs[0] = 4.1925421198910247e-02;
+  camera_intrinsics.dist_coeffs[1] = -9.6463442423611379e-02;
+  camera_intrinsics.dist_coeffs[2] = -2.3391717576772839e-03;
+  camera_intrinsics.dist_coeffs[3] = 5.8792609967242386e-04;
+  camera_intrinsics.dist_coeffs[4] = 4.9171950039135250e-02;
   CvCamera camera(camera_intrinsics);
   // Test if Cartesian -> Quaternion works
   CartesianPose camera_pose = {glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)};
@@ -77,7 +81,7 @@ int main(int argc, char *argv[])
   model.pose.position = glm::vec3(0, 0, 0.5);
   model.pose.orientation.x = 0.707;
   model.pose.orientation.w = 0.707;
-  light.position = glm::vec3(0, 0, 0);
+  light.position = glm::vec3(0, -0.1, 0);
   light.color = glm::vec3(1, 1, 1);
 
   // main loop
diff --git a/src/scene/mesh.cpp b/src/scene/mesh.cpp
index a1f9f1a7bb94963f250260a93951b90e8d2083fc..8275996364f2c9b00d521460da691b595e0cc784 100644
--- a/src/scene/mesh.cpp
+++ b/src/scene/mesh.cpp
@@ -67,7 +67,7 @@ Mesh::Mesh(const aiMesh *mesh, const aiScene *scene)
       material.diffuse = convert_color(diffuse_color);
     }
     aiColor3D specular_color;
-    if (AI_SUCCESS == ai_material->Get(AI_MATKEY_COLOR_DIFFUSE, specular_color))
+    if (AI_SUCCESS == ai_material->Get(AI_MATKEY_COLOR_SPECULAR, specular_color))
     {
       material.specular = convert_color(specular_color);
     }