diff --git a/src/gpu/shader.cpp b/src/gpu/shader.cpp
index 8f48a93e..52dbf681 100644
--- a/src/gpu/shader.cpp
+++ b/src/gpu/shader.cpp
@@ -364,7 +364,7 @@ Shader::Shader(char const *vert, char const *frag)
         glGetActiveAttrib(data->prog_id, i, max_len, &attrib_len, (GLint*)&attrib_size, (GLenum*)&attrib_type, name_buffer);
 
         String name(name_buffer);
-        int index = 0;
+        int index = -1;
         VertexUsage usage = VertexUsage::Max;
         for (int j = 0; j < VertexUsage::Max; ++j)
         {
@@ -377,9 +377,10 @@ Shader::Shader(char const *vert, char const *frag)
             }
         }
 
-        if (usage == VertexUsage::Max || index == LONG_MIN || index == LONG_MAX)
+        if (usage == VertexUsage::Max || index == -1)
         {
-            Log::Error("unable to parse attribute sementic from name: %s", name_buffer);
+            Log::Error("unable to parse attribute semantic from name: %s",
+                       name_buffer);
         }
         else
         {
@@ -390,7 +391,7 @@ Shader::Shader(char const *vert, char const *frag)
 #ifdef _DEBUG
             if (data->attrib_locations.HasKey(flags))
             {
-                Log::Error("an error occured while parsing attribute sementics");
+                Log::Error("an error occured while parsing attribute semantics");
             }
 #endif
             data->attrib_locations[flags] = location;
diff --git a/src/input/controller.h b/src/input/controller.h
index 00ff4822..b2ade413 100644
--- a/src/input/controller.h
+++ b/src/input/controller.h
@@ -19,7 +19,12 @@ namespace lol
 class KeyBinding
 {
 public:
-    KeyBinding() : m_device(nullptr), m_current(false), m_previous(false), m_keyindex(-1) {}
+    KeyBinding()
+      : m_device(nullptr),
+        m_keyindex(-1),
+        m_current(false),
+        m_previous(false)
+    {}
 
     /** Indicate wheither the key is currently down */
     bool IsDown() const { return m_current; }
@@ -52,7 +57,14 @@ protected:
 class AxisBinding
 {
 public:
-    AxisBinding() : m_device(nullptr), m_current(0.0f), m_previous(0.0f), m_axisindex(-1), m_minkeyindex(-1), m_maxkeyindex(-1) {}
+    AxisBinding()
+      : m_device(nullptr),
+        m_axisindex(-1),
+        m_minkeyindex(-1),
+        m_maxkeyindex(-1),
+        m_current(0.0f),
+        m_previous(0.0f)
+    {}
 
     /** Gets the current absolute value of this axis */
     float GetValue() const { return m_current; }
@@ -69,7 +81,8 @@ public:
     void ClearBinding();
 
     /** Indicate wheither a physical device and axis has been bound */
-    bool IsBound() { return m_device && m_axisindex != -1 || m_maxkeyindex != -1; }
+    bool IsBound() { return m_device &&
+                            (m_axisindex != -1 || m_maxkeyindex != -1); }
 
 protected:
     void Update() { m_previous = m_current; m_current = IsBound() ? RetrieveCurrentValue() : 0.0f; }
diff --git a/src/lol/math/functions.h b/src/lol/math/functions.h
index ace1f180..1b53599e 100644
--- a/src/lol/math/functions.h
+++ b/src/lol/math/functions.h
@@ -171,20 +171,27 @@ static inline ldouble ceil(ldouble x) { return std::ceil(x); }
     static inline T fract(T x) { return x - lol::floor(x); } \
     static inline T min(T x, T y) { return std::min(x, y); } \
     static inline T max(T x, T y) { return std::max(x, y); } \
-    static inline T clamp(T x, T y, T z) { return min(max(x, y), z); } \
+    static inline T clamp(T x, T y, T z) { return min(max(x, y), z); }
+
+#define LOL_GENERIC_FUNC_SIGNED(T) \
+    LOL_GENERIC_FUNC(T) \
     static inline T sign(T x) { return (T)(((T)0 < x) - (x < (T)0)); }
 
-LOL_GENERIC_FUNC(uint8_t)
-LOL_GENERIC_FUNC(int8_t)
-LOL_GENERIC_FUNC(uint16_t)
-LOL_GENERIC_FUNC(int16_t)
-LOL_GENERIC_FUNC(uint32_t)
-LOL_GENERIC_FUNC(int32_t)
-LOL_GENERIC_FUNC(uint64_t)
-LOL_GENERIC_FUNC(int64_t)
-LOL_GENERIC_FUNC(float)
-LOL_GENERIC_FUNC(double)
-LOL_GENERIC_FUNC(ldouble)
+#define LOL_GENERIC_FUNC_UNSIGNED(T) \
+    LOL_GENERIC_FUNC(T) \
+    static inline T sign(T x) { return (T)((T)0 < x); }
+
+LOL_GENERIC_FUNC_UNSIGNED(uint8_t)
+LOL_GENERIC_FUNC_SIGNED(int8_t)
+LOL_GENERIC_FUNC_UNSIGNED(uint16_t)
+LOL_GENERIC_FUNC_SIGNED(int16_t)
+LOL_GENERIC_FUNC_UNSIGNED(uint32_t)
+LOL_GENERIC_FUNC_SIGNED(int32_t)
+LOL_GENERIC_FUNC_UNSIGNED(uint64_t)
+LOL_GENERIC_FUNC_SIGNED(int64_t)
+LOL_GENERIC_FUNC_SIGNED(float)
+LOL_GENERIC_FUNC_SIGNED(double)
+LOL_GENERIC_FUNC_SIGNED(ldouble)
 #undef LOL_GENERIC_FUNC
 
 } /* namespace lol */