diff --git a/repos/ports/lib/mk/virtualbox5-common.inc b/repos/ports/lib/mk/virtualbox5-common.inc
index 5d315017d..cf7cef1d4 100644
--- a/repos/ports/lib/mk/virtualbox5-common.inc
+++ b/repos/ports/lib/mk/virtualbox5-common.inc
@@ -45,12 +45,14 @@ VBOX_CC_OPT += -DRTLOG_REL_ENABLED -DRT_STRICT -DVBOX_STRICT
VBOX_CC_OPT += -DVBOX_WITH_USB -DVBOX_WITH_VUSB
-VBOX_CC_OPT += -DVBOX_WITH_NEW_APIC
-VBOX_CC_OPT += -DVBOX_WITH_NEW_IOAPIC
+# SMP is not working with the new version
+# VBOX_CC_OPT += -DVBOX_WITH_NEW_APIC
+# VBOX_CC_OPT += -DVBOX_WITH_NEW_IOAPIC
VBOX_CC_OPT += -DVBOX_WITH_E1000
VBOX_CC_OPT += -DVBOX_WITH_AHCI
+VBOX_CC_OPT += -DVBOX_WITH_MULTI_CORE
VIRTUALBOX_VERSION_MAJOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MAJOR = " | grep -v "'VBOX_VERSION_MAJOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_MINOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MINOR = " | grep -v "'VBOX_VERSION_MINOR" | sed "s/^.*= //")
diff --git a/repos/ports/lib/mk/virtualbox5-devices.mk b/repos/ports/lib/mk/virtualbox5-devices.mk
index 0d3bd9aee..76fc3cefe 100644
--- a/repos/ports/lib/mk/virtualbox5-devices.mk
+++ b/repos/ports/lib/mk/virtualbox5-devices.mk
@@ -13,7 +13,11 @@ SRC_CC += Devices/PC/DevACPI.cpp
SRC_CC += Devices/PC/DevFwCommon.cpp
SRC_CC += Devices/PC/DevDMA.cpp
SRC_CC += Devices/PC/DevHPET.cpp
+ifeq ($(filter $(VBOX_CC_OPT),-DVBOX_WITH_NEW_IOAPIC),)
+SRC_CC += Devices/PC/DevIoApic_Old.cpp
+else
SRC_CC += Devices/PC/DevIoApic.cpp
+endif
SRC_CC += Devices/PC/DevLPC.cpp
SRC_CC += Devices/PC/DevPcBios.cpp
SRC_C += Devices/PC/DevPcArch.c
diff --git a/repos/ports/lib/mk/virtualbox5-vmm.mk b/repos/ports/lib/mk/virtualbox5-vmm.mk
index 4802ea05f..4ce96ceff 100644
--- a/repos/ports/lib/mk/virtualbox5-vmm.mk
+++ b/repos/ports/lib/mk/virtualbox5-vmm.mk
@@ -87,8 +87,10 @@ SRC_CC += VMM/VMMR3/IOM.cpp
SRC_CC += VMM/VMMAll/IOMAll.cpp
SRC_CC += VMM/VMMAll/IOMAllMMIO.cpp
+ifneq ($(filter $(VBOX_CC_OPT),-DVBOX_WITH_NEW_APIC),)
SRC_CC += VMM/VMMR3/APIC.cpp
SRC_CC += VMM/VMMAll/APICAll.cpp
+endif
CC_OPT += -DVBOX_IN_VMM
diff --git a/repos/ports/run/vbox4_win10_64.run b/repos/ports/run/vbox4_win10_64.run
new file mode 100644
index 000000000..2e5641af4
--- /dev/null
+++ b/repos/ports/run/vbox4_win10_64.run
@@ -0,0 +1,25 @@
+#
+# Windows 10 in VirtualBox 4
+#
+
+assert_spec nova
+assert_spec 64bit
+
+set flavor "win10"
+
+set use_vbox4 1
+set use_vbox5 0
+
+set use_rumpfs 1
+# Write overlay only into ram
+set use_ram_fs 1
+# However read initial overlay from disk
+set use_overlay_from_disk 1
+
+set use_usb 1
+set use_ps2 [have_spec ps2]
+
+set use_vms 1
+set use_cpu_load 0
+
+source ${genode_dir}/repos/ports/run/vbox_win.inc
diff --git a/repos/ports/run/vbox_auto_win7.run b/repos/ports/run/vbox4_win7_32.run
similarity index 100%
rename from repos/ports/run/vbox_auto_win7.run
rename to repos/ports/run/vbox4_win7_32.run
diff --git a/repos/ports/run/vbox_auto_win7_multiple.run b/repos/ports/run/vbox4_win7_32_multiple.run
similarity index 100%
rename from repos/ports/run/vbox_auto_win7_multiple.run
rename to repos/ports/run/vbox4_win7_32_multiple.run
diff --git a/repos/ports/run/vbox_auto_win7_share.run b/repos/ports/run/vbox4_win7_32_share.run
similarity index 98%
rename from repos/ports/run/vbox_auto_win7_share.run
rename to repos/ports/run/vbox4_win7_32_share.run
index 060f11cb6..2b350b509 100644
--- a/repos/ports/run/vbox_auto_win7_share.run
+++ b/repos/ports/run/vbox4_win7_32_share.run
@@ -71,6 +71,8 @@ if {(![have_spec nova] && ![have_spec muen])} {
set virtualbox_binary "virtualbox-rem"
if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" }
if {[have_spec nova]} { set virtualbox_binary "virtualbox-nova" }
+set virtualbox5_binary "virtualbox5-rem"
+if {[have_spec nova]} { set virtualbox5_binary "virtualbox5-nova" }
set flavor "win7"
diff --git a/repos/ports/run/vbox_auto_win7_64.run b/repos/ports/run/vbox4_win7_64.run
similarity index 100%
rename from repos/ports/run/vbox_auto_win7_64.run
rename to repos/ports/run/vbox4_win7_64.run
diff --git a/repos/ports/run/vbox_auto_win7_64_raw.run b/repos/ports/run/vbox4_win7_64_raw.run
similarity index 100%
rename from repos/ports/run/vbox_auto_win7_64_raw.run
rename to repos/ports/run/vbox4_win7_64_raw.run
diff --git a/repos/ports/run/vbox_auto_win81_64.run b/repos/ports/run/vbox4_win81_64.run
similarity index 100%
rename from repos/ports/run/vbox_auto_win81_64.run
rename to repos/ports/run/vbox4_win81_64.run
diff --git a/repos/ports/run/vbox_auto_win10_vbox5.run b/repos/ports/run/vbox5_win10_64.run
similarity index 100%
rename from repos/ports/run/vbox_auto_win10_vbox5.run
rename to repos/ports/run/vbox5_win10_64.run
diff --git a/repos/ports/run/vbox_auto_win7_vbox5.run b/repos/ports/run/vbox5_win7_32.run
similarity index 95%
rename from repos/ports/run/vbox_auto_win7_vbox5.run
rename to repos/ports/run/vbox5_win7_32.run
index b979d7c08..925e3beeb 100644
--- a/repos/ports/run/vbox_auto_win7_vbox5.run
+++ b/repos/ports/run/vbox5_win7_32.run
@@ -8,7 +8,7 @@ assert_spec 64bit
set flavor "win7"
set use_vbox4 0
-set use_vbox5 5
+set use_vbox5 1
set use_rumpfs 1
# Write overlay only into ram
diff --git a/repos/ports/run/vm_win10.vbox b/repos/ports/run/vm_win10.vbox
index 6465c032d..3ba073903 100644
--- a/repos/ports/run/vm_win10.vbox
+++ b/repos/ports/run/vm_win10.vbox
@@ -21,7 +21,7 @@
-
+
diff --git a/repos/ports/src/virtualbox5/devices.cc b/repos/ports/src/virtualbox5/devices.cc
index caa8cb707..82d6c3bae 100644
--- a/repos/ports/src/virtualbox5/devices.cc
+++ b/repos/ports/src/virtualbox5/devices.cc
@@ -38,6 +38,9 @@ extern "C" int VBoxDevicesRegister(PPDMDEVREGCB pCallbacks, uint32_t u32Version)
REGISTER(DevicePcArch);
REGISTER(DevicePcBios);
REGISTER(DeviceIOAPIC);
+#ifndef VBOX_WITH_NEW_APIC
+ REGISTER(DeviceAPIC);
+#endif
REGISTER(DevicePS2KeyboardMouse);
REGISTER(DevicePIIX3IDE);
REGISTER(DeviceI8254);
diff --git a/repos/ports/src/virtualbox5/frontend/VirtualBoxBase.h b/repos/ports/src/virtualbox5/frontend/VirtualBoxBase.h
index 5b51be035..bb9120ee8 100644
--- a/repos/ports/src/virtualbox5/frontend/VirtualBoxBase.h
+++ b/repos/ports/src/virtualbox5/frontend/VirtualBoxBase.h
@@ -182,8 +182,12 @@ class Backupable : public Shareable
void rollback() { }
void commit() { }
void commitCopy() { }
- void assignCopy(const T *) { }
- void assignCopy(const Backupable &) { }
+
+ void assignCopy(const T *t) {
+ *this->Shareable::data() = *t; }
+
+ void assignCopy(const Backupable &t) {
+ *this->Shareable::data() = *t.data(); }
HRESULT backupEx() { return S_OK; }
diff --git a/tool/autopilot.list b/tool/autopilot.list
index cd64053c6..4e928eb5e 100644
--- a/tool/autopilot.list
+++ b/tool/autopilot.list
@@ -46,13 +46,15 @@ blk_cache
rump_ext2
thread
pthread
-vbox_auto_win7
-vbox_auto_win7_64
-vbox_auto_win7_64_raw
-vbox_auto_win7_vbox5
-vbox_auto_win7_share
-vbox_auto_win7_multiple
-vbox_auto_win81_64
+vbox4_win7_32
+vbox4_win7_64
+vbox4_win7_64_raw
+vbox4_win7_32_share
+vbox4_win7_64_multiple
+vbox4_win81_64
+vbox4_win10_64
+vbox5_win7_32
+vbox5_win10_64
tz_vmm
vmm
bomb