diff --git a/Usermode/Applications/CLIShell_src/header.h b/Usermode/Applications/CLIShell_src/header.h
index f90e65181cc8393ab1ad87d193a068590d80ca0b..2733d8418ddf394e030b6a2a986e47edf319642a 100644
--- a/Usermode/Applications/CLIShell_src/header.h
+++ b/Usermode/Applications/CLIShell_src/header.h
@@ -5,8 +5,6 @@
 #ifndef _HEADER_H
 #define _HEADER_H
 
-#define NULL	((void*)0)
-
 #define Print(str)	do{char*s=(str);write(_stdout,strlen(s)+1,s);}while(0)
 
 extern int _stdout;
diff --git a/Usermode/Applications/CLIShell_src/lib.c b/Usermode/Applications/CLIShell_src/lib.c
index b807dd6e3b8beaddd501c38ec5cfd52c50db9740..cfd52e5bb345ffdd45ad6b63c5ba9c7faee2c44b 100644
--- a/Usermode/Applications/CLIShell_src/lib.c
+++ b/Usermode/Applications/CLIShell_src/lib.c
@@ -4,6 +4,7 @@
  * See file COPYING for 
  */
 #include "header.h"
+#include <stddef.h>
 
 // === CODE ===
 /**
diff --git a/Usermode/Applications/Makefile.cfg b/Usermode/Applications/Makefile.cfg
index b67e8bd2a6d8fac18acf0114226273bc09579f40..b2f36e41b5333907200a5e5d04cfcbd31c6fccc3 100644
--- a/Usermode/Applications/Makefile.cfg
+++ b/Usermode/Applications/Makefile.cfg
@@ -5,7 +5,7 @@
 include $(dir $(lastword $(MAKEFILE_LIST)))../Makefile.cfg
 
 ASFLAGS = -felf
-CPPFLAGS = -I$(ACESSUSERDIR)/include/
+CPPFLAGS = -I$(ACESSUSERDIR)/include/ -DARCHDIR_is_$(ARCHDIR)
 CFLAGS   = -fno-stack-protector $(CPPFLAGS)
 LDFLAGS  = -T $(OUTPUTDIR)Libs/acess.ld -rpath-link $(OUTPUTDIR)Libs -L $(OUTPUTDIR)Libs -I /Acess/Libs/ld-acess.so -lld-acess -lc
 
diff --git a/Usermode/Applications/init_src/main.c b/Usermode/Applications/init_src/main.c
index a88af9f99ea949ff98725ea0afb68f95b96d0aef..4d66654c4923354cc1b0787b287f0b8ced33fbbb 100644
--- a/Usermode/Applications/init_src/main.c
+++ b/Usermode/Applications/init_src/main.c
@@ -8,7 +8,6 @@
 //#include "common.h"
 
 // === CONSTANTS ===
-#define NULL	((void*)0)
 #define NUM_TERMS	4
 #define	DEFAULT_TERMINAL	"/Devices/VTerm/0"
 #define DEFAULT_SHELL	"/Acess/SBin/login"
diff --git a/Usermode/Libraries/Makefile.cfg b/Usermode/Libraries/Makefile.cfg
index 9192194c14619aee4c09ff9264c6ae3eb6dc56f8..f9e3d672c49f718ac7f35cab7eeead961bff1557 100644
--- a/Usermode/Libraries/Makefile.cfg
+++ b/Usermode/Libraries/Makefile.cfg
@@ -6,6 +6,6 @@
 MAKEDEP  = $(CC) -M
 
 ASFLAGS  += -D ARCHDIR=$(ARCHDIR)
-CPPFLAGS := -I$(ACESSDIR)/Usermode/include/ -D ARCHDIR=$(ARCHDIR) -D ARCHDIR_IS_$(ARCHDIR)=1
+CPPFLAGS := -I$(ACESSDIR)/Usermode/include/ -DARCHDIR=$(ARCHDIR) -DARCHDIR_is_$(ARCHDIR)=1
 CFLAGS   := -g -Wall -fPIC -fno-builtin -fno-stack-protector $(CPPFLAGS)
 LDFLAGS  := -g -nostdlib -shared -I/Acess/Libs/ld-acess.so -e SoMain -x -L$(OUTPUTDIR)Libs/
diff --git a/Usermode/Libraries/ld-acess.so_src/common.h b/Usermode/Libraries/ld-acess.so_src/common.h
index 941baf37f42be1e92a91a9fb8ca54d4c78627c49..8fa626a7c6c15b959e48fcca7551f801730c4725 100644
--- a/Usermode/Libraries/ld-acess.so_src/common.h
+++ b/Usermode/Libraries/ld-acess.so_src/common.h
@@ -7,8 +7,7 @@
 #ifndef _COMMON_H
 #define _COMMON_H
 
-#define	NULL	((void*)0)
-
+#include <stddef.h>
 #include <stdarg.h>
 
 // HACK: Replace with underscored
diff --git a/Usermode/Libraries/ld-acess.so_src/elf.c b/Usermode/Libraries/ld-acess.so_src/elf.c
index 75791d6e0d7761daf1e41f060dad029379a23753..00f2431d27a5098d6a5814a9d2510fbdcd69863c 100644
--- a/Usermode/Libraries/ld-acess.so_src/elf.c
+++ b/Usermode/Libraries/ld-acess.so_src/elf.c
@@ -83,7 +83,7 @@ void *Elf64Relocate(void *Base, char **envp, const char *Filename)
 	for( i = 0; i < hdr->e_phnum; i ++ )
 	{
 		if(phtab[i].p_type == PT_DYNAMIC)
-			dyntab = (void *)phtab[i].p_vaddr;
+			dyntab = (void *)(intptr_t)phtab[i].p_vaddr;
 		if(phtab[i].p_type == PT_LOAD && compiledBase > phtab[i].p_vaddr)
 			compiledBase = phtab[i].p_vaddr;
 	}
diff --git a/Usermode/Libraries/ld-acess.so_src/lib.c b/Usermode/Libraries/ld-acess.so_src/lib.c
index 27d6ff29d18261ca943ef3d68c2325f2fcafd553..150ae77cff61812d0748f77f5d38ae393ac9c308 100644
--- a/Usermode/Libraries/ld-acess.so_src/lib.c
+++ b/Usermode/Libraries/ld-acess.so_src/lib.c
@@ -4,6 +4,7 @@
  By thePowersGang
 */
 #include "common.h"
