diff --git a/CMakeLists.txt b/CMakeLists.txt
index c9b85d00aa9aaa8bbcb31dff9ccab43227010809..3985d27f53ae9095beebc43cd69b7e199ab7bc26 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,5 +21,15 @@ list(APPEND lava_pack_shaders
         )
 set(lava_pack_shaders "${lava_pack_shaders}" CACHE INTERNAL "lava_pack_shaders")
 
+find_package(ZLIB REQUIRED)
+link_directories(${ZLIB_INCLUDE_DIRS})
+target_link_libraries(lava-vr PUBLIC ${ZLIB_LIBRARIES})
+
 target_include_directories(lava-vr PUBLIC ./src)
-target_link_libraries(lava-vr PUBLIC lava lava-extras-openvr lava-extras-pipeline lava-extras-geometry lava-extras-pack lava-extras-imgui z)
+target_link_libraries(lava-vr PUBLIC lava lava-extras-openvr lava-extras-pipeline lava-extras-geometry lava-extras-pack lava-extras-imgui zlib)
+
+if (TARGET glm_static)
+    target_link_libraries(lava-vr PRIVATE glm_static)
+else()
+	message( FATAL_ERROR "Lava-VR requires glm_static as a target. Please make sure to add it using something like 'add_subdirectory('lava/extern/glm/glm')' before including lava-vr." )
+endif()
\ No newline at end of file
diff --git a/src/lava-vr/VRMesh.cc b/src/lava-vr/VRMesh.cc
index 310b581803acdc2e72890d8af9fa9e3c7d38632f..8d29b5a41a599f6b9c1bc8e66c420cf89f12af80 100644
--- a/src/lava-vr/VRMesh.cc
+++ b/src/lava-vr/VRMesh.cc
@@ -1,6 +1,7 @@
 #include "VRMesh.hh"
 #include <exception>
 #include <iostream>
+#include <assert.h>
 #include <zlib.h>
 
 #include <assimp/Importer.hpp>
@@ -107,10 +108,10 @@ VRMesh VRMesh::readFromFile(const std::string &filename) {
 
     result.vertices.resize(header.num_verts);
     gzread(file, result.vertices.data(),
-           uint(sizeof(Vertex) * header.num_verts));
+        uint32_t(sizeof(Vertex) * header.num_verts));
     result.indices.resize(header.num_indcs);
     gzread(file, result.indices.data(),
-           uint(sizeof(uint32_t) * header.num_indcs));
+        uint32_t(sizeof(uint32_t) * header.num_indcs));
 
     if (header.has_color_texture) {
         result.colorTexture = readTexture(file);
@@ -151,7 +152,7 @@ VRMesh VRMesh::readFromObj(const std::string &objfile,
         aiMesh *theMesh = importScene->mMeshes[0];
         auto uv = theMesh->mTextureCoords[0];
 
-        for (unsigned int i = 0; i < theMesh->mNumVertices; ++i) {
+        for (uint32_t i = 0; i < theMesh->mNumVertices; ++i) {
             Vertex v;
             v.position.x = theMesh->mVertices[i].x;
             v.position.y = theMesh->mVertices[i].y;
@@ -164,10 +165,10 @@ VRMesh VRMesh::readFromObj(const std::string &objfile,
 
             result.vertices.push_back(v);
         }
-        for (unsigned int i_f = 0; i_f < theMesh->mNumFaces; ++i_f) {
+        for (uint32_t i_f = 0; i_f < theMesh->mNumFaces; ++i_f) {
             assert(theMesh->mFaces[i_f].mNumIndices == 3 &&
                    "Only triangles for now please");
-            for (unsigned int i_i = 0; i_i < 3; ++i_i) {
+            for (uint32_t i_i = 0; i_i < 3; ++i_i) {
                 uint32_t currentVertexIndex =
                     (uint32_t)theMesh->mFaces[i_f].mIndices[i_i];
                 result.indices.push_back(currentVertexIndex);