diff --git a/Kernel/Makefile b/Kernel/Makefile
index 2d558fca3f14a2dffab6bf9dd0d5f758a583ac69..7c23b103f378a434bdf15630528bb0670d932e1d 100644
--- a/Kernel/Makefile
+++ b/Kernel/Makefile
@@ -29,7 +29,7 @@ OBJ := $(addprefix arch/$(ARCHDIR)/,$(A_OBJ))
 OBJ += heap.o drvutil.o logging.o debug.o lib.o adt.o time.o
 OBJ += messages.o modules.o syscalls.o system.o threads.o
 OBJ += $(addprefix vfs/fs/, $(addsuffix .o,$(FILESYSTEMS)))
-OBJ += drv/vterm.o drv/proc.o drv/fifo.o drv/iocache.o drv/dma.o drv/pci.o drv/kb.o drv/vga.o
+OBJ += drv/kb.o drv/vterm.o drv/proc.o drv/fifo.o drv/iocache.o drv/dma.o drv/pci.o drv/vga.o
 OBJ += binary.o bin/elf.o bin/pe.o
 OBJ += vfs/main.o vfs/open.o vfs/acls.o vfs/dir.o vfs/io.o vfs/mount.o vfs/memfile.o vfs/nodecache.o
 OBJ += vfs/fs/root.o vfs/fs/devfs.o
diff --git a/Kernel/Makefile.BuildNum.x86_64 b/Kernel/Makefile.BuildNum.x86_64
index 1775ddde47f118670f6e1c23b65ce29590ea3189..9c07d1bca4eeceb9d75cd6ed37b8306b2c14e659 100644
--- a/Kernel/Makefile.BuildNum.x86_64
+++ b/Kernel/Makefile.BuildNum.x86_64
@@ -1 +1 @@
-BUILD_NUM = 221
+BUILD_NUM = 223
diff --git a/Kernel/arch/x86/proc.c b/Kernel/arch/x86/proc.c
index 6d84f014ab6c5ebe0e27f0db2e6dd6b856004295..5e9d1bbc2246c67c9b3704b673b7874ffca2036a 100644
--- a/Kernel/arch/x86/proc.c
+++ b/Kernel/arch/x86/proc.c
@@ -445,7 +445,7 @@ void Proc_Start(void)
 		}
 		gaCPUs[i].IdleThread = Threads_GetThread(tid);
 		gaCPUs[i].IdleThread->ThreadName = "Idle Thread";
-		Threads_SetTickets( gaCPUs[i].IdleThread, 0 );	// Never called randomly
+		Threads_SetPriority( gaCPUs[i].IdleThread, -1 );	// Never called randomly
 		gaCPUs[i].IdleThread->Quantum = 1;	// 1 slice quantum
 		
 		
diff --git a/Kernel/arch/x86_64/include/arch.h b/Kernel/arch/x86_64/include/arch.h
index 0e5cb6118439e2013288f1f67c1afe885f51ee54..78b2acce4bc77a4be0de07537b54e1d1833255e4 100644
--- a/Kernel/arch/x86_64/include/arch.h
+++ b/Kernel/arch/x86_64/include/arch.h
@@ -45,7 +45,7 @@ typedef char	BOOL;
 /**
  * \brief Halt the CPU
  */
-#define	HALT()	__asm__ __volatile__ ("hlt")
+#define	HALT()	__asm__ __volatile__ ("sti;\n\thlt")
 /**
  * \brief Fire a magic breakpoint (bochs)
  */
diff --git a/Kernel/arch/x86_64/proc.c b/Kernel/arch/x86_64/proc.c
index 9abcc633174855058aa88406211344da8b173972..573947021382b9445b16dd0a1ee6b0ac0fd59267 100644
--- a/Kernel/arch/x86_64/proc.c
+++ b/Kernel/arch/x86_64/proc.c
@@ -736,8 +736,6 @@ void Proc_Scheduler(int CPU)
 	// If the spinlock is set, let it complete
 	if(IS_LOCKED(&glThreadListLock))	return;
 	
-	//LogF("Scheduler: CPU = %i\n", CPU);
-	
 	// Get current thread
 	thread = gaCPUs[CPU].Current;
 	
@@ -776,6 +774,9 @@ void Proc_Scheduler(int CPU)
 		);
 	#endif
 	
+	
+	if(CPU > MAX_CPUS)
+		LogF("CPU = %i", CPU);
 	// Set current thread
 	gaCPUs[CPU].Current = thread;
 	
diff --git a/Kernel/threads.c b/Kernel/threads.c
index cfc0639783cdd79c8c16e40f9a58e83c921f4820..dd4f0d2b6976643059b1bb2869fca80733f46366 100644
--- a/Kernel/threads.c
+++ b/Kernel/threads.c
@@ -40,7 +40,7 @@ extern void	Proc_CallFaultHandler(tThread *Thread);
 void	Threads_Init(void);
  int	Threads_SetName(char *NewName);
 char	*Threads_GetName(int ID);
-void	Threads_SetTickets(tThread *Thread, int Num);
+void	Threads_SetPriority(tThread *Thread, int Pri);
 tThread	*Threads_CloneTCB(Uint *Err, Uint Flags);
  int	Threads_WaitTID(int TID, int *status);
 tThread	*Threads_GetThread(Uint TID);
diff --git a/Modules/Filesystems/FAT/fat.c b/Modules/Filesystems/FAT/fat.c
index 381a7ecf676a263536ebc83b49e96a5572b51f9b..5502b5a09b2b8899eb23cb03361d99cd249c50c7 100644
--- a/Modules/Filesystems/FAT/fat.c
+++ b/Modules/Filesystems/FAT/fat.c
@@ -1262,7 +1262,8 @@ char *FAT_ReadDir(tVFS_Node *Node, int ID)
 		// Bit 6 indicates the start of an entry
 		if(lfnInfo->id & 0x40)	memset(lfn, 0, 256);
 		
-		a = (lfnInfo->id & 0x3F) * 13;
+		a = ((lfnInfo->id & 0x3F) - 1) * 13;
+		//Log_Debug("FAT", "ID = 0x%02x, a = %i", lfnInfo->id, a);
 		
 		// Sanity Check (FAT implementations should not allow >255 character names)
 		if(a > 255)	return VFS_SKIP;
@@ -1276,6 +1277,7 @@ char *FAT_ReadDir(tVFS_Node *Node, int ID)
 		lfn[a+ 9] = lfnInfo->name2[4];	lfn[a+10] = lfnInfo->name2[5];
 		lfn[a+11] = lfnInfo->name3[0];	lfn[a+12] = lfnInfo->name3[1];
 		LOG("lfn = '%s'", lfn);
+		//Log_Debug("FAT", "lfn = '%s'", lfn);
 		LEAVE('p', VFS_SKIP);
 		return VFS_SKIP;
 	}
@@ -1304,6 +1306,7 @@ char *FAT_ReadDir(tVFS_Node *Node, int ID)
 	
 	#if USE_LFN
 	lfn = FAT_int_GetLFN(Node, ID);
+	//Log_Debug("FAT", "lfn = %p'%s'", lfn, lfn);
 	ret = FAT_int_CreateName(&fileinfo[a], lfn);
 	#else
 	ret = FAT_int_CreateName(&fileinfo[a], NULL);