diff --git a/Kernel/binary.c b/Kernel/binary.c
index aa5d954759a9b344fa63fa1aab6379516deccbfc..dffb1784b17dacf7b3843cea0fcf927af6ad2f15 100644
--- a/Kernel/binary.c
+++ b/Kernel/binary.c
@@ -2,7 +2,7 @@
  * Acess2
  * Common Binary Loader
  */
-#define DEBUG	0
+#define DEBUG	1
 #include <acess.h>
 #include <binary.h>
 #include <mm_virt.h>
diff --git a/Kernel/debug.c b/Kernel/debug.c
index 8533a9e8c143cee3348932a85098851cbdb8553d..ce87d9de41be79e67429eb63a4d3c43099b6609b 100644
--- a/Kernel/debug.c
+++ b/Kernel/debug.c
@@ -13,7 +13,7 @@
 #define	GDB_SERIAL_PORT	0x2F8
 #define	DEBUG_MAX_LINE_LEN	256
 
-#define	LOCK_DEBUG_OUTPUT	0
+#define	LOCK_DEBUG_OUTPUT	1
 
 // === IMPORTS ===
 extern void Threads_Dump(void);
@@ -35,7 +35,7 @@ void	Debug_Fmt(const char *format, va_list args);
  int	gbDebug_IsKPanic = 0;
 volatile int	gbInPutChar = 0;
 #if LOCK_DEBUG_OUTPUT
-tSpinlock	glDebug_Lock;
+tShortSpinlock	glDebug_Lock;
 #endif
 
 // === CODE ===
@@ -155,6 +155,14 @@ void Debug_Fmt(const char *format, va_list args)
 	return ;
 }
 