+#include <stdint.h>
 
 // === CODE ===
 char *strcpy(char *dest, const char *src)
@@ -70,3 +71,31 @@ int file_exists(const char *filename)
 	close(fd);
 	return 1;
 }
+
+uint64_t __udivdi3(uint64_t Num, uint64_t Den)
+{
+	uint64_t	ret = 0, add = 1;
+
+	// Find what power of two times Den is > Num
+	while( Num >= Den )
+	{
+		Den <<= 1;
+		add <<= 1;
+	}
+
+	// Search backwards
+	while( add > 1 )
+	{
+		add >>= 1;
+		Den >>= 1;
+		// If the numerator is > Den, subtract and add to return value
+		if( Num > Den )
+		{
+			ret += add;
+			Num -= Den;
+		}
+	}
+//	if(Rem)	*Rem = Num;
+	return ret;
+}
+
diff --git a/Usermode/Libraries/ld-acess.so_src/main.c b/Usermode/Libraries/ld-acess.so_src/main.c
index ccdf6b428dd079169a6922e732f73e56f2a3b7f7..0eb28d14ddf5a1cc8fdbf9d5f0d7609a6b7a395a 100644
--- a/Usermode/Libraries/ld-acess.so_src/main.c
+++ b/Usermode/Libraries/ld-acess.so_src/main.c
@@ -3,6 +3,7 @@
  By thePowersGang
 */
 #include <stdint.h>
+#include <stddef.h>
 #include "common.h"
 
 // === PROTOTYPES ===
