diff --git a/xs/src/libslic3r/Utils.hpp b/xs/src/libslic3r/Utils.hpp
index 5bbf1b624..0b6b87d28 100644
--- a/xs/src/libslic3r/Utils.hpp
+++ b/xs/src/libslic3r/Utils.hpp
@@ -8,28 +8,20 @@ extern void trace(unsigned int level, const char *message);
 
 // Compute the next highest power of 2 of 32-bit v
 // http://graphics.stanford.edu/~seander/bithacks.html
-inline uint32_t next_highest_power_of_2(uint32_t v)
+template<typename T>
+inline T next_highest_power_of_2(T v)
 {
 	if (v != 0)
 	    -- v;
     v |= v >> 1;
     v |= v >> 2;
     v |= v >> 4;
-    v |= v >> 8;
-    v |= v >> 16;
-    return ++ v;
-}
-
-inline uint64_t next_highest_power_of_2(uint64_t v)
-{
-	if (v != 0)
-	    -- v;
-    v |= v >> 1;
-    v |= v >> 2;
-    v |= v >> 4;
-    v |= v >> 8;
-    v |= v >> 16;
-    v |= v >> 32;
+    if (sizeof(T) >= sizeof(uint16_t))
+    	v |= v >> 8;
+    if (sizeof(T) >= sizeof(uint32_t))
+	    v |= v >> 16;
+    if (sizeof(T) >= sizeof(uint64_t))
+	    v |= v >> 32;
     return ++ v;
 }