+void Debug_FmtS(const char *format, ...)
+{
+	va_list	args;	
+	va_start(args, format);
+	Debug_Fmt(format, args);
+	va_end(args);
+}
+
 void Debug_KernelPanic()
 {
 	gbDebug_IsKPanic = 1;
@@ -169,7 +177,7 @@ void LogF(char *Fmt, ...)
 	va_list	args;
 
 	#if LOCK_DEBUG_OUTPUT
-	VTIGHTLOCK(&glDebug_Lock);
+	SHORTLOCK(&glDebug_Lock);
 	#endif
 	
 	va_start(args, Fmt);
@@ -179,7 +187,7 @@ void LogF(char *Fmt, ...)
 	va_end(args);
 	
 	#if LOCK_DEBUG_OUTPUT
-	RELEASE(&glDebug_Lock);
+	SHORTREL(&glDebug_Lock);
 	#endif
 }
 /**
@@ -191,7 +199,7 @@ void Debug(char *Fmt, ...)
 	va_list	args;
 	
 	#if LOCK_DEBUG_OUTPUT
-	LOCK(&glDebug_Lock);
+	SHORTLOCK(&glDebug_Lock);
 	#endif
 
 	Debug_Puts(0, "Debug: ");
@@ -201,7 +209,7 @@ void Debug(char *Fmt, ...)
 	Debug_PutCharDebug('\r');
 	Debug_PutCharDebug('\n');
 	#if LOCK_DEBUG_OUTPUT
-	RELEASE(&glDebug_Lock);
+	SHORTREL(&glDebug_Lock);
 	#endif
 }
 /**
@@ -212,7 +220,7 @@ void Log(char *Fmt, ...)
 	va_list	args;
 	
 	#if LOCK_DEBUG_OUTPUT
-	LOCK(&glDebug_Lock);
+	SHORTLOCK(&glDebug_Lock);
 	#endif
 
 	Debug_Puts(1, "Log: ");
@@ -223,7 +231,7 @@ void Log(char *Fmt, ...)
 	Debug_Putchar('\n');
 	
 	#if LOCK_DEBUG_OUTPUT
-	RELEASE(&glDebug_Lock);
+	SHORTREL(&glDebug_Lock);
 	#endif
 }
 void Warning(char *Fmt, ...)
@@ -231,7 +239,7 @@ void Warning(char *Fmt, ...)
 	va_list	args;
 	
 	#if LOCK_DEBUG_OUTPUT
-	LOCK(&glDebug_Lock);
+	SHORTLOCK(&glDebug_Lock);
 	#endif
 	
 	Debug_Puts(1, "Warning: ");
@@ -242,7 +250,7 @@ void Warning(char *Fmt, ...)
 	Debug_Putchar('\n');
 	
 	#if LOCK_DEBUG_OUTPUT
-	RELEASE(&glDebug_Lock);
+	SHORTREL(&glDebug_Lock);
 	#endif
 }
 void Panic(char *Fmt, ...)
@@ -250,9 +258,9 @@ void Panic(char *Fmt, ...)
 	va_list	args;
 	
 	#if LOCK_DEBUG_OUTPUT
-	LOCK(&glDebug_Lock);
+	SHORTLOCK(&glDebug_Lock);
 	#endif
-	// And never release
+	// And never SHORTREL
 	
 	Debug_KernelPanic();
 	
@@ -287,14 +295,23 @@ void Debug_SetKTerminal(char *File)
 void Debug_Enter(char *FuncName, char *ArgTypes, ...)
 {
 	va_list	args;
-	 int	i = gDebug_Level ++;
+	 int	i;
 	 int	pos;
+	tTID	tid = Threads_GetTID();
+	 
+	#if LOCK_DEBUG_OUTPUT
+	SHORTLOCK(&glDebug_Lock);
+	#endif
+
+	i = gDebug_Level ++;
 
 	va_start(args, ArgTypes);
 
 	while(i--)	Debug_Putchar(' ');
 
-	Debug_Puts(1, FuncName);	Debug_Puts(1, ": (");
+	Debug_Puts(1, FuncName);
+	Debug_FmtS("[%i]", tid);
+	Debug_Puts(1, ": (");
 
 	while(*ArgTypes)
 	{
@@ -326,33 +343,51 @@ void Debug_Enter(char *FuncName, char *ArgTypes, ...)
 
 	va_end(args);
 	Debug_Putchar(')');	Debug_Putchar('\r');	Debug_Putchar('\n');
+	
+	#if LOCK_DEBUG_OUTPUT
+	SHORTREL(&glDebug_Lock);
+	#endif
 }
 
 void Debug_Log(char *FuncName, char *Fmt, ...)
 {
 	va_list	args;
 	 int	i = gDebug_Level;
+	tTID	tid = Threads_GetTID();
+
+	#if LOCK_DEBUG_OUTPUT
+	SHORTLOCK(&glDebug_Lock);
+	#endif
 
 	va_start(args, Fmt);
 
 	while(i--)	Debug_Putchar(' ');
 
-	Debug_Puts(1, FuncName);	Debug_Puts(1, ": ");
+	Debug_Puts(1, FuncName);
+	Debug_FmtS("[%i]", tid);
+	Debug_Puts(1, ": ");
 	Debug_Fmt(Fmt, args);
 
 	va_end(args);
 	Debug_Putchar('\r');
 	Debug_Putchar('\n');
+	
+	#if LOCK_DEBUG_OUTPUT
+	SHORTREL(&glDebug_Lock);
+	#endif
 }
 
 void Debug_Leave(char *FuncName, char RetType, ...)
 {
 	va_list	args;
-	 int	i = --gDebug_Level;
+	 int	i;
+	tTID	tid = Threads_GetTID();
 
 	#if LOCK_DEBUG_OUTPUT
-	LOCK(&glDebug_Lock);
+	SHORTLOCK(&glDebug_Lock);
 	#endif
+	
+	i = --gDebug_Level;
 
 	va_start(args, RetType);
 
@@ -363,12 +398,17 @@ void Debug_Leave(char *FuncName, char RetType, ...)
 	// Indenting
 	while(i--)	Debug_Putchar(' ');
 
-	Debug_Puts(1, FuncName);	Debug_Puts(1, ": RETURN");
+	Debug_Puts(1, FuncName);
+	Debug_FmtS("(%i)", tid);
+	Debug_Puts(1, ": RETURN");
 
 	// No Return
 	if(RetType == '-') {
 		Debug_Putchar('\r');
 		Debug_Putchar('\n');
+		#if LOCK_DEBUG_OUTPUT
+		SHORTREL(&glDebug_Lock);
+		#endif
 		return;
 	}
 
@@ -388,6 +428,10 @@ void Debug_Leave(char *FuncName, char RetType, ...)
 	Debug_Putchar('\n');
 
 	va_end(args);
+	
+	#if LOCK_DEBUG_OUTPUT
+	SHORTREL(&glDebug_Lock);
+	#endif
 }
 
 void Debug_HexDump(char *Header, void *Data, Uint Length)
diff --git a/Kernel/lib.c b/Kernel/lib.c
index cab15b3c758b363fec6af1dc2750e6c50007c112..2ce5c980a728c0990944932a75e3b0d3a52c3e59 100644
--- a/Kernel/lib.c
+++ b/Kernel/lib.c
@@ -8,7 +8,7 @@
 #define	RANDOM_SEED	0xACE55052
 #define	RANDOM_A	0x00731ADE
 #define	RANDOM_C	12345
-#define	RANDOM_SPRUCE	0xf12b02b
+#define	RANDOM_SPRUCE	0xf12b039
 //                          Jan Feb Mar Apr May  Jun  Jul  Aug  Sept Oct  Nov  Dec
 const short DAYS_BEFORE[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
 #define UNIX_TO_2K	((30*365*3600*24) + (7*3600*24))	//Normal years + leap years
@@ -66,9 +66,6 @@ EXPORT(CheckMem);
 EXPORT(ModUtil_LookupString);
 EXPORT(ModUtil_SetIdent);
 
-// === GLOBALS ===
-static Uint	giRandomState = RANDOM_SEED;
-
 // === CODE ===
 /**
  * \brief Convert a string into an integer
@@ -679,12 +676,27 @@ Sint64 timestamp(int sec, int mins, int hrs, int day, int month, int year)
  */
 Uint rand(void)
 {
-	Uint	old = giRandomState;
+	#if 0
+	static Uint	state = RANDOM_SEED;
+	Uint	old = state;
 	// Get the next state value
-	giRandomState = (RANDOM_A*giRandomState + RANDOM_C) & 0xFFFFFFFF;
+	giRandomState = (RANDOM_A*state + RANDOM_C);
 	// Check if it has changed, and if it hasn't, change it
-	if(giRandomState == old)	giRandomState += RANDOM_SPRUCE;
-	return giRandomState;
+	if(state == old)	state += RANDOM_SPRUCE;
+	return state;
+	#else
+	// http://en.wikipedia.org/wiki/Xorshift
+	// 2010-10-03
+	static Uint32	x = 123456789;
+	static Uint32	y = 362436069;
+	static Uint32	z = 521288629;
+	static Uint32	w = 88675123; 
+	Uint32	t;
+ 
+	t = x ^ (x << 11);
+	x = y; y = z; z = w;
+	return w = w ^ (w >> 19) ^ t ^ (t >> 8); 
+	#endif
 }
 
 /* *
diff --git a/Kernel/syscalls.c b/Kernel/syscalls.c
index 97459c2b43c1ba30cfbaebaf4e878d5b70b6ff16..d286d21ddad243e94ac44dd5fd0707e0b4d7c0c4 100644
--- a/Kernel/syscalls.c
+++ b/Kernel/syscalls.c
@@ -176,7 +176,7 @@ void SyscallHandler(tSyscallRegs *Regs)
 		}
 		LEAVE('s', "Assuming 0");
 		// Path, **Argv, **Envp
-		ret = Proc_Execve((char*)Regs->Arg1, (char**)Regs->Arg2, (char**)Regs->Arg3);
+		ret = Proc_Execve( (char*)Regs->Arg1, (char**)Regs->Arg2, (char**)Regs->Arg3 );
 		break;
 	// -- Load a binary into the current process
 	case SYS_LOADBIN:
diff --git a/Kernel/vfs/main.c b/Kernel/vfs/main.c
index f072a285e8f033d47318a6ec948bbde3e4fba3fb..cd9c45187354b97bd1d9fa39ca8d0a1ee300534b 100644
--- a/Kernel/vfs/main.c
+++ b/Kernel/vfs/main.c
@@ -72,8 +72,10 @@ char *VFS_GetTruePath(char *Path)
 	
 	tmp = VFS_GetAbsPath(Path);
 	if(tmp == NULL)	return NULL;
+	Log(" VFS_GetTruePath: tmp = '%s'", tmp);
 	node = VFS_ParsePath(tmp, &ret);
 	free(tmp);
+	Log(" VFS_GetTruePath: node=%p, ret='%s'", node, ret);
 	
 	if(!node)	return NULL;
 	if(node->Close)	node->Close(node);
diff --git a/Kernel/vfs/open.c b/Kernel/vfs/open.c
index 3a2622f55772e208712c66e0682a909a69c9951e..0bca8cac3c5b75fc9610c353b9a9aa37cbc6e450 100644
--- a/Kernel/vfs/open.c
+++ b/Kernel/vfs/open.c
@@ -2,7 +2,7 @@
  * AcessMicro VFS
  * - Open, Close and ChDir
  */