diff --git a/Usermode/Libraries/libc.so_src/Makefile b/Usermode/Libraries/libc.so_src/Makefile
index 2d6801d6ad5e743e4723255f1766964460a267cf..29863015e7ba10aa31fd53b685a422567840653c 100644
--- a/Usermode/Libraries/libc.so_src/Makefile
+++ b/Usermode/Libraries/libc.so_src/Makefile
@@ -8,7 +8,7 @@ CFLAGS   +=
 ASFLAGS  +=
 LDFLAGS  += -soname libc.so -Map map.txt -lgcc
 
-OBJ = stub.o heap.o stdlib.o env.o fileIO.o string.o
+OBJ = stub.o heap.o stdlib.o env.o fileIO.o string.o select.o
 DEPFILES := $(OBJ:%.o=%.d)
 # signals.o
 BIN = libc.so
diff --git a/Usermode/Libraries/libc.so_src/fileIO.c b/Usermode/Libraries/libc.so_src/fileIO.c
index 60def892b014a96b4df19a396826ae086765de12..5b479aaa092d52cdfc8abed034126fbf7361069f 100644
--- a/Usermode/Libraries/libc.so_src/fileIO.c
+++ b/Usermode/Libraries/libc.so_src/fileIO.c
@@ -19,7 +19,7 @@
 #define	_stdout	1
 
 // === PROTOTYPES ===
-EXPORT void	itoa(char *buf, uint64_t num, uint base, int minLength, char pad, int bSigned);
+EXPORT void	itoa(char *buf, uint64_t num, size_t base, int minLength, char pad, int bSigned);
 struct sFILE	*get_file_struct();
 
 // === GLOBALS ===
@@ -131,7 +131,7 @@ EXPORT void fflush(FILE *fp)
 	///\todo Implement
 }
 
