diff --git a/cmake/WarningLevels.cmake b/cmake/WarningLevels.cmake
index 56a8e549bb1067c10917f306c3ef5e7b68d45396..cfe1929d1499691c9051370dd51170a008947a62 100644
--- a/cmake/WarningLevels.cmake
+++ b/cmake/WarningLevels.cmake
@@ -34,6 +34,7 @@ set(WARNING_LEVELS_RWTH_CLANG
   -Wno-weak-vtables
   -Wno-exit-time-destructors
   -Wno-global-constructors
+  -Wno-padded
 )
 
 set(WARNING_LEVELS_RWTH_GCC
diff --git a/cmake/suppress_warnings.hpp.in b/cmake/suppress_warnings.hpp.in
index f245a38cd380b356ca26bdcbf0cadf7a247d0ea5..ddd2a44b761befa44ce4e8096990ea918503ce1b 100644
--- a/cmake/suppress_warnings.hpp.in
+++ b/cmake/suppress_warnings.hpp.in
@@ -42,9 +42,6 @@
   _Pragma("clang diagnostic ignored \"-Wnon-virtual-dtor\"")              \
   _Pragma("clang diagnostic ignored \"-Wzero-as-null-pointer-constant\"") \
   _Pragma("clang diagnostic ignored \"-Wextra-semi\"")
-#define SUPPRESS_WARNINGS_BEGIN_PADDED                                    \
-  _Pragma("clang diagnostic push")                                        \
-  _Pragma("clang diagnostic ignored \"-Wpadded\"")
 #define SUPPRESS_WARNINGS_BEGIN_MISSING_DECLARATIONS                      \
   _Pragma("clang diagnostic push")                                        \
   _Pragma("clang diagnostic ignored \"-Wmissing-prototypes\"")
@@ -52,7 +49,6 @@
 
 #elif defined _MSC_VER
 #define SUPPRESS_WARNINGS_BEGIN __pragma(warning(push, 0));
-#define SUPPRESS_WARNINGS_BEGIN_PADDED  __pragma(warning(push));
 #define SUPPRESS_WARNINGS_BEGIN_MISSING_DECLARATIONS  __pragma(warning(push));
 #define SUPPRESS_WARNINGS_END __pragma(warning(pop));
 
@@ -70,9 +66,6 @@
   _Pragma("GCC diagnostic ignored \"-Wextra\"")                           \
   _Pragma("GCC diagnostic ignored \"-Wmissing-declarations\"")            \
   _Pragma("GCC diagnostic ignored \"-Wpadded\"")
-#define SUPPRESS_WARNINGS_BEGIN_PADDED                                    \
-  _Pragma("GCC diagnostic push")                                          \
-  _Pragma("GCC diagnostic ignored \"-Wpadded\"")
 #define SUPPRESS_WARNINGS_BEGIN_MISSING_DECLARATIONS                      \
   _Pragma("GCC diagnostic push")                                          \
   _Pragma("GCC diagnostic ignored \"-Wmissing-declarations\"")
diff --git a/demos/viewer/src/viewer_system.hpp b/demos/viewer/src/viewer_system.hpp
index d425eec4e77fd65b9705ec5e6fb0b9f0823ed149..dcb4d7168a8d7c85fa9139653846d83a9ef33ab4 100644
--- a/demos/viewer/src/viewer_system.hpp
+++ b/demos/viewer/src/viewer_system.hpp
@@ -31,8 +31,6 @@
 #include "phx/core/frame_timer.hpp"
 #include "phx/core/system.hpp"
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class ViewerSystem : public phx::System {
  public:
   ViewerSystem() = delete;
@@ -58,6 +56,4 @@ class ViewerSystem : public phx::System {
   explicit ViewerSystem(phx::Engine* engine);
 };
 
-SUPPRESS_WARNINGS_END
-
 #endif  // DEMOS_VIEWER_SRC_VIEWER_SYSTEM_HPP_
diff --git a/library/phx/core/engine.hpp b/library/phx/core/engine.hpp
index e13934b7390e5c2d4e674c7f61ac261fa30ae950..fabc9c0bd93fe3fa98a91c9c1dd28950dc96b83c 100644
--- a/library/phx/core/engine.hpp
+++ b/library/phx/core/engine.hpp
@@ -43,15 +43,13 @@ SUPPRESS_WARNINGS_END
 #include "phx/core/frame_timer.hpp"
 #include "phx/core/scene.hpp"
 #include "phx/core/system.hpp"
+#include "phx/export.hpp"
 #include "phx/scripting/behavior.hpp"
 #include "phx/utility/aspects/loggable.hpp"
 #include "phx/utility/orderable_list.hpp"
-#include "phx/export.hpp"
 
 namespace phx {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class PHOENIX_EXPORT Engine final : public Loggable {
  public:
   Engine();
@@ -165,8 +163,6 @@ std::vector<std::tuple<Components*...>> Engine::GetFirstComponentsMany() const {
   return scene_->GetFirstComponentsMany<Components...>();
 }
 
-SUPPRESS_WARNINGS_END
-
 }  // namespace phx
 
 #endif  // LIBRARY_PHX_CORE_ENGINE_HPP_
diff --git a/library/phx/input/input_system.hpp b/library/phx/input/input_system.hpp
index 0d4d4ccde4b8eda65f5c85250ec495e217e4b3cf..9862ea78119438869c1e37162909df8c9faba169 100644
--- a/library/phx/input/input_system.hpp
+++ b/library/phx/input/input_system.hpp
@@ -73,20 +73,12 @@ class PHOENIX_EXPORT InputSystem : public System {
 
   void UpdateSDLEvents();
 
-  // TODO(@tvierjahn) check if Wpadded is here only emitted by some clang
-  // versions.
-  // There will be only one input system.Padding will not waste
-  // significant memory
-  SUPPRESS_WARNINGS_BEGIN_PADDED
-
   boost::signals2::signal<void()> quit_signal_;
   boost::signals2::signal<void(char)> key_press_signal_;
   boost::signals2::signal<void(char)> key_release_signal_;
   boost::signals2::signal<void(int, int)> mouse_move_signal_;
   boost::signals2::signal<void(unsigned int)> mouse_press_signal_;
   boost::signals2::signal<void(unsigned int)> mouse_release_signal_;
-
-  SUPPRESS_WARNINGS_END
 };
 
 }  // namespace phx
diff --git a/library/phx/input/openvr_controller_behavior.hpp b/library/phx/input/openvr_controller_behavior.hpp
index c31643b67d511b4a813eb82e0d75db5f0039648d..99483e41811c55be517c7eb80fde13b3d20d5153 100644
--- a/library/phx/input/openvr_controller_behavior.hpp
+++ b/library/phx/input/openvr_controller_behavior.hpp
@@ -25,11 +25,10 @@
 
 #include "phx/suppress_warnings.hpp"
 
-#include "phx/scripting/behavior.hpp"
 #include "phx/export.hpp"
+#include "phx/scripting/behavior.hpp"
 
 namespace phx {
-SUPPRESS_WARNINGS_BEGIN_PADDED
 class PHOENIX_EXPORT OpenVRControllerBehavior : public Behavior {
  public:
   enum Side { LEFT, RIGHT };
@@ -42,7 +41,6 @@ class PHOENIX_EXPORT OpenVRControllerBehavior : public Behavior {
  private:
   Side side_ = Side::LEFT;
 };
-SUPPRESS_WARNINGS_END
 }  // namespace phx
 
 #endif  // LIBRARY_PHX_INPUT_OPENVR_CONTROLLER_BEHAVIOR_HPP_
diff --git a/library/phx/rendering/auxiliary/splash_screen.hpp b/library/phx/rendering/auxiliary/splash_screen.hpp
index 2a9007e7b2a870d788a5492fef07de605364332a..56faa94f741e3296f50dc891a5fe0f7d92428bbd 100644
--- a/library/phx/rendering/auxiliary/splash_screen.hpp
+++ b/library/phx/rendering/auxiliary/splash_screen.hpp
@@ -38,7 +38,6 @@
 
 namespace phx {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
 class PHOENIX_EXPORT SplashScreen : public System {
  public:
   SplashScreen() = delete;
@@ -65,7 +64,6 @@ class PHOENIX_EXPORT SplashScreen : public System {
   std::mutex load_progress_mutex_;
   float load_progress_ = 0.f;
 };
-SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
diff --git a/library/phx/rendering/backend/render_target.hpp b/library/phx/rendering/backend/render_target.hpp
index be07213d041ca9e41aec02c17b72d5e00f56090f..bed8eda040f06f9c5916be24de53b12962be7908 100644
--- a/library/phx/rendering/backend/render_target.hpp
+++ b/library/phx/rendering/backend/render_target.hpp
@@ -43,7 +43,6 @@ SUPPRESS_WARNINGS_END
 
 namespace phx {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
 class PHOENIX_EXPORT RenderTarget : public Component, public gl::framebuffer {
  public:
   RenderTarget() = delete;
@@ -69,7 +68,6 @@ class PHOENIX_EXPORT RenderTarget : public Component, public gl::framebuffer {
 
   glm::uvec2 dimensions_;
 };
-SUPPRESS_WARNINGS_END
 
 }  // namespace phx
 
diff --git a/library/phx/rendering/backend/shader_program.hpp b/library/phx/rendering/backend/shader_program.hpp
index 93c6d7a56319bc436740a4e938fba132490a00ec..679130847e0cc4b611c486eb881fff57b752d819 100644
--- a/library/phx/rendering/backend/shader_program.hpp
+++ b/library/phx/rendering/backend/shader_program.hpp
@@ -37,19 +37,15 @@ SUPPRESS_WARNINGS_END
 #include "gl/program.hpp"
 #include "gl/shader.hpp"
 
+#include "phx/export.hpp"
 #include "phx/rendering/components/transform.hpp"
 #include "phx/rendering/render_passes/render_pass.hpp"
+#include "phx/resources/resource_pointer.hpp"
 #include "phx/resources/types/mesh.hpp"
 #include "phx/resources/types/shader_source.hpp"
-#include "phx/resources/resource_pointer.hpp"
-#include "phx/export.hpp"
 
 namespace phx {
 
-// TODO(@all) Will padding waste too much memory? How many shaders will we
-// have?
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class PHOENIX_EXPORT ShaderProgram : public gl::program {
  public:
   enum ShaderChannel {
@@ -71,7 +67,7 @@ class PHOENIX_EXPORT ShaderProgram : public gl::program {
   ShaderProgram& operator=(ShaderProgram&&) = default;
 
   bool SetShader(ShaderChannel channel,
-                      ResourcePointer<ShaderSource> shader_source);
+                 ResourcePointer<ShaderSource> shader_source);
 
   template <typename T>
   void SetUniform(const std::string& name, T value) {
@@ -91,8 +87,6 @@ class PHOENIX_EXPORT ShaderProgram : public gl::program {
   std::array<ShaderHandle, MAX_SHADER_CHANNEL> shaders_;
 };
 
-SUPPRESS_WARNINGS_END
-
 }  // namespace phx
 
 #endif  // LIBRARY_PHX_RENDERING_BACKEND_SHADER_PROGRAM_HPP_
diff --git a/library/phx/rendering/components/light.hpp b/library/phx/rendering/components/light.hpp
index e8abc925810b1d63db905fad6a885e2843d2cb90..9c0403289ad1584c5ad8463b233cb6a001917679 100644
--- a/library/phx/rendering/components/light.hpp
+++ b/library/phx/rendering/components/light.hpp
@@ -36,8 +36,6 @@ SUPPRESS_WARNINGS_END
 
 namespace phx {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class PHOENIX_EXPORT Light final : public Component {
  public:
   enum class Type {
@@ -80,8 +78,6 @@ class PHOENIX_EXPORT Light final : public Component {
   float spot_angle_ = 45.0f;  // Only for spot lights.
 };
 
-SUPPRESS_WARNINGS_END
-
 }  // namespace phx
 
 #endif  // LIBRARY_PHX_RENDERING_COMPONENTS_LIGHT_HPP_
diff --git a/library/phx/rendering/render_passes/geometry_pass.hpp b/library/phx/rendering/render_passes/geometry_pass.hpp
index bd2edb0c40e650bf294feac2a7834babe3c53570..0b2104f103ee0ffa9a0ce2afd147d89630c36862 100644
--- a/library/phx/rendering/render_passes/geometry_pass.hpp
+++ b/library/phx/rendering/render_passes/geometry_pass.hpp
@@ -36,6 +36,7 @@ SUPPRESS_WARNINGS_BEGIN
 #include "gl/vertex_array.hpp"
 SUPPRESS_WARNINGS_END
 
+#include "phx/export.hpp"
 #include "phx/rendering/backend/render_target.hpp"
 #include "phx/rendering/backend/shader_program.hpp"
 #include "phx/rendering/components/light.hpp"
@@ -43,14 +44,11 @@ SUPPRESS_WARNINGS_END
 #include "phx/rendering/components/projection.hpp"
 #include "phx/rendering/components/transform.hpp"
 #include "phx/rendering/render_passes/render_pass.hpp"
-#include "phx/resources/types/mesh.hpp"
 #include "phx/resources/resource_manager.hpp"
-#include "phx/export.hpp"
+#include "phx/resources/types/mesh.hpp"
 
 namespace phx {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class PHOENIX_EXPORT GeometryPass : public RenderPass {
  public:
   explicit GeometryPass(RenderTarget* render_target);
@@ -87,8 +85,6 @@ class PHOENIX_EXPORT GeometryPass : public RenderPass {
   bool IsValid() const;
 
  private:
-  // TODO(@all) Will padding waste too much memory?
-  SUPPRESS_WARNINGS_BEGIN_PADDED
   struct RenderingResource {
     RenderingResource() = default;
     RenderingResource(const RenderingResource&) = delete;
@@ -107,7 +103,6 @@ class PHOENIX_EXPORT GeometryPass : public RenderPass {
     unsigned int vertex_buffer_size;
     unsigned int index_buffer_size;
   };
-  SUPPRESS_WARNINGS_END
 
   void SetUpShaders();
   void CreateRenderingResource();
@@ -136,8 +131,6 @@ class PHOENIX_EXPORT GeometryPass : public RenderPass {
   RenderTarget* render_target_;
 };
 
-SUPPRESS_WARNINGS_END
-
 }  // namespace phx
 
 #endif  // LIBRARY_PHX_RENDERING_RENDER_PASSES_GEOMETRY_PASS_HPP_
diff --git a/library/phx/resources/loaders/assimp_model_loader.hpp b/library/phx/resources/loaders/assimp_model_loader.hpp
index 9f5abd2073008c220b8b1aea02d50a0cc2b3b5b6..5b7777567c1c0a907194c4866ae77979b001134f 100644
--- a/library/phx/resources/loaders/assimp_model_loader.hpp
+++ b/library/phx/resources/loaders/assimp_model_loader.hpp
@@ -39,16 +39,15 @@ SUPPRESS_WARNINGS_BEGIN
 SUPPRESS_WARNINGS_END
 
 #include "phx/export.hpp"
-#include "phx/resources/types/material.hpp"
-#include "phx/resources/types/mesh.hpp"
-#include "phx/resources/types/model.hpp"
 #include "phx/resources/resource_declaration.hpp"
 #include "phx/resources/resource_load_strategy.hpp"
 #include "phx/resources/resource_pointer.hpp"
+#include "phx/resources/types/material.hpp"
+#include "phx/resources/types/mesh.hpp"
+#include "phx/resources/types/model.hpp"
 
 namespace phx {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
 class PHOENIX_EXPORT AssimpModelLoader final : public ResourceLoadStrategy {
  public:
   AssimpModelLoader();
@@ -114,7 +113,6 @@ class PHOENIX_EXPORT AssimpModelLoader final : public ResourceLoadStrategy {
   int last_material_index_ = kInvalidMaterialIndex;
   std::function<void(float)> on_progress_update_callback_;
 };
-SUPPRESS_WARNINGS_END
 
 template <typename FileSourceType>
 std::vector<glm::vec3> phx::AssimpModelLoader::LoadVectorData(
diff --git a/library/phx/scripting/behavior_system.hpp b/library/phx/scripting/behavior_system.hpp
index 11a95e0631e66ec4322c82e83dba5508d32fd967..e723ab04016c3b1aa9369dd78fb0c9079a050a15 100644
--- a/library/phx/scripting/behavior_system.hpp
+++ b/library/phx/scripting/behavior_system.hpp
@@ -31,8 +31,6 @@
 
 namespace phx {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class PHOENIX_EXPORT BehaviorSystem : public System {
  public:
   BehaviorSystem() = delete;
@@ -50,8 +48,6 @@ class PHOENIX_EXPORT BehaviorSystem : public System {
   explicit BehaviorSystem(Engine* engine);
 };
 
-SUPPRESS_WARNINGS_END
-
 }  // namespace phx
 
 #endif  // LIBRARY_PHX_SCRIPTING_BEHAVIOR_SYSTEM_HPP_
diff --git a/library/phx/utility/stream_helpers.hpp b/library/phx/utility/stream_helpers.hpp
index c464887c49b75208f9433a0181e50e5b2e4046db..89902b6cd7f208dc3f746915c003be3f36d55c51 100644
--- a/library/phx/utility/stream_helpers.hpp
+++ b/library/phx/utility/stream_helpers.hpp
@@ -41,7 +41,6 @@ SUPPRESS_WARNINGS_END
 // namespace like e.g. phx, leaving them in global namespace would not work
 namespace glm {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
 class PHOENIX_EXPORT PhxStreamSettings {
  public:
   explicit PhxStreamSettings(std::ostream& stream);
@@ -57,7 +56,6 @@ class PHOENIX_EXPORT PhxStreamSettings {
   std::streamsize stream_precision_;
   std::ios::fmtflags stream_flags_;
 };
-SUPPRESS_WARNINGS_END
 
 PHOENIX_EXPORT std::ostream& operator<<(std::ostream& out,
                                         const glm::vec2& vec);
diff --git a/tests/src/mocks/openvr_mock.hpp b/tests/src/mocks/openvr_mock.hpp
index c59ac3fdd0bb66001a37e71c9f2e1de8d173e071..855e2b48c5bf4951cc359382ca7a2d55e374535a 100644
--- a/tests/src/mocks/openvr_mock.hpp
+++ b/tests/src/mocks/openvr_mock.hpp
@@ -251,8 +251,6 @@ class OPENVR_MOCK_EXPORT IVRRenderModelsMock : public IVRRenderModels {
 
 }  // namespace vr
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class OPENVR_MOCK_EXPORT OpenVRMock {
  public:
   OpenVRMock()
@@ -357,8 +355,6 @@ class OPENVR_MOCK_EXPORT OpenVRMock {
   vr::IVRRenderModelsMock* ivr_render_models_mock_;
 };
 
-SUPPRESS_WARNINGS_END
-
 extern OPENVR_MOCK_EXPORT OpenVRMock openvr_mock;
 
 #define OPENVR_MOCK_ALLOW_ANY_CALL                                             \
diff --git a/tests/test_utilities/approx.hpp b/tests/test_utilities/approx.hpp
index f09bbcaaba026bf7bad7ccfeaf8468dfe4ba3e1b..bfd3956d4824c5a64936d39a9ceb4c35922519c6 100644
--- a/tests/test_utilities/approx.hpp
+++ b/tests/test_utilities/approx.hpp
@@ -38,8 +38,6 @@ SUPPRESS_WARNINGS_END
 
 namespace test_utilities {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 template <typename T>
 class Approx {
  public:
@@ -76,8 +74,6 @@ class Approx {
   const T& value_;
 };
 
-SUPPRESS_WARNINGS_END
-
 }  // namespace test_utilities
 
 namespace Catch {
diff --git a/tests/test_utilities/log_capture.hpp b/tests/test_utilities/log_capture.hpp
index ba70a17190eb1d0c9f1ba7da9b9cc2cea32457cf..aa0e5dddec6f8ee823877b6e032eafe98b81cf5b 100644
--- a/tests/test_utilities/log_capture.hpp
+++ b/tests/test_utilities/log_capture.hpp
@@ -34,8 +34,6 @@
 
 namespace test_utilities {
 
-SUPPRESS_WARNINGS_BEGIN_PADDED
-
 class LogCapture : public spdlog::sinks::sink {
  public:
   void log(const spdlog::details::log_msg& msg) override;
@@ -49,8 +47,6 @@ class LogCapture : public spdlog::sinks::sink {
   std::stringstream log_stream_;
 };
 
-SUPPRESS_WARNINGS_END
-
 }  // namespace test_utilities
 
 namespace Catch {