diff --git a/Externals/ACPICA/Makefile b/Externals/ACPICA/Makefile
index 950f0abd15b827b7f7f1ea7a74ad46a73c537af3..a506ab932fd875b4a239ef15629c30ca959d1576 100644
--- a/Externals/ACPICA/Makefile
+++ b/Externals/ACPICA/Makefile
@@ -33,11 +33,18 @@ CPPFLAGS        += -I $(ACPICAROOT)source/include -D _ACESS -D __KERNEL__
 CPPFLAGS	+= -D ARCH=$(ARCH) -D ARCHDIR=$(ARCHDIR) -D PLATFORM=\"$(PLATFORM)\" -D ARCHDIR_IS_$(ARCHDIR)=1 -D PLATFORM_is_$(PLATFORM)=1
 CPPFLAGS	+= -D KERNEL_VERSION=$(KERNEL_VERSION) -ffreestanding
 ifneq ($(ACPI_DEBUG),no)
-  CPPFLAGS += -D ACPI_DEBUG_OUTPUT=1 -D ACPI_DISASSEMBLER=1
+  CPPFLAGS += -D ACPI_DEBUG_OUTPUT=1
+  #CPPFLAGS += -D ACPI_DEBUGGER=1
+  CPPFLAGS += -D ACPI_DISASSEMBLER=1
 endif
 CFLAGS  	+= -Wall -fno-stack-protector -Wstrict-prototypes -std=gnu99 -g
 
 SRCS := $(wildcard $(COMPDIR)*/*.c)
+SRCS := $(filter-out $(COMPDIR)debugger/%,$(SRCS))
+ifeq ($(ACPI_DEBUG),no)
+  SRCS := $(filter-out $(COMPDIR)disassembler/%,$(SRCS))
+  SRCS := $(filter-out %/resources/rsdump.c,$(SRCS))
+endif
 OBJS := $(SRCS:$(COMPDIR)%.c=obj-$(ARCH)/%.o)
 
 ACENV_H := $(ACPICAROOT)source/include/platform/acenv.h
diff --git a/Externals/cross-compiler/patches/binutils/bfd/config.bfd.patch b/Externals/cross-compiler/patches/binutils/bfd/config.bfd.patch
index 0c0183101e6135c310aadfd2fba0b4b92a73e4b1..c3a986726cf1ada98a0be92a1ddf105d4a4bfa89 100644
--- a/Externals/cross-compiler/patches/binutils/bfd/config.bfd.patch
+++ b/Externals/cross-compiler/patches/binutils/bfd/config.bfd.patch
@@ -1,14 +1,14 @@
 --- bfd/config.bfd 2011-07-29 00:00:00.000000 +0000
 +++ bfd/config.bfd 2013-03-01 10:45:00.000000 +0800
-@@ -1576,2 +1576,15 @@
-   ;;
+@@ -1712,3 +1712,16 @@
+    ;;
 +  i[3-7]86-*-acess2)
-+    targ_defvec=bfd_elf32_i386_vec
-+    targ_selvecs="bfd_elf32_i386_vec i386coff_vec"
++    targ_defvec=i386_elf32_vec
++    targ_selvecs="i386_elf32_vec i386_coff_vec"
 +    ;;
 +  x86_64-*-acess2)
 +    targ_defvec=bfd_elf64_x86_64_vec
-+    targ_selvecs="bfd_elf32_i386_vec bfd_elf32_x86_64_vec i386linux_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_vec bfd_elf64_k1om_vec"
++    targ_selvecs="i386_elf32_vec bfd_elf32_x86_64_vec i386linux_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_vec bfd_elf64_k1om_vec"
 +    want64=true
 +    ;;
 +  arm-*-acess2)
@@ -16,3 +16,4 @@
 +    targ_selvecs="bfd_elf32_bigarm_vec"
 +    ;;
  # END OF targmatch.h
+   *)
diff --git a/Externals/cross-compiler/patches/gcc/config.sub.patch b/Externals/cross-compiler/patches/gcc/config.sub.patch
index 24a68c1b717587e9f7e5506a1e8d588978b50a1d..a961e435b245d7a1d7dd654b4670199568432c86 100644
--- a/Externals/cross-compiler/patches/gcc/config.sub.patch
+++ b/Externals/cross-compiler/patches/gcc/config.sub.patch
@@ -1,5 +1,8 @@
 --- config.sub
 +++ config.sub
-@@ -1336,1 +1336,2 @@
- 	      | -aos* | -aros* \
+@@ -1379,4 +1379,5 @@
+ 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
 +	      | -acess2* \
+ 	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ 	# Remember, each alternative MUST END IN *, to match a version number.
+ 		;;
diff --git a/KernelLand/Kernel/arch/x86/acpica.c b/KernelLand/Kernel/arch/x86/acpica.c
index 5603add407b4932a7c66f2bd751ccef83dfffbde..1d8b2e084c0bb5f6d0164fdedcf51e82a6b238e7 100644
--- a/KernelLand/Kernel/arch/x86/acpica.c
+++ b/KernelLand/Kernel/arch/x86/acpica.c
@@ -31,7 +31,7 @@ int ACPICA_Initialise(void)
 	ACPI_STATUS	rv;
 
 	#ifdef ACPI_DEBUG_OUTPUT
-	AcpiDbgLevel = ACPI_DB_ALL;
+	AcpiDbgLevel = ACPI_LV_ALL;
 	#endif
 
 	rv = AcpiInitializeSubsystem();
@@ -83,7 +83,7 @@ ACPI_STATUS AcpiOsTerminate(void)
 
 ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer(void)
 {
-	ACPI_SIZE	val;
+	ACPI_PHYSICAL_ADDRESS	val;
 	ACPI_STATUS	rv;
 
 	if( gACPI_RSDPOverride )
@@ -238,7 +238,7 @@ void *AcpiOsMapMemory(ACPI_PHYSICAL_ADDRESS PhysicalAddress, ACPI_SIZE Length)
 {
 	if( PhysicalAddress < ONEMEG ) {
 		ASSERTCR(Length, <=, ONEMEG-PhysicalAddress, NULL);
-		return (void*)(KERNEL_BASE | PhysicalAddress);
+		return (void*)(KERNEL_BASE | (uintptr_t)(PhysicalAddress));
 	}
 	
 	Uint	ofs = PhysicalAddress & (PAGE_SIZE-1);
@@ -518,10 +518,10 @@ ACPI_STATUS AcpiOsReadMemory(ACPI_PHYSICAL_ADDRESS Address, UINT64 *Value, UINT3
 {
 	void *ptr;
 	if( Address < ONEMEG ) {
-		ptr = (void*)(KERNEL_BASE | Address);
+		ptr = (void*)(KERNEL_BASE | (uintptr_t)Address);
 	}
 	else {
-		ptr = (char*)MM_MapTemp(Address) + (Address & 0xFFF);
+		ptr = (char*)MM_MapTemp(Address) + ((uintptr_t)Address & 0xFFF);
 	}
 
 	switch(Width)
@@ -545,7 +545,7 @@ ACPI_STATUS AcpiOsWriteMemory(ACPI_PHYSICAL_ADDRESS Address, UINT64 Value, UINT3
 {
 	void *ptr;
 	if( Address < ONEMEG ) {
-		ptr = (void*)(KERNEL_BASE | Address);
+		ptr = (void*)(KERNEL_BASE | (uintptr_t)Address);
 	}
 	else {
 		ptr = (char*)MM_MapTemp(Address) + (Address & 0xFFF);
diff --git a/KernelLand/Modules/Storage/AHCI/ahci.c b/KernelLand/Modules/Storage/AHCI/ahci.c
index d48c1bf35144bab40c3e7d815c9779431875e88e..4fe429ae8a94f61ed2844d90de905d0eaabe74ea 100644
--- a/KernelLand/Modules/Storage/AHCI/ahci.c
+++ b/KernelLand/Modules/Storage/AHCI/ahci.c
@@ -572,13 +572,13 @@ int AHCI_DoFIS(tAHCI_Port *Port, int bWrite,
 	while( ofs < OutSize )
 	{
 		tPAddr	phys = MM_GetPhysAddr( (char*)OutData + ofs );
-		ASSERT( !(phys & 3) );
-		// TODO: must be 4 byte aligned, and handle 64-bit addressing
 		size_t	len = MIN(OutSize - ofs, PAGE_SIZE - (phys % PAGE_SIZE));
+		// TODO: must be 4 byte aligned, and handle 64-bit addressing
+		ASSERT( !(phys & 3) );
+		// TODO: count must be even, and not more than 4MB
 		ASSERT( !(len & 1) );
 		ASSERT( len < 4*1024*1024 );
 		LOG("PRDTL[%i] = %P+%i", prdtl, phys, len);
-		// TODO: count must be even.
 		AHCI_int_SetAddr(Port->Ctrlr, &cmdt->PRDT[prdtl].DBA, phys);
 		cmdt->PRDT[prdtl].DBC = len-1;
 		prdtl ++;
diff --git a/Usermode/Libraries/libc++_extras.so_src/Makefile b/Usermode/Libraries/libc++_extras.so_src/Makefile
index f129b612ce26cf65f9bcf6b4beebb564e83bb494..02a325991fa22b0dc4bfd1342b0dc26d4303d195 100644
--- a/Usermode/Libraries/libc++_extras.so_src/Makefile
+++ b/Usermode/Libraries/libc++_extras.so_src/Makefile
@@ -13,7 +13,7 @@ LIBS     += -lc++
 include ../Makefile.tpl
 
 %.native: %.cpp
-	$(NCXX) $< -o $@ -Wall -std=c++11 -I include_exp/
+	$(NCXX) $< -o $@ -Wall -std=c++14 -O3 -I include_exp/
 
 TEST_cprintf.native: include_exp/cxxextras_printf
 
diff --git a/Usermode/Libraries/libc++_extras.so_src/include_exp/cxxextras_printf b/Usermode/Libraries/libc++_extras.so_src/include_exp/cxxextras_printf
index 7d05e21938356c9757fdc7b02c5085580d878202..4cc21ea98c924ebecd2f5c7be2cdb804d2c178e1 100644
--- a/Usermode/Libraries/libc++_extras.so_src/include_exp/cxxextras_printf
+++ b/Usermode/Libraries/libc++_extras.so_src/include_exp/cxxextras_printf
@@ -238,7 +238,8 @@ namespace _printf
 	constexpr bool val_fmt_prec_arg(const char *fmt, PrintfFlags item)
 	{
 		//static_assert(false, "Too few arguments when getting precision modifier");
-		return false ? false : throw "Too few arguments when getting precision modifier";
+		//return false ? false : throw "Too few arguments when getting precision modifier";
+		return false;
 	}
 	template <typename ...Args>
 	constexpr bool val_fmt_prec(const char * fmt, PrintfFlags item, Args... args)
@@ -274,7 +275,8 @@ namespace _printf
 	constexpr bool val_fmt_width_arg(const char *fmt, PrintfFlags item)
 	{
 		//static_assert(false, "Too few arguments when reading width for width modifier");
-		return false ? false : throw "Too few arguments when reading width for width modifier";
+		//return false ? false : throw "Too few arguments when reading width for width modifier";
+		return false;
 	}
 	template <typename ...Args>
 	constexpr bool val_fmt_width(const char * fmt, PrintfFlags item, Args... args)