diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0944eae2f5b68a49b59a80d6d80e1516d7113925..bd70efcfca3aea4ab861f211810a9a55079822ee 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -168,7 +168,7 @@ build:linux:gcc5.3.1:
     - cd build
     - make Cpplint-Test-Suite
     - make Cppcheck-Test-Suite
-    - make -j
+    - make -j8
   artifacts:
     paths:
     - build
@@ -186,7 +186,7 @@ build:linux:gcc6.3.1:
     - cd build
     - make Cpplint-Test-Suite
     - make Cppcheck-Test-Suite
-    - make -j
+    - make -j8
   artifacts:
     paths:
     - build
diff --git a/EXTERNALS.md b/EXTERNALS.md
new file mode 100644
index 0000000000000000000000000000000000000000..4c616a1cd6827929fc25ad7fadcb1e53f0d63794
--- /dev/null
+++ b/EXTERNALS.md
@@ -0,0 +1,464 @@
+# External libraries
+
+Project Phoenix uses the following external libraries, each using their own license:
+* [Assimp](#assimp)
+* [Boost](#boost)
+* [Catch2](#catch2)
+* [cpplint](#cpplint)
+* [Freeimage](#freeimage)
+* [gl](#gl)
+* [glew](#glew)
+* [glm](#glm)
+* [JSON for Modern C++](#json-for-modern-c)
+* [OpenVR SDK](#openvr-sdk)
+* [SDL 2](#sdl-2)
+* [spdlog](#spdlog)
+* [trompeloeil](#trompeloeil)
+
+## Assimp
+available at (http://assimp.sourceforge.net/)
+### 3-clause BSD license
+
+Copyright (c) 2006-2015 assimp team
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+Neither the name of the assimp team nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+## Boost
+available at (http://www.boost.org)
+### Boost Software License
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+## Catch2
+available at (https://github.com/catchorg/Catch2)
+###Boost Software License
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+## cpplint
+available at (https://github.com/cpplint/cpplint)
+### 3-clause BSD license
+
+cpplint.py and its corresponding unit tests are Copyright (C) 2009 Google Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+## Freeimage
+available at (http://freeimage.sourceforge.net/)
+### Freeimage Public License - Version 1.0
+
+1. Definitions.
+1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications.
+1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor.
+1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof.
+1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data.
+1.5. "Executable" means Covered Code in any form other than Source Code.
+1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A.
+1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License.
+1.8. "License" means this document.
+1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a
+Modification is:
+A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications.
+B. Any new file that contains any part of the Original Code or previous Modifications.
+1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License.
+1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control
+compilation and installation of an Executable, or a list of source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
+1.12. "You" means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the
+direction or management of such entity, whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or beneficial ownership of such entity.
+2. Source Code License.
+2.1. The Initial Developer Grant.
+The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+(a) to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, or as part of a Larger Work; and
+(b) under patents now or hereafter owned or controlled by Initial Developer, to make, have made, use and sell ("Utilize") the Original Code (or portions thereof), but solely to the extent that
+any such patent is reasonably necessary to enable You to Utilize the Original Code (or portions thereof) and not to any greater extent that may be necessary to Utilize further Modifications or
+combinations.
+2.2. Contributor Grant.
+Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims:
+(a) to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code or as part of a Larger Work; and
+(b) under patents now or hereafter owned or controlled by Contributor, to Utilize the Contributor Version (or portions thereof), but solely to the extent that any such patent is reasonably necessary to enable You to Utilize the Contributor Version (or portions thereof), and not to any greater extent that
+may be necessary to Utilize further Modifications or combinations.
+3. Distribution Obligations.
+3.1. Application of License.
+The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or
+restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5.
+3.2. Availability of Source Code.
+Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party.
+3.3. Description of Modifications.
+You must cause all Covered Code to which you contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code.
+3.4. Intellectual Property Matters
+(a) Third Party Claims.
+If You have knowledge that a party claims an intellectual property right in particular functionality or code (or its utilization under this License), you must include a text file with the source code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If you obtain such knowledge after You make Your Modification available as described in Section 3.2, You shall promptly modify the LEGAL file in all copies You make
+available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained.
+(b) Contributor APIs.
+If Your Modification is an application programming interface and You own or control patents which are reasonably necessary to implement that API, you must also include this information in the LEGAL file.
+3.5. Required Notices.
+You must duplicate the notice in Exhibit A in each file of the Source Code, and this License in any documentation for the Source Code, where You describe recipients' rights relating to Covered Code. If You created one or more Modification(s), You may add your name as a Contributor to the notice described in Exhibit A. If it is not possible to put such notice in a particular Source Code file due to its
+structure, then you must include such notice in a location (such as a relevant directory file) where a user would be likely to look for such a notice. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or
+liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of
+warranty, support, indemnity or liability terms You offer.
+3.6. Distribution of Executable Versions.
+You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You
+describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code under a license of Your choice, which may contain terms different from this License,
+provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+3.7. Larger Works.
+You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code.
+4. Inability to Comply Due to Statute or Regulation.
+If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+5. Application of this License.
+This License applies to code to which the Initial Developer has attached the notice in Exhibit A, and to related Covered Code.
+6. Versions of the License.
+6.1. New Versions.
+Floris van den Berg may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number.
+6.2. Effect of New Versions.
+Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Floris van den Berg
+No one other than Floris van den Berg has the right to modify the terms applicable to Covered Code created under this License.
+6.3. Derivative Works.
+If you create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), you must (a) rename Your license so that the phrases "FreeImage", `FreeImage Public License", "FIPL", or any confusingly similar phrase do not appear anywhere in your license and (b) otherwise make it clear that your version of the license contains terms which differ from the FreeImage Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.)
+7. DISCLAIMER OF WARRANTY.
+COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+8. TERMINATION.
+This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+9. LIMITATION OF LIABILITY.
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+10. U.S. GOVERNMENT END USERS.
+The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein.
+11. MISCELLANEOUS.
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by Dutch law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in, the The Netherlands: (a) unless otherwise agreed in writing, all disputes relating to this License (excepting any dispute relating to intellectual property rights) shall be subject to final and binding arbitration, with the losing party paying all costs of arbitration; (b) any arbitration relating to this Agreement shall be held in Almelo, The Netherlands; and (c) any litigation relating to this Agreement shall be subject to the jurisdiction of the court of Almelo, The Netherlands with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys fees and expenses. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License.
+12. RESPONSIBILITY FOR CLAIMS.
+Except in cases where another Contributor has failed to comply with Section 3.4, You are responsible for damages arising, directly or indirectly, out of Your utilization of rights under this License, based
+on the number of copies of Covered Code you made available, the revenues you received from utilizing such rights, and other relevant factors. You agree to work with affected parties to distribute
+responsibility on an equitable basis.
+
+EXHIBIT A.
+"The contents of this file are subject to the FreeImage Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://home.wxs.nl/~flvdberg/freeimage-license.txt
+Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. 
+
+
+## gl
+available at (https://github.com/acdemiralp/gl)
+### Boost Software License - Version 1.0 
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+
+## glew
+available at (http://glew.sourceforge.net/)
+### Khronos License
+
+Copyright (c) 2007 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+
+
+## glm
+available at (https://glm.g-truc.net)
+### The Happy Bunny License
+================================================================================
+OpenGL Mathematics (GLM)
+--------------------------------------------------------------------------------
+GLM is licensed under The Happy Bunny License and MIT License
+
+================================================================================
+The Happy Bunny License (Modified MIT License)
+--------------------------------------------------------------------------------
+Copyright (c) 2005 - 2014 G-Truc Creation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+Restrictions:
+ By making use of the Software for military purposes, you choose to make a
+ Bunny unhappy.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+The MIT License
+--------------------------------------------------------------------------------
+Copyright (c) 2005 - 2014 G-Truc Creation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+## JSON for Modern C++ 
+available at (https://github.com/nlohmann/json)
+### MIT License
+
+MIT License 
+
+Copyright (c) 2013-2018 Niels Lohmann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+## OpenVR SDK 
+available at (https://github.com/ValveSoftware/openvr)
+### License
+Copyright (c) 2015, Valve Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+may be used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+## SDL 2
+available at (https://www.libsdl.org)
+### zlib license
+
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+
+
+## spdlog
+available at (https://github.com/gabime/spdlog)
+### MIT license
+
+The MIT License (MIT)
+
+Copyright (c) 2016 Gabi Melman.                                       
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+## trompeloeil
+available at (https://github.com/rollbear/trompeloeil)
+### Boost Software License - Version 1.0
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 44a184c18c328385d7aba4d554b25cb9035d8db1..898ac02fd787f43a70dfb95a03ea00d1f6876221 100644
--- a/LICENSE
+++ b/LICENSE
@@ -16,204 +16,30 @@
    52074 Aachen
 --------------------------------------------------------------------------------
 
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
+The 3-Clause BSD License
+
+Copyright 2017-2018 Virtual Reality & Immersive Visualization Group, 
+RWTH Aachen University, Germany.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+3. Neither the name of the copyright holder nor the names of its contributors
+   may be used to endorse or promote products derived from this software without
+   specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/README.md b/README.md
index 6e740b179a115ceca887a1edf8de4c64ab8561fd..f11bf1102f35d13fe0d395b182dd5e61a7efa8c9 100644
--- a/README.md
+++ b/README.md
@@ -22,3 +22,9 @@ distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
+
+
+## External libraries
+
+Project Phoenix uses external libraries that are listed in the file
+[EXTERNALS.md](EXTERNALS.md) along with their corresponding license information.
\ No newline at end of file
diff --git a/cmake/WarningLevels.cmake b/cmake/WarningLevels.cmake
index 72cd8edfdf7929f00b6129b8949817b5adbef6d0..8b20c58477352b4a7a88ff43a9d073d39bfd4c2d 100644
--- a/cmake/WarningLevels.cmake
+++ b/cmake/WarningLevels.cmake
@@ -56,23 +56,6 @@ set(WARNING_LEVELS_RWTH_MSVC
   "$<$<CXX_COMPILER_ID:MSVC>:/w14312>"
 )
 
-
-# flags for overriding warning levels for files generated by Qt's MOC
-set(WARNING_LEVELS_RWTH_CLANG_QT_MOC_OVERRIDE
-  -Wno-padded
-  -Wno-undefined-reinterpret-cast
-)
-
-set(WARNING_LEVELS_RWTH_GCC_QT_MOC_OVERRIDE
-  -Wno-padded
-  -Wno-undefined-reinterpret-cast
-)
-
-set(WARNING_LEVELS_RWTH_MSVC_QT_MOC_OVERRIDE
-  -W0
-)
-
-
 # compiler identification
 if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND
     CMAKE_CXX_COMPILER_ID MATCHES "Clang")
@@ -107,28 +90,10 @@ macro(SET_WARNING_LEVELS_RWTH TARGET)
   
   if(IS_CLANG)
     target_compile_options(${TARGET} PRIVATE ${WARNING_LEVELS_RWTH_CLANG})
-    if (CMAKE_AUTOMOC)
-      set_source_files_properties(
-        ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_autogen/moc_compilation.cpp
-        PROPERTIES COMPILE_FLAGS ${WARNING_LEVELS_RWTH_CLANG_QT_MOC_OVERRIDE})
-    endif ()
-    target_compile_options(${TARGET} PRIVATE "-include${SUPPRESS_WARNING_HEADER_FILE}")
   elseif(IS_GCC)
     target_compile_options(${TARGET} PRIVATE ${WARNING_LEVELS_RWTH_GCC})
-    if (CMAKE_AUTOMOC)
-      set_source_files_properties(
-        ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_autogen/moc_compilation.cpp
-        PROPERTIES COMPILE_FLAGS ${WARNING_LEVELS_RWTH_GCC_QT_MOC_OVERRIDE})
-    endif ()
-    target_compile_options(${TARGET} PRIVATE "-include${SUPPRESS_WARNING_HEADER_FILE}")
   elseif(IS_MSVC)
     target_compile_options(${TARGET} PRIVATE ${WARNING_LEVELS_RWTH_MSVC})
-    if (CMAKE_AUTOMOC)
-      set_source_files_properties(
-        ${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen/moc_compilation.cpp
-        PROPERTIES COMPILE_FLAGS ${WARNING_LEVELS_RWTH_MSVC_QT_MOC_OVERRIDE})
-    endif ()
-    target_compile_options(${TARGET} PRIVATE "/FI ${SUPPRESS_WARNING_HEADER_FILE}")
   else()
     message(WARNING "SET_WARNING_LEVELS_RWTH not implemented for your compiler. "
       "Implement it to support our no-warning policy.")
diff --git a/conanfile.py b/conanfile.py
index 44c6921afbb5341b4914f1d8301d904e6687b18e..377f5b2fa82fad8f04834a65021a52addd52820e 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -31,13 +31,12 @@ class ProjectPhoenix(ConanFile):
 
     requires = (("assimp/4.1.0@RWTH-VR/thirdparty"),
                 ("boost_optional/1.66.0@bincrafters/testing"),
-                ("boost_signals2/1.66.0@bincrafters/testing"), #not yet available in stable, change whenever available (also boost_optional)
+                ("boost_signals2/1.66.0@bincrafters/testing"), #still not working in stable, change whenever available (also boost_optional)
                 ("catch/1.12.0@RWTH-VR/thirdparty"),
                 ("cppcheck/1.82@RWTH-VR/thirdparty"),
                 ("cpplint/e8ffd7c@RWTH-VR/thirdparty"),
                 ("freeimage/3.17.0_2@RWTH-VR/thirdparty"),
-                ("gl/1.0.2@RWTH-VR/thirdparty"),
-                ("glew/2.1.0_2@RWTH-VR/thirdparty"),
+                ("gl/1.1.1@RWTH-VR/thirdparty"),
                 ("glm/0.9.8.5@g-truc/stable"),
                 ("jsonformoderncpp/3.0.1@vthiery/stable"),
                 ("openvr/1.0.12@RWTH-VR/thirdparty"),
@@ -48,8 +47,8 @@ class ProjectPhoenix(ConanFile):
 
     def configure(self):
        self.options["boost"].header_only = True
+       self.options["boost_python"].python_version = 2.7
        self.options["freeimage"].shared = True
-       self.options["glew"].shared = True
        self.options["gl"].shared = False
        if self.settings.os == "Linux":
             self.options["sdl2"].alsa = False
diff --git a/demos/viewer/src/navigation_behavior.cpp b/demos/viewer/src/navigation_behavior.cpp
index 2f253199c29fe1c3265e834e8c26e7bd68febcec..d1d6457a9174426b3af5dad3563fb83008b0e29f 100644
--- a/demos/viewer/src/navigation_behavior.cpp
+++ b/demos/viewer/src/navigation_behavior.cpp
@@ -24,6 +24,8 @@
 
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/detail/type_vec3.hpp"
 #include "glm/glm.hpp"
diff --git a/demos/viewer/src/rotation_behavior.cpp b/demos/viewer/src/rotation_behavior.cpp
index 7143fdab696a9356ae09966e9ddc827fb4c93acf..94d0799921c4dcd236ebb1d1526179e89072b850 100644
--- a/demos/viewer/src/rotation_behavior.cpp
+++ b/demos/viewer/src/rotation_behavior.cpp
@@ -22,6 +22,8 @@
 
 #include "rotation_behavior.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/detail/type_vec3.hpp"
 #include "glm/glm.hpp"
diff --git a/demos/viewer/src/viewer_system.hpp b/demos/viewer/src/viewer_system.hpp
index f449c431543a0528a31c3217c491451e42965810..f4298c3ce7ececcced9772eb3eaee9eb6e3251f8 100644
--- a/demos/viewer/src/viewer_system.hpp
+++ b/demos/viewer/src/viewer_system.hpp
@@ -25,6 +25,8 @@
 
 #include <chrono>
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/engine.hpp"
 #include "phx/frame_timer.hpp"
 #include "phx/system.hpp"
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
index be87cfeb66e5d2169c4a6fff47227afe987f886b..5035306952cb04e834490a81f04768d474a501b9 100644
--- a/library/CMakeLists.txt
+++ b/library/CMakeLists.txt
@@ -41,6 +41,7 @@ target_include_directories(phoenix
 )
 
 target_link_libraries(phoenix
+  ${OPENGL_LIBRARIES}
   ${CONAN_OR_CMAKE_assimp}
   ${CONAN_OR_CMAKE_gl}
   ${CONAN_OR_CMAKE_boost_optional}
@@ -48,7 +49,6 @@ target_link_libraries(phoenix
   ${CONAN_OR_CMAKE_glm}
   ${CONAN_OR_CMAKE_sdl2}
   ${CONAN_OR_CMAKE_spdlog}
-  ${OPENGL_LIBRARIES}
   ${CONAN_OR_CMAKE_freeimage}
   ${CONAN_OR_CMAKE_openvr}
   ${CONAN_OR_CMAKE_jsonformoderncpp}
diff --git a/library/phx/assimp_model_loader.hpp b/library/phx/assimp_model_loader.hpp
index 3d78e3c89d2cf0641b83fc4456a3c1fb59041d50..fbb8cf00605c45f56a49e27ddea6f7974faaa368 100644
--- a/library/phx/assimp_model_loader.hpp
+++ b/library/phx/assimp_model_loader.hpp
@@ -32,6 +32,8 @@
 #include "assimp/ProgressHandler.hpp"
 #include "assimp/scene.h"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/behavior_system.hpp b/library/phx/behavior_system.hpp
index f8dfd0986bfe7d590cce5a06848484985d22bdbb..54819db82d4d95d4dced1ca240d87812936424db 100644
--- a/library/phx/behavior_system.hpp
+++ b/library/phx/behavior_system.hpp
@@ -23,6 +23,8 @@
 #ifndef LIBRARY_PHX_BEHAVIOR_SYSTEM_HPP_
 #define LIBRARY_PHX_BEHAVIOR_SYSTEM_HPP_
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/engine.hpp"
 #include "phx/export.hpp"
 #include "phx/system.hpp"
diff --git a/library/phx/blit_pass.cpp b/library/phx/blit_pass.cpp
index edc96534e6e531d9ca7ee2e28380339d5ee45177..92f9deb7fe361960d913f95c23b4c056044e8d8a 100644
--- a/library/phx/blit_pass.cpp
+++ b/library/phx/blit_pass.cpp
@@ -34,11 +34,27 @@ void BlitPass::Initialize() {
 }
 
 void BlitPass::Execute() {
-  const glm::uvec2& dims = render_target_->GetDimensions();
-  const GLint width = static_cast<int>(dims.x);
-  const GLint height = static_cast<int>(dims.y);
-  default_framebuffer_->blit(*render_target_, 0, 0, width, height, 0, 0, width,
-                             height, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
+  const glm::uvec2& source_dims = render_target_->GetDimensions();
+  const GLint source_width = static_cast<int>(source_dims.x);
+  const GLint source_height = static_cast<int>(source_dims.y);
+
+  GLint target_dims[4] = {0};
+  glGetIntegerv(GL_VIEWPORT, target_dims);
+  const GLint target_width = target_dims[2];
+  const GLint target_height = target_dims[3];
+
+  GLint source_x = 0;
+  GLint source_y = 0;
+  if (target_width < source_width) {
+    source_x = (source_width - target_width) / 2;
+  }
+  if (target_height < source_height) {
+    source_y = (source_height - target_height) / 2;
+  }
+
+  default_framebuffer_->blit(*render_target_, source_x, source_y, target_width,
+                             target_height, 0, 0, target_width, target_height,
+                             GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
                              GL_NEAREST);
 }
 }  // namespace phx
diff --git a/library/phx/clear_pass.cpp b/library/phx/clear_pass.cpp
index 628c988761ea0cdd0399bf542acd1a026af6c1db..6d42887213e4d5bb272feefbb0ff3a17a3455894 100644
--- a/library/phx/clear_pass.cpp
+++ b/library/phx/clear_pass.cpp
@@ -22,6 +22,8 @@
 
 #include "gl/framebuffer.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/gtc/type_ptr.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/clear_pass.hpp b/library/phx/clear_pass.hpp
index af2bd0d3af6ea666cb3f173d425d1334fad3e47e..4df4c70bb388be168607f25bda00fe65376c43d3 100644
--- a/library/phx/clear_pass.hpp
+++ b/library/phx/clear_pass.hpp
@@ -23,6 +23,8 @@
 #ifndef LIBRARY_PHX_CLEAR_PASS_HPP_
 #define LIBRARY_PHX_CLEAR_PASS_HPP_
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 #include "glm/vec4.hpp"
diff --git a/library/phx/engine.hpp b/library/phx/engine.hpp
index 21d3a9c88b4a204c41e8c59f05800d6559db193d..02bb1f0752a0aa7699ee404b5d5d071751819052 100644
--- a/library/phx/engine.hpp
+++ b/library/phx/engine.hpp
@@ -32,6 +32,8 @@
 #include <utility>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #define BOOST_BIND_NO_PLACEHOLDERS
 #include "boost/signals2/connection.hpp"
diff --git a/library/phx/geometry_pass.cpp b/library/phx/geometry_pass.cpp
index 7965ed03d9aac545266098ecb265f4fa07b61f0b..81987ac6acb99103684547bb8443762ecab65aa6 100644
--- a/library/phx/geometry_pass.cpp
+++ b/library/phx/geometry_pass.cpp
@@ -204,7 +204,8 @@ void GeometryPass::BindResources() {
   rendering_resource_->vertex_array.bind();
   shader_program_->use();
   render_target_->bind();
-  light_buffer_.bind_base<GL_UNIFORM_BUFFER>(0);
+  render_target_->SetViewport();
+  light_buffer_.bind_base(GL_UNIFORM_BUFFER, 0);
 }
 
 void GeometryPass::Draw(const RenderingInstance& rendering_instance) {
@@ -235,7 +236,7 @@ void GeometryPass::Draw(const RenderingInstance& rendering_instance) {
 void GeometryPass::UnbindResources() {
   render_target_->unbind();
   shader_program_->unuse();
-  light_buffer_.unbind_base<GL_UNIFORM_BUFFER>(0);
+  light_buffer_.unbind_base(GL_UNIFORM_BUFFER, 0);
   glBindVertexArray(0);
 }
 
diff --git a/library/phx/geometry_pass.hpp b/library/phx/geometry_pass.hpp
index 9d969edca251c110d96b2bf52e76dae54954614e..847648d73b38a52192df694081953719a5643e1b 100644
--- a/library/phx/geometry_pass.hpp
+++ b/library/phx/geometry_pass.hpp
@@ -29,6 +29,8 @@
 #include <utility>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "gl/buffer.hpp"
 #include "gl/vertex_array.hpp"
diff --git a/library/phx/hmd.cpp b/library/phx/hmd.cpp
index 44f25cb8c045d1563cfef8a770bd134fc6a4886a..16194898bce619c8f79972531de415e69b5d0a53 100644
--- a/library/phx/hmd.cpp
+++ b/library/phx/hmd.cpp
@@ -30,6 +30,8 @@
 #include <utility>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/hmd.hpp b/library/phx/hmd.hpp
index 82bedf2cfaf9e305a32b7126ec7415fd6635d45b..5ccffcfa0c9bfb0bfd86c28d8054905f1a4a700e 100644
--- a/library/phx/hmd.hpp
+++ b/library/phx/hmd.hpp
@@ -26,6 +26,8 @@
 #include <memory>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/mat4x4.hpp"
 #include "glm/vec2.hpp"
diff --git a/library/phx/image.cpp b/library/phx/image.cpp
index 22a470b6ba3b715490b333b64298263101c6feb8..c2af360d9c091595cc00fa883d69f94edffe8096 100644
--- a/library/phx/image.cpp
+++ b/library/phx/image.cpp
@@ -55,7 +55,9 @@ Image::Image(const Image& that)
   FreeImage_CloneMetadata(native_, that.native_);
 }  // namespace phx
 Image::Image(Image&& temp) noexcept
-    : Resource(temp), Loggable(temp), native_(std::move(temp.native_)) {
+    : Resource(std::move(static_cast<Resource&&>(temp))),
+      Loggable(std::move(static_cast<Loggable&&>(temp))),
+      native_(temp.native_) {
   temp.native_ = nullptr;
 }
 Image::~Image() {
@@ -69,7 +71,7 @@ Image& Image::operator=(const Image& that) {
 }
 Image& Image::operator=(Image&& temp) noexcept {
   if (this != &temp) {
-    native_ = std::move(temp.native_);
+    native_ = temp.native_;
     temp.native_ = nullptr;
   }
   return *this;
diff --git a/library/phx/input_system.cpp b/library/phx/input_system.cpp
index a8b8ece9fdbc1af2b9a6d6a0927c60dd17d8142b..df27af3ce77b7b1595dc6be0044d375a9635845f 100644
--- a/library/phx/input_system.cpp
+++ b/library/phx/input_system.cpp
@@ -26,6 +26,8 @@
 #include "logger.hpp"
 #include "rendering_system.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "SDL.h"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/input_system.hpp b/library/phx/input_system.hpp
index 6c2d1875f47623552b9bc21bdcbb386d77096b36..a85319a40eb754266c947f03f332d9b0c3cee693 100644
--- a/library/phx/input_system.hpp
+++ b/library/phx/input_system.hpp
@@ -26,6 +26,8 @@
 #include <functional>
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #define BOOST_BIND_NO_PLACEHOLDERS
 #include "boost/signals2/connection.hpp"
diff --git a/library/phx/light.hpp b/library/phx/light.hpp
index 53e590f1ef6303c9cb3bf79d7c1d3ccbd0adffd6..de0a6522916b8b8326916751fc49d38d8e2a86e4 100644
--- a/library/phx/light.hpp
+++ b/library/phx/light.hpp
@@ -25,6 +25,8 @@
 
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/material.hpp b/library/phx/material.hpp
index 9a4fb7b6b4e74c27209f7de50f4ac7a1a6fe3dc3..137a3c83ded680bfd84fa42ed618878893f5078c 100644
--- a/library/phx/material.hpp
+++ b/library/phx/material.hpp
@@ -27,6 +27,8 @@
 #include <string>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "gl/texture.hpp"
 #include "gl/texture_handle.hpp"
diff --git a/library/phx/material_handle.hpp b/library/phx/material_handle.hpp
index 2cdf3bc6f6c2681a5918482811e48218520e0d50..e51fb04fc2790a0b2fcb2603a93fbb60ab31f6fe 100644
--- a/library/phx/material_handle.hpp
+++ b/library/phx/material_handle.hpp
@@ -26,6 +26,8 @@
 #include <string>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec3.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/mesh.hpp b/library/phx/mesh.hpp
index 3471314ace53f72623cd03db7d50cd8b38697873..75acf3bea81643d726d4fb1da1af35f55f250df8 100644
--- a/library/phx/mesh.hpp
+++ b/library/phx/mesh.hpp
@@ -26,6 +26,8 @@
 #include <string>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/model.hpp b/library/phx/model.hpp
index 16b569d9be23be17abafeca3e35a6c3e1cb3a57c..7da4e689a10ebade39942ba1351c6537fa9141b9 100644
--- a/library/phx/model.hpp
+++ b/library/phx/model.hpp
@@ -27,6 +27,8 @@
 #include <string>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/openvr_controller_behavior.hpp b/library/phx/openvr_controller_behavior.hpp
index 069cba84836b6d71fda614cb18c912103640e686..a1b0340fb01912a614f75e2fa3e283821f76f2ff 100644
--- a/library/phx/openvr_controller_behavior.hpp
+++ b/library/phx/openvr_controller_behavior.hpp
@@ -23,6 +23,8 @@
 #ifndef LIBRARY_PHX_OPENVR_CONTROLLER_BEHAVIOR_HPP_
 #define LIBRARY_PHX_OPENVR_CONTROLLER_BEHAVIOR_HPP_
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/behavior.hpp"
 #include "phx/export.hpp"
 
diff --git a/library/phx/openvr_controller_system.hpp b/library/phx/openvr_controller_system.hpp
index 47f21e105979a096cc8d201decb6a503c7028db0..17f7cfd53707f4876766e7c8871e0ec3186a0553 100644
--- a/library/phx/openvr_controller_system.hpp
+++ b/library/phx/openvr_controller_system.hpp
@@ -26,6 +26,8 @@
 #include <memory>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/openvr_resource_loader.hpp b/library/phx/openvr_resource_loader.hpp
index 5c68b9e89d3a2f73e3d4a0bb9d94cdf80371c830..d51e796557e2160129c94d761834f23af71edd73 100644
--- a/library/phx/openvr_resource_loader.hpp
+++ b/library/phx/openvr_resource_loader.hpp
@@ -26,6 +26,8 @@
 #include <memory>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/projection.cpp b/library/phx/projection.cpp
index 81b915481df519d8dd512505209b7c7b961abf5a..9ec2b2bb1c76a2d3a9fd304dee52405428c37db8 100644
--- a/library/phx/projection.cpp
+++ b/library/phx/projection.cpp
@@ -24,6 +24,8 @@
 
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/mat4x4.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/projection.hpp b/library/phx/projection.hpp
index 5f882493183b25de522b786c91ed9e1d564a56a4..c24e22ba8ccba2e843b922621ba99f6f93c13724 100644
--- a/library/phx/projection.hpp
+++ b/library/phx/projection.hpp
@@ -25,6 +25,8 @@
 
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/mat4x4.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/render_target.cpp b/library/phx/render_target.cpp
index f1db70c4d69494583f66fd6887149bf33d71f23c..1bfe7ade23e5f7174496529de1cc7c2862ce83a3 100644
--- a/library/phx/render_target.cpp
+++ b/library/phx/render_target.cpp
@@ -25,6 +25,7 @@
 #include <memory>
 
 #include "gl/command_execution.hpp"
+#include "gl/viewport.hpp"
 
 #include "phx/logger.hpp"
 
@@ -78,4 +79,9 @@ gl::texture_2d* RenderTarget::GetColorTexture() const {
   return color_texture_.get();
 }
 
+void RenderTarget::SetViewport() const {
+  gl::set_viewport({{0, 0}}, {{static_cast<GLsizei>(dimensions_[0]),
+                               static_cast<GLsizei>(dimensions_[1])}});
+}
+
 }  // namespace phx
diff --git a/library/phx/render_target.hpp b/library/phx/render_target.hpp
index b87da3212c45b003218067c09ff3d5199976c41b..a8ca89bb3e1c15ca7e3b03eabfb2d81bf768b344 100644
--- a/library/phx/render_target.hpp
+++ b/library/phx/render_target.hpp
@@ -25,6 +25,8 @@
 
 #include <memory>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/mat4x4.hpp"
 #include "glm/vec2.hpp"
@@ -61,6 +63,8 @@ class PHOENIX_EXPORT RenderTarget : public gl::framebuffer {
 
   gl::texture_2d* GetColorTexture() const;
 
+  void SetViewport() const;
+
  private:
   std::unique_ptr<gl::texture_2d> color_texture_;
   std::unique_ptr<gl::texture_2d> depth_texture_;
diff --git a/library/phx/scene_loader.cpp b/library/phx/scene_loader.cpp
index 21b407ce473d43dd0bc61811fa58c6b5b5a26bdd..ef6fa6fa88ac6d8a832806836d7a310805662e05 100644
--- a/library/phx/scene_loader.cpp
+++ b/library/phx/scene_loader.cpp
@@ -40,9 +40,13 @@ bool SceneLoader::InsertModelIntoScene(const std::string& file_name,
     return false;
   }
 
+  auto rootEntity = scene->CreateEntity();
+  rootEntity->SetName(ConstructRootName(file_name));
+  auto root_transform = rootEntity->AddComponent<Transform>();
+
   for (auto mesh : model->GetMeshes()) {
     auto entity = scene->CreateEntity();
-    entity->AddComponent<Transform>();
+    entity->AddComponent<Transform>()->SetParent(root_transform);
     entity->AddComponent<MeshHandle>()->SetMesh(mesh);
     ResourcePointer<Material> material = model->GetMaterialForMesh(mesh);
     if (material != nullptr) {
@@ -52,4 +56,16 @@ bool SceneLoader::InsertModelIntoScene(const std::string& file_name,
 
   return true;
 }
+
+std::string SceneLoader::ConstructRootName(const std::string& file_name) {
+  const auto last_slash = file_name.find_last_of('/');
+  const auto last_dot = file_name.find_last_of('.');
+  const std::size_t model_name_first_pos =
+      last_slash == std::string::npos ? 0 : last_slash + 1;
+  const std::size_t model_name_last_pos =
+      last_dot == std::string::npos ? file_name.length() - 1 : last_dot;
+  return file_name.substr(model_name_first_pos,
+                          model_name_last_pos - model_name_first_pos);
+}
+
 }  // namespace phx
diff --git a/library/phx/scene_loader.hpp b/library/phx/scene_loader.hpp
index 2ba77eb4e1dcfc6544fbfb18c6beb50c95a15a87..204af32dde777a4e863e912f5977bd290b385b28 100644
--- a/library/phx/scene_loader.hpp
+++ b/library/phx/scene_loader.hpp
@@ -33,6 +33,9 @@ namespace phx {
 class PHOENIX_EXPORT SceneLoader {
  public:
   static bool InsertModelIntoScene(const std::string& file_name, Scene* scene);
+
+ private:
+  static std::string ConstructRootName(const std::string& file_name);
 };
 
 }  // namespace phx
diff --git a/library/phx/setup.cpp b/library/phx/setup.cpp
index a69c62c23b0515df836e93360b09f61eb16b093a..ebf0c265e007c29429d760f4f03ebb3ef3b91750 100644
--- a/library/phx/setup.cpp
+++ b/library/phx/setup.cpp
@@ -24,6 +24,7 @@
 
 #include <cassert>
 #include <memory>
+#include <string>
 #include <utility>
 
 #include "behavior_system.hpp"
@@ -55,19 +56,21 @@ std::unique_ptr<Engine> Setup::CreateDefaultEngine() {
   auto displaysys_window = engine->CreateSystem<DisplaySystemWindow>();
   DisplaySystemOpenVR* displaysys_hmd = nullptr;
   bool using_hmd = false;
+
   if (HMD::IsHMDPresent()) {
     info("An HMD is present so we use it");
     using_hmd = true;
 
     displaysys_hmd = engine->CreateSystem<DisplaySystemOpenVR>();
     displaysys_hmd->CreateHMD();
-    displaysys_window->CreateWindow(
-        "Phoenix HMD Companion", glm::uvec2(10, 10),
-        displaysys_hmd->GetHMD()->GetViewportSize());
-  } else {
-    displaysys_window->CreateWindow("Phoenix", glm::uvec2(100, 100));
   }
 
+  const std::string window_title{using_hmd ? "Phoenix -- HMD Companion"
+                                           : "Phoenix"};
+  const glm::uvec2 window_position{100, 100};
+  const glm::uvec2 window_size{1024, 768};
+  displaysys_window->CreateWindow(window_title, window_position, window_size);
+
   auto rendering_system =
       engine->CreateSystem<RenderingSystem>(engine->GetSystem<DisplaySystem>());
 
diff --git a/library/phx/shader_program.hpp b/library/phx/shader_program.hpp
index 3244f15ee0a6174b50ccfd3301026bdfca7178e4..63bc305fb810aeb66a55d9c6ecdc016849a0e466 100644
--- a/library/phx/shader_program.hpp
+++ b/library/phx/shader_program.hpp
@@ -29,6 +29,8 @@
 #include <utility>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "gl/auxiliary/glm_uniforms.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/library/phx/splash_screen.hpp b/library/phx/splash_screen.hpp
index da444a584184e49b2abf028784cc49405205322a..8755048cd61e850108a5505898ea3b99c70a7ad4 100644
--- a/library/phx/splash_screen.hpp
+++ b/library/phx/splash_screen.hpp
@@ -25,6 +25,8 @@
 
 #include <memory>
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/export.hpp"
 #include "phx/image.hpp"
 #include "phx/resource_pointer.hpp"
diff --git a/library/phx/stream_helpers.hpp b/library/phx/stream_helpers.hpp
index 808cf8da2bb3afc9263822ca28cc11e4a0244df4..0c924d2681858e4e67747a3ef69391200aefd71e 100644
--- a/library/phx/stream_helpers.hpp
+++ b/library/phx/stream_helpers.hpp
@@ -25,6 +25,8 @@
 
 #include <ostream>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/gtc/quaternion.hpp"
 #include "glm/mat4x4.hpp"
diff --git a/library/phx/tracking_system_openvr.hpp b/library/phx/tracking_system_openvr.hpp
index 6c11f301c89d77052db966367b82834ac6c6e92b..9c1498555367f468a097c6b42cc437aff2577b74 100644
--- a/library/phx/tracking_system_openvr.hpp
+++ b/library/phx/tracking_system_openvr.hpp
@@ -26,6 +26,8 @@
 #include <memory>
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/display_system_openvr.hpp"
 #include "phx/engine.hpp"
 #include "phx/export.hpp"
diff --git a/library/phx/transform.cpp b/library/phx/transform.cpp
index 1dbaedec8746bd30f6f4d1753731816f1fabaa2b..32f699262afff5d85e53f5074623bea8a9ce66cf 100644
--- a/library/phx/transform.cpp
+++ b/library/phx/transform.cpp
@@ -23,13 +23,13 @@
 #include <sstream>
 #include <string>
 
-SUPPRESS_WARNINGS_BEGIN
+#include "phx/suppress_warnings.hpp"
 
+SUPPRESS_WARNINGS_BEGIN
 #include "glm/gtc/matrix_transform.hpp"
 #include "glm/gtx/matrix_decompose.hpp"
 #include "glm/gtx/quaternion.hpp"
 #include "glm/gtx/transform.hpp"
-
 SUPPRESS_WARNINGS_END
 
 #include "transform.hpp"
diff --git a/library/phx/transform.hpp b/library/phx/transform.hpp
index 787c9df69a1c1055b3021fd58bc658ce349c0431..99092fe7e690363f8c2651b794d08a24fb6a9325 100644
--- a/library/phx/transform.hpp
+++ b/library/phx/transform.hpp
@@ -26,6 +26,8 @@
 #include <ostream>
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/gtc/quaternion.hpp"
 #include "glm/mat4x4.hpp"
diff --git a/library/phx/window.hpp b/library/phx/window.hpp
index ea581f66159bc2051f4a0f5c04a3eefb46ea9dfd..23edcc2ed4affbb1b95fedf52aba016b8d89d948 100644
--- a/library/phx/window.hpp
+++ b/library/phx/window.hpp
@@ -25,6 +25,8 @@
 
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "SDL.h"
 #include "glm/vec2.hpp"
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index ce8e3beba0fa93d210d3f8d3d7a77ea9a71a8e23..dd9d50b869c7965cfeddf59eaba4d25a3c7e0c42 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -54,6 +54,9 @@ macro(add_mock_lib mock_name mock_src_path)
   )
   target_link_libraries(${mock_name}
     ${CONAN_OR_CMAKE_trompeloeil})
+  #phx include dirs needed for suppress_warnings.hpp
+  target_include_directories(${mock_name}
+    PRIVATE ${phoenix_include_directories})
   set_property(TARGET ${mock_name} PROPERTY FOLDER "Tests")
   set_warning_levels_rwth(${mock_name})
 endmacro()
diff --git a/tests/src/integration_test_hmd.cpp b/tests/src/integration_test_hmd.cpp
index 0a640d7f98f03938b5e8803cb1e3545c6e5f9c85..9a71c4ec06ce21fbb2c41cf1bbd034a4eda12b0b 100644
--- a/tests/src/integration_test_hmd.cpp
+++ b/tests/src/integration_test_hmd.cpp
@@ -27,6 +27,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/engine.hpp"
 #include "phx/light.hpp"
 #include "phx/opengl_image_buffer_data.hpp"
diff --git a/tests/src/integration_test_model_rendering.cpp b/tests/src/integration_test_model_rendering.cpp
index ca59c9bb1ea0521a5b9d416ecee572a779fa3cd8..63d74a9a1339ecf667bb7f475c01b00268ad8b41 100644
--- a/tests/src/integration_test_model_rendering.cpp
+++ b/tests/src/integration_test_model_rendering.cpp
@@ -24,6 +24,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/assimp_model_loader.hpp"
 #include "phx/display_system_window.hpp"
 #include "phx/frame_timer.hpp"
diff --git a/tests/src/integration_test_opengl_buffer_data_download.cpp b/tests/src/integration_test_opengl_buffer_data_download.cpp
index d933ca9b48f4c68b265cc257d5e9204db00fe388..7b9e2c2707f673f8ad166cc2280783908edd9466 100644
--- a/tests/src/integration_test_opengl_buffer_data_download.cpp
+++ b/tests/src/integration_test_opengl_buffer_data_download.cpp
@@ -27,6 +27,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/engine.hpp"
 #include "phx/entity.hpp"
 #include "phx/mesh.hpp"
diff --git a/tests/src/integration_test_rendering.cpp b/tests/src/integration_test_rendering.cpp
index 266aea9ae98196a15f4d85c3d41e8b5aa073f530..eeabd149ba5ab97deb604d1ca8c77e9d277b4e5d 100644
--- a/tests/src/integration_test_rendering.cpp
+++ b/tests/src/integration_test_rendering.cpp
@@ -26,6 +26,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 #include "phx/display_system_window.hpp"
 #include "phx/frame_timer.hpp"
 #include "phx/mesh.hpp"
diff --git a/tests/src/mocks/generation/Create_openGL_mock.py b/tests/src/mocks/generation/Create_openGL_mock.py
index db07bbaff7b30f0607b5d2631536020020a8c638..e113d9005ca04a02224e258bb5c6c71d5497de26 100644
--- a/tests/src/mocks/generation/Create_openGL_mock.py
+++ b/tests/src/mocks/generation/Create_openGL_mock.py
@@ -56,13 +56,13 @@ functions_to_mock =['glClear', 'glEnable', 'glClearColor', 'glCreateProgram', 'g
                     '__glewGetShaderInfoLog', '__glewGetShaderSource', '__glewGetShaderiv', '__glewIsShader', '__glewSpecializeShader', '__glewReleaseShaderCompiler', '__glewShaderBinary',
                     '__glewIsImageHandleResidentARB', '__glewMakeImageHandleNonResidentARB', '__glewMakeImageHandleResidentARB', '__glewIsTextureHandleResidentARB', '__glewMakeTextureHandleNonResidentARB',
                     '__glewMakeTextureHandleResidentARB', '__glewDeleteBuffers', '__glewClearNamedBufferData', '__glewClearNamedBufferSubData','__glewCopyNamedBufferSubData',
-                    '__glewFlushMappedNamedBufferRange', '__glewGetNamedBufferParameteri64v', '__glewGetNamedBufferParameteriv', '__glewGetNamedBufferPointerv',
+                    '__glewFlushMappedNamedBufferRange', '__glewGetNamedBufferParameteri64v', '__glewGetNamedBufferParameteriv', '__glewGetNamedBufferPointerv', 'glViewport',
                     '__glewGetNamedBufferSubData', '__glewMapNamedBuffer', '__glewMapNamedBufferRange', '__glewNamedBufferStorage', '__glewNamedBufferSubData',
                     '__glewUnmapNamedBuffer', '__glewInvalidateBufferData', '__glewInvalidateBufferSubData', '__glewDisableVertexArrayAttrib', '__glewGetVertexArrayIndexed64iv',
                     '__glewGetVertexArrayIndexediv', '__glewGetVertexArrayiv', '__glewVertexArrayAttribBinding', '__glewVertexArrayAttribIFormat', '__glewVertexArrayAttribLFormat',
-                    '__glewVertexArrayBindingDivisor', '__glewDeleteVertexArrays', 'glBindTexture', 'glDeleteTextures', '__glewCreateTextures', '__glewNamedFramebufferTexture', 
-					'__glewTextureStorage2D', '__glewBindFramebuffer', 'glIsTexture', '__glewGetTextureHandleARB', '__glewGenerateTextureMipmap', '__glewTextureParameteri', '__glewTextureSubImage2D',
-					'__glewBindBufferBase']
+                    '__glewVertexArrayBindingDivisor', '__glewDeleteVertexArrays', 'glBindTexture', 'glDeleteTextures', '__glewCreateTextures', '__glewNamedFramebufferTexture',
+                    '__glewTextureStorage2D', '__glewBindFramebuffer', 'glIsTexture', '__glewGetTextureHandleARB', '__glewGenerateTextureMipmap', '__glewTextureParameteri', '__glewTextureSubImage2D',
+                    '__glewBindBufferBase', '__glewBindBuffer', '__glewBindBufferRange', '__glewCreateShaderProgramv', 'glDepthRange', '__glewDepthRangef', '__glewDepthRangeIndexed', '__glewViewportIndexedf']
 
 #allow calls you want to provide and not be auto generated
 allow_calls_provided = ['ALLOW_CALL(open_gl_mock, glewInit()).RETURN(GLEW_OK);',
diff --git a/tests/src/mocks/generation/opengl_mock_template.hpp b/tests/src/mocks/generation/opengl_mock_template.hpp
index 2c54bd1846058b290f79a2c03b4417ae453f0d33..a11718a838f242ab7a474a54a953214e043add1d 100644
--- a/tests/src/mocks/generation/opengl_mock_template.hpp
+++ b/tests/src/mocks/generation/opengl_mock_template.hpp
@@ -34,6 +34,8 @@
 #endif
 #endif
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "GL/glew.h"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/mocks/openvr_mock.cpp b/tests/src/mocks/openvr_mock.cpp
index 4b5fc468d4dab28ab2ae9cfed5a9a61a9469457c..31b624134a9ddf3553a816ccd90de5c3352c983c 100644
--- a/tests/src/mocks/openvr_mock.cpp
+++ b/tests/src/mocks/openvr_mock.cpp
@@ -20,6 +20,8 @@
 // limitations under the License.
 //------------------------------------------------------------------------------
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "mocks/openvr_mock.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/mocks/openvr_mock.hpp b/tests/src/mocks/openvr_mock.hpp
index 8502a5d2443ac5cbf4b625165f60f2cbd8006cd9..e0f25f34fbc254951c1886b98838783818d07ab3 100644
--- a/tests/src/mocks/openvr_mock.hpp
+++ b/tests/src/mocks/openvr_mock.hpp
@@ -25,6 +25,8 @@
 
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #ifdef OPENVR_MOCK_BUILD
 #define VR_API_EXPORT
diff --git a/tests/src/mocks/sdl_mock.hpp b/tests/src/mocks/sdl_mock.hpp
index 3faddfd628ae9facd6a4096e641a865ff89dd94d..9277c5e3ec9843add07acc6ef48031f9cb2fe590 100644
--- a/tests/src/mocks/sdl_mock.hpp
+++ b/tests/src/mocks/sdl_mock.hpp
@@ -23,6 +23,8 @@
 #ifndef TESTS_SRC_MOCKS_SDL_MOCK_HPP_
 #define TESTS_SRC_MOCKS_SDL_MOCK_HPP_
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "SDL.h"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/test-transform.cpp b/tests/src/test-transform.cpp
index 9871c5a5ff02ddb59c199188d36b5d3f9d2e13dc..a02f86e2635ce824d1efe520fe8154d30c34688f 100644
--- a/tests/src/test-transform.cpp
+++ b/tests/src/test-transform.cpp
@@ -26,6 +26,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/test_clear_pass.cpp b/tests/src/test_clear_pass.cpp
index 8ae007bdce6b795fb265c8e4685feaa95e5043df..d5db32896437c18990051b25e0c07b91b2fb4e03 100644
--- a/tests/src/test_clear_pass.cpp
+++ b/tests/src/test_clear_pass.cpp
@@ -22,6 +22,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "GL/glew.h"
 #include "glm/vec2.hpp"
diff --git a/tests/src/test_geometry_pass.cpp b/tests/src/test_geometry_pass.cpp
index a111eeee252dcab4e8f899ebd40ea4f86b35d9bb..2edd3f931eda628a101e8da96c77b147b8e5bdf0 100644
--- a/tests/src/test_geometry_pass.cpp
+++ b/tests/src/test_geometry_pass.cpp
@@ -27,6 +27,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "GL/glew.h"
 
diff --git a/tests/src/test_input_system.cpp b/tests/src/test_input_system.cpp
index 63b20191aeab02742ca194a7d22f6b52ea716afa..dc2a11142349b5407fabd1d807c19498bd2bdfc4 100644
--- a/tests/src/test_input_system.cpp
+++ b/tests/src/test_input_system.cpp
@@ -29,6 +29,8 @@
 
 #include "trompeloeil.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "mocks/openvr_mock.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/test_openvr_controller_system.cpp b/tests/src/test_openvr_controller_system.cpp
index 225ea9b498109211629d506451deb94b6834fde4..22d3acf01a91f4d15c9ceb424d311930288b2fe2 100644
--- a/tests/src/test_openvr_controller_system.cpp
+++ b/tests/src/test_openvr_controller_system.cpp
@@ -24,6 +24,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "GL/glew.h"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/test_projection.cpp b/tests/src/test_projection.cpp
index b1b4c963d59c733777bbe52adcb26cfcd378843b..d38f27056061dc6686fc944cb5ad3b236cda0d2b 100644
--- a/tests/src/test_projection.cpp
+++ b/tests/src/test_projection.cpp
@@ -22,6 +22,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/test_resource_manager.cpp b/tests/src/test_resource_manager.cpp
index 166a67b6257580306be138493810d9de18476105..48fd21d458f478b57082e46bb846c06ff34e7bc3 100644
--- a/tests/src/test_resource_manager.cpp
+++ b/tests/src/test_resource_manager.cpp
@@ -24,6 +24,8 @@
 #include <memory>
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/test_scene_loader.cpp b/tests/src/test_scene_loader.cpp
index 61ded29bd2c21f78b3fd5509555206180aa45feb..c62ab489b7bd3b926b0bbe978972a3bc37c3a0bf 100644
--- a/tests/src/test_scene_loader.cpp
+++ b/tests/src/test_scene_loader.cpp
@@ -24,8 +24,11 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/entity.hpp"
+#include "phx/mesh_handle.hpp"
 #include "phx/scene.hpp"
 #include "phx/scene_loader.hpp"
+#include "phx/transform.hpp"
 
 SCENARIO("The scene loader can load a model", "[phx][phx::SceneLoader]") {
   GIVEN("An empty scene") {
@@ -33,9 +36,37 @@ SCENARIO("The scene loader can load a model", "[phx][phx::SceneLoader]") {
     WHEN("We load a model into the scene") {
       std::string mesh_file{"models/2MeshTest/2meshTest.obj"};
       bool success = phx::SceneLoader::InsertModelIntoScene(mesh_file, &scene);
-      THEN("the scene contains 2 entities + the virtual platform") {
+
+      THEN(
+          "the scene contains 2 entities + the virtual platform + the root "
+          "entity") {
         REQUIRE(success);
-        REQUIRE(scene.GetEntities().size() == 3u);
+        REQUIRE(scene.GetEntities().size() == 4u);
+      }
+
+      THEN(
+          "the scene contains exactly one root entity with the same name like "
+          "the model + mesh entites are children of that entity") {
+        unsigned int nameCounter = 0;
+        bool meshHasWrongParent = false;
+
+        auto entityVec = scene.GetEntities();
+        for (auto currentEntity : entityVec) {
+          if (currentEntity->GetName() == "2meshTest") {
+            nameCounter++;
+          }
+          if (currentEntity->GetFirstComponent<phx::MeshHandle>() != nullptr) {
+            auto parentEntity =
+                currentEntity->GetFirstComponent<phx::Transform>()
+                    ->GetParent()
+                    ->GetEntity();
+            if (parentEntity->GetName() != "2meshTest") {
+              meshHasWrongParent = true;
+            }
+          }
+        }
+        REQUIRE(nameCounter == 1u);
+        REQUIRE(meshHasWrongParent == false);
       }
     }
   }
diff --git a/tests/src/test_shader.cpp b/tests/src/test_shader.cpp
index b433156e3078559d9ae89dc3f3bc06059fa6f024..1e7bdfffe16aaa32f55e419ad277d734c0ecd5ae 100644
--- a/tests/src/test_shader.cpp
+++ b/tests/src/test_shader.cpp
@@ -24,6 +24,8 @@
 #include <memory>
 #include <string>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "GL/glew.h"
 SUPPRESS_WARNINGS_END
diff --git a/tests/src/test_tracking_system.cpp b/tests/src/test_tracking_system.cpp
index 60a7c50731caed33ecc6efd44fc7cda04898f624..2b1ae42eabbcb6ac2a7d0e187008c9ab14253dcc 100644
--- a/tests/src/test_tracking_system.cpp
+++ b/tests/src/test_tracking_system.cpp
@@ -27,6 +27,8 @@
 
 #include "trompeloeil.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "mocks/openvr_mock.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/test_utilities/approx.hpp b/tests/test_utilities/approx.hpp
index 16f031df651358ce770b8c74690a4f4ee00a4dcb..f09bbcaaba026bf7bad7ccfeaf8468dfe4ba3e1b 100644
--- a/tests/test_utilities/approx.hpp
+++ b/tests/test_utilities/approx.hpp
@@ -30,6 +30,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/test_utilities/dummy_material_generator.hpp b/tests/test_utilities/dummy_material_generator.hpp
index 2cad5ae41924b409aa987a9d2775b667ef5932c5..87df638b6954851b52d679a169686e73b26ba468 100644
--- a/tests/test_utilities/dummy_material_generator.hpp
+++ b/tests/test_utilities/dummy_material_generator.hpp
@@ -27,6 +27,8 @@
 #include <utility>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec3.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/test_utilities/dummy_mesh_generator.hpp b/tests/test_utilities/dummy_mesh_generator.hpp
index 4e345384c93e938c6d2021f793f4e6a7465fad1e..d12a719e4e198051a7758675ac2770fac22f4426 100644
--- a/tests/test_utilities/dummy_mesh_generator.hpp
+++ b/tests/test_utilities/dummy_mesh_generator.hpp
@@ -27,6 +27,8 @@
 #include <utility>
 #include <vector>
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/vec3.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/test_utilities/glm_mat4.hpp b/tests/test_utilities/glm_mat4.hpp
index 3a0428365a52c6ab0e2e6c881bfb64a763b27e6c..c34f9e9eeb2d7daa75e5f752120f0018932145a0 100644
--- a/tests/test_utilities/glm_mat4.hpp
+++ b/tests/test_utilities/glm_mat4.hpp
@@ -30,6 +30,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/test_utilities/glm_quat.hpp b/tests/test_utilities/glm_quat.hpp
index 6d3d385ad4271744dc3e7e4034718366bc417b57..a6dd611a663dcbe7283f067ef91430d313b15473 100644
--- a/tests/test_utilities/glm_quat.hpp
+++ b/tests/test_utilities/glm_quat.hpp
@@ -30,6 +30,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/test_utilities/glm_vec3.hpp b/tests/test_utilities/glm_vec3.hpp
index 70415bcd3a383bb6e1ddd3feee145d42dd448660..d9a1de832d5e38f673b4111d7f2f2dbb3be0b57a 100644
--- a/tests/test_utilities/glm_vec3.hpp
+++ b/tests/test_utilities/glm_vec3.hpp
@@ -30,6 +30,8 @@
 
 #include "catch/catch.hpp"
 
+#include "phx/suppress_warnings.hpp"
+
 SUPPRESS_WARNINGS_BEGIN
 #include "glm/glm.hpp"
 SUPPRESS_WARNINGS_END
diff --git a/tests/test_utilities/log_capture.hpp b/tests/test_utilities/log_capture.hpp
index 53a258f406e908e9c181fd8c5ee3414faccc2d17..ba70a17190eb1d0c9f1ba7da9b9cc2cea32457cf 100644
--- a/tests/test_utilities/log_capture.hpp
+++ b/tests/test_utilities/log_capture.hpp
@@ -30,6 +30,8 @@
 
 #include "spdlog/sinks/sink.h"
 
+#include "phx/suppress_warnings.hpp"
+
 namespace test_utilities {
 
 SUPPRESS_WARNINGS_BEGIN_PADDED