-EXPORT long int ftell(FILE *fp)
+EXPORT off_t ftell(FILE *fp)
 {
 	if(!fp || !fp->FD)	return -1;
 	
diff --git a/Usermode/include/stddef.h b/Usermode/include/stddef.h
deleted file mode 100644
index 01636359d018c8a15053b3380405718f5045823e..0000000000000000000000000000000000000000
--- a/Usermode/include/stddef.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * AcessOS LibC
- * stddef.h
- */
-#ifndef _STDDEF_H
-#define _STDDEF_H
-
-// === CONSTANTS ===
-#ifndef NULL
-# define NULL	((void*)0)
-#endif
-
-// === TYPES ===
-#ifndef size_t
-typedef unsigned int	size_t;
-#endif
-
-// === MACROS ===
-#define offsetof(st, m) ((size_t)((uintptr_t)((char *)&((st *)(0))->m - (char *)0 )))
-
-#endif
diff --git a/Usermode/include/stdint.h b/Usermode/include/stdint.h
index 6238a63abb0bd0ffaa660e9e27d9201c44a46a0a..f2707aa49e0150786654c8537e3b1c41f1cf6c06 100644
--- a/Usermode/include/stdint.h
+++ b/Usermode/include/stdint.h
@@ -1,9 +1,8 @@
 /*
  */
-#ifndef _STDTYPES_H_
-#define _STDTYPES_H_
+#ifndef _STDINT_H_
+#define _STDINT_H_
 
-//typedef unsigned int	uint;
 typedef unsigned char	uint8_t;
 typedef unsigned short	uint16_t;
 typedef unsigned int	uint32_t;
@@ -14,16 +13,13 @@ typedef signed short	int16_t;
 typedef signed int		int32_t;
 typedef signed long long	int64_t;
 
-#ifdef __LP64__
+#if ARCHDIR_is_x86
+typedef uint32_t	intptr_t;
+typedef uint32_t	uintptr_t;
+#elif ARCHDIR_is_x86_64
 typedef uint64_t	intptr_t;
 typedef uint64_t	uintptr_t;
-typedef int64_t	ptrdiff_t;
 #else
-typedef uint32_t	intptr_t;
-typedef uint32_t	uintptr_t;
-typedef int32_t	ptrdiff_t;
-#endif
-#if 0
 # error "Unknown pointer size"
 #endif
 
diff --git a/Usermode/include/stdio.h b/Usermode/include/stdio.h
index 552cd4f999d6432590f43767e430bb65985bb66e..8d950656c3ce40bec2d491fb8ac8e6ef4d771ac0 100644
--- a/Usermode/include/stdio.h
+++ b/Usermode/include/stdio.h
@@ -8,13 +8,13 @@
 #include <stdlib.h>
 #include <stdarg.h>
 
-// === Types ===
+/* === Types === */
 typedef struct sFILE	FILE;
 
-// === CONSTANTS ===
+/* === CONSTANTS === */
 #define EOF	(-1)
 
-// --- Standard IO ---
+/* --- Standard IO --- */
 extern int	printf(const char *format, ...);
 extern int	vsnprintf(char *buf, size_t __maxlen, const char *format, va_list args);
 extern int	vsprintf(char *buf, const char *format, va_list args);
@@ -26,7 +26,7 @@ extern FILE	*freopen(const char *file, const char *mode, FILE *fp);
 extern FILE	*fdopen(int fd, const char *modes);
 extern int	fclose(FILE *fp);
 extern void	fflush(FILE *fp);
-extern long int	ftell(FILE *fp);
+extern off_t	ftell(FILE *fp);
 extern int	fseek(FILE *fp, long int amt, int whence);
 
 extern size_t	fread(void *buf, size_t size, size_t n, FILE *fp);
diff --git a/Usermode/include/stdlib.h b/Usermode/include/stdlib.h
index 6ea8db505578f669c6ae2b07b9dac0c5adfcd6f0..160993d1470c074ad668ab163875c2061ed20756 100644
--- a/Usermode/include/stdlib.h
+++ b/Usermode/include/stdlib.h
@@ -12,27 +12,27 @@
 #define EXIT_FAILURE	1
 #define EXIT_SUCCESS	0
 
-// --- Spinlock Macros ---
+/* --- Spinlock Macros --- */
+/* TODO: Support non-x86 architectures */
 #define DEFLOCK(_name)	static int _spinlock_##_name=0;
-//#define LOCK(_name)	__asm__ __volatile__("jmp ._tst;\n\t._lp:call yield;\n\t._tst:lock btsl $1,(%0);\n\tjc ._lp"::"D"(&_spinlock_##_name))
-#define LOCK(_name)	do{int v=1;while(v){__asm__ __volatile__("lock cmpxchgl %%eax, (%1)":"=a"(v):"D"((&_spinlock_##_name)),"a"(1));yield();}}while(0)
+#define LOCK(_name)	do{int v=1;while(v){__asm__ __volatile__("lock cmpxchgl %0, (%1)":"=a"(v):"D"((&_spinlock_##_name)),"a"(1));yield();}}while(0)
 #define UNLOCK(_name) __asm__ __volatile__("lock andl $0, (%0)"::"D"(&_spinlock_##_name))
 
-// --- StdLib ---
-extern void	_exit(int code) __attribute__((noreturn));	//NOTE: Also defined in acess/sys.h
+/* --- StdLib --- */
+extern void	_exit(int code) __attribute__((noreturn));	/* NOTE: Also defined in acess/sys.h */
 extern int	atoi(const char *ptr);
 extern void	exit(int status) __attribute__((noreturn));
 extern void	atexit(void (*__func)(void));
-extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));
+extern void	qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));
 
-// --- Environment ---
+/* --- Environment --- */
 extern char	*getenv(const char *name);
 
-// --- Heap ---
-extern void free(void *mem);
-extern void *malloc(size_t bytes);
-extern void *calloc(size_t __nmemb, size_t __size);
-extern void *realloc(void *__ptr, size_t __size);
+/* --- Heap --- */
+extern void	free(void *mem);
+extern void	*malloc(size_t bytes);
+extern void	*calloc(size_t __nmemb, size_t __size);
+extern void	*realloc(void *__ptr, size_t __size);
 extern int	IsHeap(void *ptr);
 
 #ifndef SEEK_CUR
diff --git a/Usermode/include/string.h b/Usermode/include/string.h
index 6c5a2c6c57483f44c0dc8d939f03c71bcc63de68..b77d8074828e3847b4717531de8d36ad69125512 100644
--- a/Usermode/include/string.h
+++ b/Usermode/include/string.h
@@ -7,7 +7,7 @@
 
 #include <stddef.h>
 
