Index: kernel/arch/amd64/include/atomic.h
===================================================================
--- kernel/arch/amd64/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/amd64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -40,5 +40,6 @@
 #include <preemption.h>
 
-static inline void atomic_inc(atomic_t *val) {
+static inline void atomic_inc(atomic_t *val)
+{
 #ifdef CONFIG_SMP
 	asm volatile (
@@ -54,5 +55,6 @@
 }
 
-static inline void atomic_dec(atomic_t *val) {
+static inline void atomic_dec(atomic_t *val)
+{
 #ifdef CONFIG_SMP
 	asm volatile (
@@ -68,11 +70,12 @@
 }
 
-static inline long atomic_postinc(atomic_t *val) 
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long r = 1;
+	atomic_count_t r = 1;
 	
 	asm volatile (
 		"lock xaddq %[r], %[count]\n"
-		: [count] "+m" (val->count), [r] "+r" (r)
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -80,11 +83,12 @@
 }
 
-static inline long atomic_postdec(atomic_t *val) 
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
-	long r = -1;
+	atomic_count_t r = -1;
 	
 	asm volatile (
 		"lock xaddq %[r], %[count]\n"
-		: [count] "+m" (val->count), [r] "+r" (r)
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -95,11 +99,13 @@
 #define atomic_predec(val)  (atomic_postdec(val) - 1)
 
-static inline uint64_t test_and_set(atomic_t *val) {
-	uint64_t v;
+static inline atomic_count_t test_and_set(atomic_t *val)
+{
+	atomic_count_t v;
 	
 	asm volatile (
 		"movq $1, %[v]\n"
 		"xchgq %[v], %[count]\n"
-		: [v] "=r" (v), [count] "+m" (val->count)
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
 	);
 	
@@ -107,9 +113,8 @@
 }
 
-
 /** amd64 specific fast spinlock */
 static inline void atomic_lock_arch(atomic_t *val)
 {
-	uint64_t tmp;
+	atomic_count_t tmp;
 	
 	preemption_disable();
@@ -125,6 +130,8 @@
 		"testq %[tmp], %[tmp]\n"
 		"jnz 0b\n"
-		: [count] "+m" (val->count), [tmp] "=&r" (tmp)
+		: [count] "+m" (val->count),
+		  [tmp] "=&r" (tmp)
 	);
+	
 	/*
 	 * Prevent critical section code from bleeding out this way up.
Index: kernel/arch/amd64/include/types.h
===================================================================
--- kernel/arch/amd64/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/amd64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -55,4 +55,5 @@
 typedef uint64_t unative_t;
 typedef int64_t native_t;
+typedef uint64_t atomic_count_t;
 
 typedef struct {
Index: kernel/arch/arm32/include/atomic.h
===================================================================
--- kernel/arch/arm32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/arm32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -47,8 +47,6 @@
  *
  */
-static inline long atomic_add(atomic_t *val, int i)
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
 {
-	long ret;
-
 	/*
 	 * This implementation is for UP pre-ARMv6 systems where we do not have
@@ -57,5 +55,5 @@
 	ipl_t ipl = interrupts_disable();
 	val->count += i;
-	ret = val->count;
+	atomic_count_t ret = val->count;
 	interrupts_restore(ipl);
 	
@@ -66,4 +64,5 @@
  *
  * @param val Variable to be incremented.
+ *
  */
 static inline void atomic_inc(atomic_t *val)
@@ -75,4 +74,5 @@
  *
  * @param val Variable to be decremented.
+ *
  */
 static inline void atomic_dec(atomic_t *val) {
@@ -84,6 +84,7 @@
  * @param val Variable to be incremented.
  * @return    Value after incrementation.
+ *
  */
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	return atomic_add(val, 1);
@@ -94,6 +95,7 @@
  * @param val Variable to be decremented.
  * @return    Value after decrementation.
+ *
  */
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	return atomic_add(val, -1);
@@ -104,6 +106,7 @@
  * @param val Variable to be incremented.
  * @return    Value before incrementation.
+ *
  */
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	return atomic_add(val, 1) - 1;
@@ -114,6 +117,7 @@
  * @param val Variable to be decremented.
  * @return    Value before decrementation.
+ *
  */
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	return atomic_add(val, -1) + 1;
Index: kernel/arch/arm32/include/types.h
===================================================================
--- kernel/arch/arm32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/arm32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup arm32	
+/** @addtogroup arm32
  * @{
  */
@@ -38,7 +38,7 @@
 
 #ifndef DOXYGEN
-#	define ATTRIBUTE_PACKED __attribute__ ((packed))
+	#define ATTRIBUTE_PACKED __attribute__((packed))
 #else
-#	define ATTRIBUTE_PACKED
+	#define ATTRIBUTE_PACKED
 #endif
 
@@ -62,4 +62,5 @@
 typedef uint32_t unative_t;
 typedef int32_t native_t;
+typedef uint32_t atomic_count_t;
 
 typedef struct {
Index: kernel/arch/ia32/include/atomic.h
===================================================================
--- kernel/arch/ia32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/ia32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -40,5 +40,6 @@
 #include <preemption.h>
 
-static inline void atomic_inc(atomic_t *val) {
+static inline void atomic_inc(atomic_t *val)
+{
 #ifdef CONFIG_SMP
 	asm volatile (
@@ -54,5 +55,6 @@
 }
 
-static inline void atomic_dec(atomic_t *val) {
+static inline void atomic_dec(atomic_t *val)
+{
 #ifdef CONFIG_SMP
 	asm volatile (
@@ -68,11 +70,12 @@
 }
 
-static inline long atomic_postinc(atomic_t *val) 
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long r = 1;
+	atomic_count_t r = 1;
 	
 	asm volatile (
 		"lock xaddl %[r], %[count]\n"
-		: [count] "+m" (val->count), [r] "+r" (r)
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -80,11 +83,12 @@
 }
 
-static inline long atomic_postdec(atomic_t *val) 
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
-	long r = -1;
+	atomic_count_t r = -1;
 	
 	asm volatile (
 		"lock xaddl %[r], %[count]\n"
-		: [count] "+m" (val->count), [r] "+r"(r)
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -95,11 +99,13 @@
 #define atomic_predec(val)  (atomic_postdec(val) - 1)
 
-static inline uint32_t test_and_set(atomic_t *val) {
-	uint32_t v;
+static inline atomic_count_t test_and_set(atomic_t *val)
+{
+	atomic_count_t v;
 	
 	asm volatile (
 		"movl $1, %[v]\n"
 		"xchgl %[v], %[count]\n"
-		: [v] "=r" (v), [count] "+m" (val->count)
+		: [v] "=r" (v),
+		  [count] "+m" (val->count)
 	);
 	
@@ -110,5 +116,5 @@
 static inline void atomic_lock_arch(atomic_t *val)
 {
-	uint32_t tmp;
+	atomic_count_t tmp;
 	
 	preemption_disable();
@@ -124,6 +130,8 @@
 		"testl %[tmp], %[tmp]\n"
 		"jnz 0b\n"
-		: [count] "+m" (val->count), [tmp] "=&r" (tmp)
+		: [count] "+m" (val->count),
+		  [tmp] "=&r" (tmp)
 	);
+	
 	/*
 	 * Prevent critical section code from bleeding out this way up.
Index: kernel/arch/ia32/include/types.h
===================================================================
--- kernel/arch/ia32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/ia32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -55,4 +55,5 @@
 typedef uint32_t unative_t;
 typedef int32_t native_t;
+typedef uint32_t atomic_count_t;
 
 typedef struct {
Index: kernel/arch/ia64/include/atomic.h
===================================================================
--- kernel/arch/ia64/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/ia64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -36,8 +36,8 @@
 #define KERN_ia64_ATOMIC_H_
 
-static inline uint64_t test_and_set(atomic_t *val)
+static inline atomic_count_t test_and_set(atomic_t *val)
 {
-	uint64_t v;
-		
+	atomic_count_t v;
+	
 	asm volatile (
 		"movl %[v] = 0x1;;\n"
@@ -53,6 +53,5 @@
 {
 	do {
-		while (val->count)
-			;
+		while (val->count);
 	} while (test_and_set(val));
 }
@@ -60,5 +59,5 @@
 static inline void atomic_inc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -71,5 +70,5 @@
 static inline void atomic_dec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -80,7 +79,7 @@
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -93,7 +92,7 @@
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -106,7 +105,7 @@
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -119,7 +118,7 @@
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
Index: kernel/arch/ia64/include/types.h
===================================================================
--- kernel/arch/ia64/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/ia64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ia64	
+/** @addtogroup ia64
  * @{
  */
@@ -63,4 +63,5 @@
 typedef uint64_t unative_t;
 typedef int64_t native_t;
+typedef uint64_t atomic_count_t;
 
 typedef struct {
Index: kernel/arch/mips32/include/atomic.h
===================================================================
--- kernel/arch/mips32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/mips32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup mips32	
+/** @addtogroup mips32
  * @{
  */
@@ -51,8 +51,10 @@
  *
  * @return Value after addition.
+ *
  */
-static inline long atomic_add(atomic_t *val, int i)
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
 {
-	long tmp, v;
+	atomic_count_t tmp;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -64,6 +66,9 @@
 		"	beq %0, %4, 1b\n"   /* if the atomic operation failed, try again */
 		"	nop\n"
-		: "=&r" (tmp), "+m" (val->count), "=&r" (v)
-		: "r" (i), "i" (0)
+		: "=&r" (tmp),
+		  "+m" (val->count),
+		  "=&r" (v)
+		: "r" (i),
+		  "i" (0)
 	);
 	
@@ -71,6 +76,8 @@
 }
 
-static inline uint32_t test_and_set(atomic_t *val) {
-	uint32_t tmp, v;
+static inline atomic_count_t test_and_set(atomic_t *val)
+{
+	atomic_count_t tmp;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -82,5 +89,7 @@
 		"	beqz %0, 1b\n"
 		"2:\n"
-		: "=&r" (tmp), "+m" (val->count), "=&r" (v)
+		: "=&r" (tmp),
+		  "+m" (val->count),
+		  "=&r" (v)
 		: "i" (1)
 	);
@@ -89,8 +98,8 @@
 }
 
-static inline void atomic_lock_arch(atomic_t *val) {
+static inline void atomic_lock_arch(atomic_t *val)
+{
 	do {
-		while (val->count)
-			;
+		while (val->count);
 	} while (test_and_set(val));
 }
Index: kernel/arch/mips32/include/types.h
===================================================================
--- kernel/arch/mips32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/mips32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup mips32	
+/** @addtogroup mips32
  * @{
  */
@@ -55,4 +55,5 @@
 typedef uint32_t unative_t;
 typedef int32_t native_t;
+typedef uint32_t atomic_count_t;
 
 typedef struct {
Index: kernel/arch/ppc32/include/atomic.h
===================================================================
--- kernel/arch/ppc32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/ppc32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ppc32	
+/** @addtogroup ppc32
  * @{
  */
@@ -38,6 +38,6 @@
 static inline void atomic_inc(atomic_t *val)
 {
-	long tmp;
-
+	atomic_count_t tmp;
+	
 	asm volatile (
 		"1:\n"
@@ -46,6 +46,8 @@
 		"stwcx. %0, 0, %2\n"
 		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
+		: "=&r" (tmp),
+		  "=m" (val->count)
+		: "r" (&val->count),
+		  "m" (val->count)
 		: "cc"
 	);
@@ -54,19 +56,21 @@
 static inline void atomic_dec(atomic_t *val)
 {
-	long tmp;
-
+	atomic_count_t tmp;
+	
 	asm volatile (
 		"1:\n"
 		"lwarx %0, 0, %2\n"
 		"addic %0, %0, -1\n"
-		"stwcx.	%0, 0, %2\n"
+		"stwcx. %0, 0, %2\n"
 		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
+		: "=&r" (tmp),
+		  "=m" (val->count)
+		: "r" (&val->count),
+		  "m" (val->count)
 		: "cc"
 	);
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	atomic_inc(val);
@@ -74,5 +78,5 @@
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	atomic_dec(val);
@@ -80,5 +84,5 @@
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	atomic_inc(val);
@@ -86,5 +90,5 @@
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	atomic_dec(val);
Index: kernel/arch/ppc32/include/types.h
===================================================================
--- kernel/arch/ppc32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/ppc32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ppc32	
+/** @addtogroup ppc32
  * @{
  */
@@ -55,4 +55,5 @@
 typedef uint32_t unative_t;
 typedef int32_t native_t;
+typedef uint32_t atomic_count_t;
 
 typedef struct {
Index: kernel/arch/sparc64/include/atomic.h
===================================================================
--- kernel/arch/sparc64/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/sparc64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup sparc64	
+/** @addtogroup sparc64
  * @{
  */
@@ -45,40 +45,47 @@
  *
  * @param val Atomic variable.
- * @param i Signed value to be added.
+ * @param i   Signed value to be added.
  *
  * @return Value of the atomic variable as it existed before addition.
+ *
  */
-static inline long atomic_add(atomic_t *val, int i)
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
 {
-	uint64_t a, b;
-
+	atomic_count_t a;
+	atomic_count_t b;
+	
 	do {
-		volatile uintptr_t x = (uint64_t) &val->count;
-
-		a = *((uint64_t *) x);
+		volatile uintptr_t ptr = (uintptr_t) &val->count;
+		
+		a = *((atomic_count_t *) ptr);
 		b = a + i;
-		asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *)x)),
-		    "+r" (b) : "r" (a));
+		
+		asm volatile (
+			"casx %0, %2, %1\n"
+			: "+m" (*((atomic_count_t *) ptr)),
+		      "+r" (b)
+		    : "r" (a)
+		);
 	} while (a != b);
-
+	
 	return a;
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	return atomic_add(val, 1) + 1;
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	return atomic_add(val, 1);
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	return atomic_add(val, -1) - 1;
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	return atomic_add(val, -1);
@@ -95,12 +102,16 @@
 }
 
-static inline long test_and_set(atomic_t *val)
+static inline atomic_count_t test_and_set(atomic_t *val)
 {
-	uint64_t v = 1;
-	volatile uintptr_t x = (uint64_t) &val->count;
-
-	asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *) x)),
-	    "+r" (v) : "r" (0));
-
+	atomic_count_t v = 1;
+	volatile uintptr_t ptr = (uintptr_t) &val->count;
+	
+	asm volatile (
+		"casx %0, %2, %1\n"
+		: "+m" (*((atomic_count_t *) ptr)),
+	      "+r" (v)
+	    : "r" (0)
+	);
+	
 	return v;
 }
@@ -108,24 +119,27 @@
 static inline void atomic_lock_arch(atomic_t *val)
 {
-	uint64_t tmp1 = 1;
-	uint64_t tmp2 = 0;
-
-	volatile uintptr_t x = (uint64_t) &val->count;
-
+	atomic_count_t tmp1 = 1;
+	atomic_count_t tmp2 = 0;
+	
+	volatile uintptr_t ptr = (uintptr_t) &val->count;
+	
 	preemption_disable();
-
+	
 	asm volatile (
-	"0:\n"
-		"casx %0, %3, %1\n"
-		"brz %1, 2f\n"
-		"nop\n"
-	"1:\n"
-		"ldx %0, %2\n"
-		"brz %2, 0b\n"
-		"nop\n"
-		"ba %%xcc, 1b\n"
-		"nop\n"
-	"2:\n"
-		: "+m" (*((uint64_t *) x)), "+r" (tmp1), "+r" (tmp2) : "r" (0)
+		"0:\n"
+			"casx %0, %3, %1\n"
+			"brz %1, 2f\n"
+			"nop\n"
+		"1:\n"
+			"ldx %0, %2\n"
+			"brz %2, 0b\n"
+			"nop\n"
+			"ba %%xcc, 1b\n"
+			"nop\n"
+		"2:\n"
+		: "+m" (*((atomic_count_t *) ptr)),
+		  "+r" (tmp1),
+		  "+r" (tmp2)
+		: "r" (0)
 	);
 	
Index: kernel/arch/sparc64/include/types.h
===================================================================
--- kernel/arch/sparc64/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/arch/sparc64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup sparc64	
+/** @addtogroup sparc64
  * @{
  */
@@ -55,4 +55,5 @@
 typedef uint64_t unative_t;
 typedef int64_t native_t;
+typedef uint64_t atomic_count_t;
 
 typedef struct {
Index: kernel/generic/include/atomic.h
===================================================================
--- kernel/generic/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/generic/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup generic	
+/** @addtogroup generic
  * @{
  */
@@ -36,16 +36,18 @@
 #define KERN_ATOMIC_H_
 
+#include <arch/types.h>
+
 typedef struct atomic {
-	volatile long count;
+	volatile atomic_count_t count;
 } atomic_t;
 
 #include <arch/atomic.h>
 
-static inline void atomic_set(atomic_t *val, long i)
+static inline void atomic_set(atomic_t *val, atomic_count_t i)
 {
 	val->count = i;
 }
 
-static inline long atomic_get(atomic_t *val)
+static inline atomic_count_t atomic_get(atomic_t *val)
 {
 	return val->count;
Index: kernel/generic/src/proc/scheduler.c
===================================================================
--- kernel/generic/src/proc/scheduler.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/generic/src/proc/scheduler.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -542,6 +542,9 @@
 {
 	thread_t *t;
-	int count, average, j, k = 0;
+	int count;
+	atomic_count_t average;
 	unsigned int i;
+	int j;
+	int k = 0;
 	ipl_t ipl;
 
Index: kernel/test/fpu/fpu1_ia64.c
===================================================================
--- kernel/test/fpu/fpu1_ia64.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/test/fpu/fpu1_ia64.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -128,5 +128,6 @@
 char *test_fpu1(void)
 {
-	unsigned int i, total = 0;
+	unsigned int i;
+	atomic_count_t total = 0;
 	
 	waitq_initialize(&can_start);
@@ -159,5 +160,5 @@
 	waitq_wakeup(&can_start, WAKEUP_ALL);
 	
-	while (atomic_get(&threads_ok) != (long) total) {
+	while (atomic_get(&threads_ok) != total) {
 		TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok));
 		thread_sleep(1);
Index: kernel/test/fpu/fpu1_x86.c
===================================================================
--- kernel/test/fpu/fpu1_x86.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/test/fpu/fpu1_x86.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -125,5 +125,6 @@
 char *test_fpu1(void)
 {
-	unsigned int i, total = 0;
+	unsigned int i;
+	atomic_count_t total = 0;
 	
 	waitq_initialize(&can_start);
@@ -156,5 +157,5 @@
 	waitq_wakeup(&can_start, WAKEUP_ALL);
 	
-	while (atomic_get(&threads_ok) != (long) total) {
+	while (atomic_get(&threads_ok) != total) {
 		TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok));
 		thread_sleep(1);
Index: kernel/test/fpu/mips2.c
===================================================================
--- kernel/test/fpu/mips2.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/test/fpu/mips2.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -111,5 +111,6 @@
 char *test_mips2(void)
 {
-	unsigned int i, total = 0;
+	unsigned int i;
+	atomic_count_t total = 0;
 	
 	waitq_initialize(&can_start);
@@ -138,9 +139,9 @@
 	
 	TPRINTF("ok\n");
-		
+	
 	thread_sleep(1);
 	waitq_wakeup(&can_start, WAKEUP_ALL);
 	
-	while (atomic_get(&threads_ok) != (long) total) {
+	while (atomic_get(&threads_ok) != total) {
 		TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok));
 		thread_sleep(1);
Index: kernel/test/fpu/sse1.c
===================================================================
--- kernel/test/fpu/sse1.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/test/fpu/sse1.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -109,5 +109,6 @@
 char *test_sse1(void)
 {
-	unsigned int i, total = 0;
+	unsigned int i;
+	atomic_count_t total = 0;
 	
 	waitq_initialize(&can_start);
@@ -140,5 +141,5 @@
 	waitq_wakeup(&can_start, WAKEUP_ALL);
 	
-	while (atomic_get(&threads_ok) != (long) total) {
+	while (atomic_get(&threads_ok) != total) {
 		TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok));
 		thread_sleep(1);
Index: kernel/test/synch/rwlock5.c
===================================================================
--- kernel/test/synch/rwlock5.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/test/synch/rwlock5.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -70,5 +70,6 @@
 {
 	int i, j, k;
-	long readers, writers;
+	atomic_count_t readers;
+	atomic_count_t writers;
 	
 	waitq_initialize(&can_start);
Index: kernel/test/synch/semaphore1.c
===================================================================
--- kernel/test/synch/semaphore1.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/test/synch/semaphore1.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -73,5 +73,6 @@
 {
 	int i, j, k;
-	int consumers, producers;
+	atomic_count_t consumers;
+	atomic_count_t producers;
 	
 	waitq_initialize(&can_start);
Index: kernel/test/thread/thread1.c
===================================================================
--- kernel/test/thread/thread1.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ kernel/test/thread/thread1.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -55,10 +55,11 @@
 char *test_thread1(void)
 {
-	unsigned int i, total = 0;
+	unsigned int i;
+	atomic_count_t total = 0;
 	
 	atomic_set(&finish, 1);
 	atomic_set(&threads_finished, 0);
 	
-	for (i = 0; i < THREADS; i++) {  
+	for (i = 0; i < THREADS; i++) {
 		thread_t *t;
 		if (!(t = thread_create(threadtest, NULL, TASK, 0, "threadtest", false))) {
@@ -74,5 +75,5 @@
 	
 	atomic_set(&finish, 0);
-	while (atomic_get(&threads_finished) < ((long) total)) {
+	while (atomic_get(&threads_finished) < total) {
 		TPRINTF("Threads left: %d\n", total - atomic_get(&threads_finished));
 		thread_sleep(1);
Index: uspace/app/tester/thread/thread1.c
===================================================================
--- uspace/app/tester/thread/thread1.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/app/tester/thread/thread1.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -53,5 +53,5 @@
 {
 	unsigned int i;
-	int total = 0;
+	atomic_count_t total = 0;
 	
 	atomic_set(&finish, 1);
Index: uspace/lib/libc/arch/amd64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/amd64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -42,33 +42,28 @@
 #include <atomicdflt.h>
 
-static inline void atomic_inc(atomic_t *val) {
-	asm volatile ("lock incq %0\n" : "+m" (val->count));
+static inline void atomic_inc(atomic_t *val)
+{
+	asm volatile (
+		"lock incq %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline void atomic_dec(atomic_t *val) {
-	asm volatile ("lock decq %0\n" : "+m" (val->count));
+static inline void atomic_dec(atomic_t *val)
+{
+	asm volatile (
+		"lock decq %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline long atomic_postinc(atomic_t *val) 
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long r;
-
-	asm volatile (
-		"movq $1, %0\n"
-		"lock xaddq %0, %1\n"
-		: "=r" (r), "+m" (val->count)
-	);
-
-	return r;
-}
-
-static inline long atomic_postdec(atomic_t *val) 
-{
-	long r;
+	atomic_count_t r = 1;
 	
 	asm volatile (
-		"movq $-1, %0\n"
-		"lock xaddq %0, %1\n"
-		: "=r" (r), "+m" (val->count)
+		"lock xaddq %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -76,6 +71,19 @@
 }
 
-#define atomic_preinc(val) (atomic_postinc(val) + 1)
-#define atomic_predec(val) (atomic_postdec(val) - 1)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
+{
+	atomic_count_t r = -1;
+	
+	asm volatile (
+		"lock xaddq %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
+	);
+	
+	return r;
+}
+
+#define atomic_preinc(val)  (atomic_postinc(val) + 1)
+#define atomic_predec(val)  (atomic_postdec(val) - 1)
 
 #endif
Index: uspace/lib/libc/arch/amd64/include/types.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/amd64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -54,4 +54,6 @@
 
 typedef uint64_t uintptr_t;
+typedef uint64_t atomic_count_t;
+typedef int64_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/arm32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/arm32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcarm32	
+/** @addtogroup libcarm32
  * @{
  */
@@ -38,5 +38,5 @@
 
 #define LIBC_ARCH_ATOMIC_H_
-#define CAS 
+#define CAS
 
 #include <atomicdflt.h>
@@ -46,8 +46,8 @@
 extern uintptr_t *ras_page;
 
-static inline bool cas(atomic_t *val, long ov, long nv)
-{
-	long ret = 0;
-
+static inline bool cas(atomic_t *val, atomic_count_t ov, atomic_count_t nv)
+{
+	atomic_count_t ret = 0;
+	
 	/*
 	 * The following instructions between labels 1 and 2 constitute a
@@ -75,9 +75,11 @@
 		: "memory"
 	);
-
+	
 	ras_page[0] = 0;
-	asm volatile ("" ::: "memory");	
+	asm volatile (
+		"" ::: "memory"
+	);
 	ras_page[1] = 0xffffffff;
-
+	
 	return (bool) ret;
 }
@@ -89,9 +91,10 @@
  *
  * @return Value after addition.
- */
-static inline long atomic_add(atomic_t *val, int i)
-{
-	long ret = 0;
-
+ *
+ */
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
+{
+	atomic_count_t ret = 0;
+	
 	/*
 	 * The following instructions between labels 1 and 2 constitute a
@@ -115,9 +118,11 @@
 		: [imm] "r" (i)
 	);
-
+	
 	ras_page[0] = 0;
-	asm volatile ("" ::: "memory");	
+	asm volatile (
+		"" ::: "memory"
+	);
 	ras_page[1] = 0xffffffff;
-
+	
 	return ret;
 }
@@ -127,4 +132,5 @@
  *
  * @param val Variable to be incremented.
+ *
  */
 static inline void atomic_inc(atomic_t *val)
@@ -137,4 +143,5 @@
  *
  * @param val Variable to be decremented.
+ *
  */
 static inline void atomic_dec(atomic_t *val)
@@ -148,6 +155,7 @@
  * @param val Variable to be incremented.
  * @return    Value after incrementation.
- */
-static inline long atomic_preinc(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	return atomic_add(val, 1);
@@ -159,6 +167,7 @@
  * @param val Variable to be decremented.
  * @return    Value after decrementation.
- */
-static inline long atomic_predec(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	return atomic_add(val, -1);
@@ -170,6 +179,7 @@
  * @param val Variable to be incremented.
  * @return    Value before incrementation.
- */
-static inline long atomic_postinc(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	return atomic_add(val, 1) - 1;
@@ -181,6 +191,7 @@
  * @param val Variable to be decremented.
  * @return    Value before decrementation.
- */
-static inline long atomic_postdec(atomic_t *val)
+ *
+ */
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	return atomic_add(val, -1) + 1;
Index: uspace/lib/libc/arch/arm32/include/types.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/arm32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -55,4 +55,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/ia32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/ia32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -40,33 +40,28 @@
 #include <atomicdflt.h>
 
-static inline void atomic_inc(atomic_t *val) {
-	asm volatile ("lock incl %0\n" : "+m" (val->count));
+static inline void atomic_inc(atomic_t *val)
+{
+	asm volatile (
+		"lock incl %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline void atomic_dec(atomic_t *val) {
-	asm volatile ("lock decl %0\n" : "+m" (val->count));
+static inline void atomic_dec(atomic_t *val)
+{
+	asm volatile (
+		"lock decl %[count]\n"
+		: [count] "+m" (val->count)
+	);
 }
 
-static inline long atomic_postinc(atomic_t *val) 
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long r;
-
-	asm volatile (
-		"movl $1, %0\n"
-		"lock xaddl %0, %1\n"
-		: "=r" (r), "+m" (val->count)
-	);
-
-	return r;
-}
-
-static inline long atomic_postdec(atomic_t *val) 
-{
-	long r;
+	atomic_count_t r = 1;
 	
 	asm volatile (
-		"movl $-1, %0\n"
-		"lock xaddl %0, %1\n"
-		: "=r" (r), "+m" (val->count)
+		"lock xaddl %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
 	);
 	
@@ -74,6 +69,19 @@
 }
 
-#define atomic_preinc(val) (atomic_postinc(val) + 1)
-#define atomic_predec(val) (atomic_postdec(val) - 1)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
+{
+	atomic_count_t r = -1;
+	
+	asm volatile (
+		"lock xaddl %[r], %[count]\n"
+		: [count] "+m" (val->count),
+		  [r] "+r" (r)
+	);
+	
+	return r;
+}
+
+#define atomic_preinc(val)  (atomic_postinc(val) + 1)
+#define atomic_predec(val)  (atomic_postdec(val) - 1)
 
 #endif
Index: uspace/lib/libc/arch/ia32/include/types.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/ia32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -54,4 +54,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/ia64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/ia64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -42,5 +42,5 @@
 static inline void atomic_inc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -53,5 +53,5 @@
 static inline void atomic_dec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -62,7 +62,7 @@
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -75,7 +75,7 @@
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -88,7 +88,7 @@
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
@@ -101,7 +101,7 @@
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
-	long v;
+	atomic_count_t v;
 	
 	asm volatile (
Index: uspace/lib/libc/arch/ia64/include/types.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/ia64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -59,4 +59,6 @@
 
 typedef uint64_t uintptr_t;
+typedef uint64_t atomic_count_t;
+typedef int64_t atomic_signed_t;
 
 typedef struct {
Index: uspace/lib/libc/arch/mips32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/mips32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,9 +27,9 @@
  */
 
-/** @addtogroup libcmips32	
+/** @addtogroup libcmips32
  * @{
  */
 /** @file
- * @ingroup libcmips32eb	
+ * @ingroup libcmips32eb
  */
 
@@ -41,24 +41,26 @@
 #include <atomicdflt.h>
 
-#define atomic_inc(x)	((void) atomic_add(x, 1))
-#define atomic_dec(x)	((void) atomic_add(x, -1))
+#define atomic_inc(x)  ((void) atomic_add(x, 1))
+#define atomic_dec(x)  ((void) atomic_add(x, -1))
 
-#define atomic_postinc(x) (atomic_add(x, 1) - 1)
-#define atomic_postdec(x) (atomic_add(x, -1) + 1)
+#define atomic_postinc(x)  (atomic_add(x, 1) - 1)
+#define atomic_postdec(x)  (atomic_add(x, -1) + 1)
 
-#define atomic_preinc(x) atomic_add(x, 1)
-#define atomic_predec(x) atomic_add(x, -1)
+#define atomic_preinc(x)  atomic_add(x, 1)
+#define atomic_predec(x)  atomic_add(x, -1)
 
 /* Atomic addition of immediate value.
  *
  * @param val Memory location to which will be the immediate value added.
- * @param i Signed immediate that will be added to *val.
+ * @param i   Signed immediate that will be added to *val.
  *
  * @return Value after addition.
+ *
  */
-static inline long atomic_add(atomic_t *val, int i)
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
 {
-	long tmp, v;
-
+	atomic_count_t tmp;
+	atomic_count_t v;
+	
 	asm volatile (
 		"1:\n"
@@ -70,8 +72,11 @@
 		/*	nop	*/		/* nop is inserted automatically by compiler */
 		"	nop\n"
-		: "=&r" (tmp), "+m" (val->count), "=&r" (v)
-		: "r" (i), "i" (0)
-		);
-
+		: "=&r" (tmp),
+		  "+m" (val->count),
+		  "=&r" (v)
+		: "r" (i),
+		  "i" (0)
+	);
+	
 	return v;
 }
Index: uspace/lib/libc/arch/mips32/include/types.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/mips32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcmips32	
+/** @addtogroup libcmips32
  * @{
  */
@@ -55,4 +55,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/ppc32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/ppc32/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcppc32	
+/** @addtogroup libcppc32
  * @{
  */
@@ -42,6 +42,6 @@
 static inline void atomic_inc(atomic_t *val)
 {
-	long tmp;
-
+	atomic_count_t tmp;
+	
 	asm volatile (
 		"1:\n"
@@ -50,25 +50,31 @@
 		"stwcx. %0, 0, %2\n"
 		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
+		: "=&r" (tmp),
+		  "=m" (val->count)
+		: "r" (&val->count),
+		  "m" (val->count)
+		: "cc"
+	);
 }
 
 static inline void atomic_dec(atomic_t *val)
 {
-	long tmp;
-
+	atomic_count_t tmp;
+	
 	asm volatile (
 		"1:\n"
 		"lwarx %0, 0, %2\n"
 		"addic %0, %0, -1\n"
-		"stwcx.	%0, 0, %2\n"
+		"stwcx. %0, 0, %2\n"
 		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
+		: "=&r" (tmp),
+		  "=m" (val->count)
+		: "r" (&val->count),
+		  "m" (val->count)
+		: "cc"
+	);
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	atomic_inc(val);
@@ -76,5 +82,5 @@
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	atomic_dec(val);
@@ -82,5 +88,5 @@
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	atomic_inc(val);
@@ -88,5 +94,5 @@
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	atomic_dec(val);
Index: uspace/lib/libc/arch/ppc32/include/types.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/ppc32/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup libcppc32	
+/** @addtogroup libcppc32
  * @{
  */
@@ -54,4 +54,6 @@
 
 typedef uint32_t uintptr_t;
+typedef uint32_t atomic_count_t;
+typedef int32_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/arch/sparc64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/atomic.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/sparc64/include/atomic.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -46,39 +46,47 @@
  *
  * @param val Atomic variable.
- * @param i Signed value to be added.
+ * @param i   Signed value to be added.
  *
  * @return Value of the atomic variable as it existed before addition.
+ *
  */
-static inline long atomic_add(atomic_t *val, int i)
+static inline atomic_count_t atomic_add(atomic_t *val, atomic_count_t i)
 {
-	uint64_t a, b;
-
+	atomic_count_t a;
+	atomic_count_t b;
+	
 	do {
-		volatile uintptr_t x = (uint64_t) &val->count;
-
-		a = *((uint64_t *) x);
+		volatile uintptr_t ptr = (uintptr_t) &val->count;
+		
+		a = *((atomic_count_t *) ptr);
 		b = a + i;
-		asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *)x)), "+r" (b) : "r" (a));
+		
+		asm volatile (
+			"casx %0, %2, %1\n"
+			: "+m" (*((atomic_count_t *) ptr)),
+			  "+r" (b)
+			: "r" (a)
+		);
 	} while (a != b);
-
+	
 	return a;
 }
 
-static inline long atomic_preinc(atomic_t *val)
+static inline atomic_count_t atomic_preinc(atomic_t *val)
 {
 	return atomic_add(val, 1) + 1;
 }
 
-static inline long atomic_postinc(atomic_t *val)
+static inline atomic_count_t atomic_postinc(atomic_t *val)
 {
 	return atomic_add(val, 1);
 }
 
-static inline long atomic_predec(atomic_t *val)
+static inline atomic_count_t atomic_predec(atomic_t *val)
 {
 	return atomic_add(val, -1) - 1;
 }
 
-static inline long atomic_postdec(atomic_t *val)
+static inline atomic_count_t atomic_postdec(atomic_t *val)
 {
 	return atomic_add(val, -1);
Index: uspace/lib/libc/arch/sparc64/include/types.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/types.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/arch/sparc64/include/types.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -54,4 +54,6 @@
 
 typedef uint64_t uintptr_t;
+typedef uint64_t atomic_count_t;
+typedef int64_t atomic_signed_t;
 
 #endif
Index: uspace/lib/libc/generic/futex.c
===================================================================
--- uspace/lib/libc/generic/futex.c	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/generic/futex.c	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -68,5 +68,5 @@
 int futex_down(futex_t *futex)
 {
-	if (atomic_predec(futex) < 0)
+	if ((atomic_signed_t) atomic_predec(futex) < 0)
 		return __SYSCALL1(SYS_FUTEX_SLEEP, (sysarg_t) &futex->count);
 
@@ -82,5 +82,5 @@
 int futex_up(futex_t *futex)
 {
-	if (atomic_postinc(futex) < 0)
+	if ((atomic_signed_t) atomic_postinc(futex) < 0)
 		return __SYSCALL1(SYS_FUTEX_WAKEUP, (sysarg_t) &futex->count);
 		
Index: uspace/lib/libc/include/atomicdflt.h
===================================================================
--- uspace/lib/libc/include/atomicdflt.h	(revision bc9da2a77f6c4a089d8231e222d0c24ab3fc92c3)
+++ uspace/lib/libc/include/atomicdflt.h	(revision 228666c006a3414de772f08f77335c546dd21aab)
@@ -37,25 +37,26 @@
 
 #ifndef LIBC_ARCH_ATOMIC_H_
-#error This file cannot be included directly, include atomic.h instead.
+	#error This file cannot be included directly, include atomic.h instead.
 #endif
 
+#include <stdint.h>
 #include <bool.h>
 
 typedef struct atomic {
-	volatile long count;
+	volatile atomic_count_t count;
 } atomic_t;
 
-static inline void atomic_set(atomic_t *val, long i)
+static inline void atomic_set(atomic_t *val, atomic_count_t i)
 {
-        val->count = i;
+	val->count = i;
 }
 
-static inline long atomic_get(atomic_t *val)
+static inline atomic_count_t atomic_get(atomic_t *val)
 {
-        return val->count;
+	return val->count;
 }
 
 #ifndef CAS
-static inline bool cas(atomic_t *val, long ov, long nv)
+static inline bool cas(atomic_t *val, atomic_count_t ov, atomic_count_t nv)
 {
 	return __sync_bool_compare_and_swap(&val->count, ov, nv);