-#define DEBUG	0
+#define DEBUG	1
 #include <acess.h>
 #include <mm_virt.h>
 #include "vfs.h"
@@ -391,7 +391,7 @@ tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
 		(*TruePath)[retLength] = '/';
 		strcpy(*TruePath+retLength+1, pathEle);
 		
-		LOG("*TruePath = '%s'\n", *TruePath);
+		LOG("*TruePath = '%s'", *TruePath);
 		
 		// - Extend Path
 		retLength += nextSlash + 1;
diff --git a/Modules/Filesystems/FAT/fat.c b/Modules/Filesystems/FAT/fat.c
index e14fad0be3530037ecc8ea1ced220d56e4a663d4..5d1c7f5367653a4e6620d5e457c5798308fb36dc 100644
--- a/Modules/Filesystems/FAT/fat.c
+++ b/Modules/Filesystems/FAT/fat.c
@@ -17,7 +17,7 @@
  * \todo Implement changing of the parent directory when a file is written to
  * \todo Implement file creation / deletion
  */
-#define DEBUG	0
+#define DEBUG	1
 #define VERBOSE	1
 
 #define CACHE_FAT	0	//!< Caches the FAT in memory
diff --git a/Usermode/Applications/login_src/main.c b/Usermode/Applications/login_src/main.c
index 353c90a3b60b14b259929fda1033ce1c168006e7..2bafe3b2e620c4129c2996bf7123df5bf2fd062c 100644
--- a/Usermode/Applications/login_src/main.c
+++ b/Usermode/Applications/login_src/main.c
@@ -46,6 +46,8 @@ int main(int argc, char *argv[])
 			return -1;
 		}
 		
+		printf("pid = %i\n", pid);
+		
 		// Spawn shell in a child process
 		if(pid == 0)
 		{