-// Strings
+/* Strings */
 extern size_t	strlen(const char *string);
 extern size_t	strnlen(const char *string, size_t maxlen);
 extern int	strcmp(const char *str1, const char *str2);
@@ -25,7 +25,7 @@ extern char	*strstr(const char *str1, const char *str2);
 extern size_t	strcspn(const char *haystack, const char *reject);
 extern size_t	strspn(const char *haystack, const char *accept);
 
-// Memory
+/* Memory */
 extern void *memset(void *dest, int val, size_t count);
 extern void *memcpy(void *dest, const void *src, size_t count);
 extern void *memmove(void *dest, const void *src, size_t count);
diff --git a/Usermode/include/sys/stat.h b/Usermode/include/sys/stat.h
index e9b9a8fa7a9239e3cd7658becec7ba6ce84d605b..10384baee86afee6f781a622232c2fbbc197c0af 100644
--- a/Usermode/include/sys/stat.h
+++ b/Usermode/include/sys/stat.h
@@ -5,9 +5,10 @@
 #ifndef _SYS_STAT_H_
 #define _SYS_STAT_H_
 
-#include <stdint.h>	//EVIL!
+#include <stdint.h>	/* Evil */
+#include <stddef.h>
 
-typedef uintptr_t	dev_t;	// TODO: How to identify a device with Acess
+typedef void	*dev_t;	/* TODO: How to identify a device with Acess */
 typedef uint64_t	ino_t;
 typedef unsigned int	blksize_t;
 typedef uint64_t	blkcnt_t;
diff --git a/Usermode/include/sys/types.h b/Usermode/include/sys/types.h
index acf6b7e5f0cbda2a414167a9eb23484f33aea93d..edcaa2243e8729ad527777518425394fb37b0d5b 100644
--- a/Usermode/include/sys/types.h
+++ b/Usermode/include/sys/types.h
@@ -2,7 +2,6 @@
  */
 #ifndef _SYS_TYPES_H
 #define _SYS_TYPES_H
-//#include <stdint.h>
 
 typedef struct stat	t_fstat;
 
@@ -28,8 +27,8 @@ typedef struct
 }	fd_set;
 
 struct s_sysACL {
-	unsigned long	object;	//!< Group or user (bit 31 determines)
-	unsigned long	perms;	//!< Inverted by bit 31
+	unsigned long	object;	/*!< Group or user (bit 31 determines) */
+	unsigned long	perms;	/*!< Inverted by bit 31 */
 };
 struct s_sysFInfo {
 	unsigned int	mount;
@@ -47,19 +46,10 @@ struct s_sysFInfo {
 typedef struct s_sysFInfo	t_sysFInfo;
 typedef struct s_sysACL	t_sysACL;
 
-static inline void FD_ZERO(fd_set *fdsetp) {int i=FD_SETSIZE/16;while(i--)fdsetp->flags[i]=0; }
-static inline void FD_CLR(int fd, fd_set *fdsetp) {
-	if(fd < 0 || fd > FD_SETSIZE)	return;
-	fdsetp->flags[fd/16] &= (fd_set_ent_t) ((~1 << (fd%16))) & 0xFFFF;
-}
-static inline void FD_SET(int fd, fd_set *fdsetp) {
-	if(fd < 0 || fd > FD_SETSIZE)	return;
-	fdsetp->flags[fd/16] |= (fd_set_ent_t) (1 << (fd%16));
-}
-static inline int FD_ISSET(int fd, fd_set *fdsetp) {
-	if(fd < 0 || fd > FD_SETSIZE)	return 0;
-	return !!( fdsetp->flags[fd/16] & (1<<(fd%16)) );
-}
+extern void	FD_ZERO(fd_set *fdsetp);
+extern void	FD_CLR(int fd, fd_set *fdsetp);
+extern void	FD_SET(int fd, fd_set *fdsetp);
+extern int	FD_ISSET(int fd, fd_set *fdsetp);
 
 #include <sys/stat.h>