diff --git a/Kernel/Cargo.toml b/Kernel/Cargo.toml
index 1017b5fb67b0094894333782eea18063ab29edb0..0e7c43f21a959bfcca18ec6a2b55ab5dde9dbde7 100644
--- a/Kernel/Cargo.toml
+++ b/Kernel/Cargo.toml
@@ -6,6 +6,9 @@ version = "0.0.0"
 path = "main/main.rs"
 crate-type = ["staticlib"]
 
+[features]
+acpica = [ "kernel/acpica" ]
+
 [dependencies]
 kernel = { path = "Core" }
 syscalls = { path = "Modules/syscalls" }
diff --git a/Kernel/Core/Cargo.toml b/Kernel/Core/Cargo.toml
index e690200584966744e2f549a332a2bb4a84594f89..2c5ee9234522cfe230510b03b6814bf6cdd2a416 100644
--- a/Kernel/Core/Cargo.toml
+++ b/Kernel/Core/Cargo.toml
@@ -5,6 +5,10 @@ version = "0.0.0"
 [lib]
 path = "main.rs"
 
+[features]
+acpica = [ "va_list" ]
+
 [dependencies]
 stack_dst = { path = "../../externals/crates.io/stack_dst", default-features = false }
 tag_safe = "0.2"
+va_list = { version = "0.1", default-features = false, features = ["no_std"], optional = true }
diff --git a/Kernel/Core/arch/amd64/acpi/mod.rs b/Kernel/Core/arch/amd64/acpi/mod.rs
index c14a27a56a3f902c8d838129ff36e5cab88e890d..06258946b36cacaa702a1e82545a0bb83738fb52 100644
--- a/Kernel/Core/arch/amd64/acpi/mod.rs
+++ b/Kernel/Core/arch/amd64/acpi/mod.rs
@@ -10,10 +10,9 @@ use prelude::*;
 
 module_define!{ACPI, [], init}
 
-#[cfg(use_acpica)]
-#[path="acpica/mod.rs"] mod internal;
-#[cfg(not(use_acpica))]
-#[path="mine/mod.rs"] mod internal;
+#[cfg_attr(any(use_acpica,feature="acpica"), path="acpica/mod.rs")]
+#[cfg_attr(not(any(use_acpica,feature="acpica")), path="mine/mod.rs")]
+mod internal;
 
 #[repr(u8)]
 #[derive(Copy,Clone,PartialEq)]
diff --git a/Kernel/Makefile b/Kernel/Makefile
index fd70a7dc19f300acb23b4fc3ca30e8484346f54d..ef9f18f561eca29a35f122fd511ad58dbfac3a8b 100644
--- a/Kernel/Makefile
+++ b/Kernel/Makefile
@@ -117,7 +117,7 @@ OBJS := $(filter-out $(EXT_CRATES:%=%.o), $(OBJS))
 OBJS := $(OBJS:%=$(OBJDIR)%)
 LIBS := $(OBJDIR)libcore.rlib $(OBJDIR)libcompiler_builtins.rlib $(EXT_CRATES:%=$(OBJDIR)lib%.rlib)
 ifeq ($(USE_ACPICA),1)
-	LIBS += $(OBJDIR)acpica.a
+	LIBS += $(OBJDIR)libacpica.a
 endif
 
 .SUFFIXES:
@@ -249,7 +249,7 @@ $(OBJDIR)libcompiler_builtins.rlib: $(RUSTUP_SRC_DIR)libcompiler_builtins/src/li
 	$V$(ENV) $(RUSTC) $(RUSTFLAGS) --emit=link,dep-info --out-dir $(dir $@) --cfg feature=\"compiler-builtins\" $< --cfg stage0
 	@cp $(OBJDIR)core.d $(OBJDIR)libcore.d
 
-$(OBJDIR)acpica.a: ../acpica/Makefile $(wildcard ../acpica/patches/source/include/platform/*)
+$(OBJDIR)libacpica.a: ../acpica/Makefile $(wildcard ../acpica/patches/source/include/platform/*)
 	make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH) srcdir
 	make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH)
 	cp ../acpica/acpica-$(TRIPLE).a $@
diff --git a/Kernel/Makefile-xargo b/Kernel/Makefile-xargo
index 2cb7ab011f318983ff7521262b0d0583e84a2110..ec447a8dd9c884e2e5ed41685f9db4d06cc539fb 100644
--- a/Kernel/Makefile-xargo
+++ b/Kernel/Makefile-xargo
@@ -4,12 +4,20 @@
 V ?= @
 -include ../common.mk
 
+# - ACPICA can only be used on x86_64/amd64
+ifeq ($(ARCH),amd64)
+ USE_ACPICA ?= 1
+else
+ USE_ACPICA = 0
+endif
+
 -include BuildNum.$(ARCH).mk
 BUILDNUM ?= 1
 
 OBJDIR := .obj/$(ARCH)/
 OBJS := $(addprefix $(OBJDIR),start.ao log_cfg.ao libmain.a)
 
+CARGO_FEATURES :=
 ENV := RUST_VERSION="$(shell $(RUSTC) --version)"
 ENV += TK_GITSPEC="$(shell git log -n 1 | head -n 1 | awk '{print $$2}')"
 ENV += TK_VERSION="0.1"
@@ -21,8 +29,10 @@ LINKFLAGS += --gc-sections	# Prevents complaining about floating point methods
 #LINKFLAGS += --print-gc-sections
 
 EXCLUDE_FEATURES :=
-ifeq ($(ARCH),amd64)
-EXCLUDE_FEATURES := 3dnow avx avx2 sse sse2 sse3 sse4.1 sse4.2 mmx
+
+ifeq ($(USE_ACPICA),1)
+  OBJS += $(OBJDIR)libacpica.a
+  CARGO_FEATURES += acpica
 endif
 
 XARGO := RUST_TARGET_PATH=$(abspath targets) $(XARGO)
@@ -61,7 +71,7 @@ endif
 #
 $(OBJDIR)libmain.a: PHONY targets/target-$(ARCH).json
 	@echo "[XARGO] . > $@"
-	$V$(ENV) $(XARGO) rustc --target=target-$(ARCH) --release -- -C target-feature=$(subst $(space),$(comma),$(EXCLUDE_FEATURES:%=-%))
+	$V$(ENV) $(XARGO) rustc --target=target-$(ARCH) --release --features "$(CARGO_FEATURES)" -- -C target-feature=$(subst $(space),$(comma),$(EXCLUDE_FEATURES:%=-%))
 	@mkdir -p $(dir $@)
 	@cp target/target-$(ARCH)/release/libmain.a $@
 
@@ -69,6 +79,12 @@ targets/target-$(ARCH).json: Core/arch/$(ARCH)/target.json
 	@mkdir -p $(dir $@)
 	$Vcp $< $@
 
+# ACPICA
+$(OBJDIR)libacpica.a: ../acpica/Makefile $(wildcard ../acpica/patches/source/include/platform/*)
+	make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH) srcdir
+	make -C ../acpica TRIPLE=$(TRIPLE) ARCH=$(ARCH)
+	cp ../acpica/acpica-$(TRIPLE).a $@
+
 $(OBJDIR)%.ao: Core/arch/$(ARCH)/%.asm
 	@echo [AS] -o $@
 	@mkdir -p $(dir $@)
@@ -82,3 +98,4 @@ $(OBJDIR)log_cfg.ao: Core/log_cfg.S
 	@echo [AS] -o $@
 	@mkdir -p $(dir $@)
 	$V$(CC) -o $@ -c $<
+