diff --git a/MAINTAINERS b/MAINTAINERS
index 35c260d..3664dc8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -352,13 +352,13 @@ PowerPC Machines
 M: Alexander Graf <agraf@suse.de>
 L: qemu-ppc@nongnu.org
 S: Odd Fixes
-F: hw/ppc405_boards.c
+F: hw/ppc/ppc405_boards.c
 
 Bamboo
 M: Alexander Graf <agraf@suse.de>
 L: qemu-ppc@nongnu.org
 S: Odd Fixes
-F: hw/ppc440_bamboo.c
+F: hw/ppc/ppc440_bamboo.c
 
 e500
 M: Alexander Graf <agraf@suse.de>
@@ -374,22 +374,22 @@ M: Scott Wood <scottwood@freescale.com>
 L: qemu-ppc@nongnu.org
 S: Supported
 F: hw/ppc/mpc8544ds.c
-F: hw/mpc8544_guts.c
+F: hw/ppc/mpc8544_guts.c
 
 New World
 M: Alexander Graf <agraf@suse.de>
 L: qemu-ppc@nongnu.org
 S: Maintained
-F: hw/ppc_newworld.c
-F: hw/unin_pci.c
-F: hw/dec_pci.[hc]
+F: hw/ppc/ppc_newworld.c
+F: hw/ppc/unin_pci.c
+F: hw/ppc/dec_pci.[hc]
 
 Old World
 M: Alexander Graf <agraf@suse.de>
 L: qemu-ppc@nongnu.org
 S: Maintained
-F: hw/ppc_oldworld.c
-F: hw/grackle_pci.c
+F: hw/ppc/ppc_oldworld.c
+F: hw/ppc/grackle_pci.c
 
 PReP
 M: Andreas Färber <andreas.faerber@web.de>
@@ -404,13 +404,13 @@ M: David Gibson <david@gibson.dropbear.id.au>
 M: Alexander Graf <agraf@suse.de>
 L: qemu-ppc@nongnu.org
 S: Supported
-F: hw/spapr*
+F: hw/ppc/spapr*
 
 virtex_ml507
 M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
 L: qemu-ppc@nongnu.org
 S: Odd Fixes
-F: hw/virtex_ml507.c
+F: hw/ppc/virtex_ml507.c
 
 SH4 Machines
 ------------
diff --git a/hw/Makefile.objs b/hw/Makefile.objs
index 23ac249..d38e704 100644
--- a/hw/Makefile.objs
+++ b/hw/Makefile.objs
@@ -45,24 +45,10 @@ common-obj-y += pam.o
 
 extra-obj-y += pci/
 
-# PPC devices
+# PPC PREP devices
 common-obj-$(CONFIG_PREP_PCI) += prep_pci.o
 common-obj-$(CONFIG_I82378) += i82378.o
 common-obj-$(CONFIG_PC87312) += pc87312.o
-# Mac shared devices
-common-obj-$(CONFIG_MACIO) += macio.o
-common-obj-$(CONFIG_CUDA) += cuda.o
-common-obj-$(CONFIG_ADB) += adb.o
-common-obj-$(CONFIG_MAC_NVRAM) += mac_nvram.o
-common-obj-$(CONFIG_MAC_DBDMA) += mac_dbdma.o
-# OldWorld PowerMac
-common-obj-$(CONFIG_HEATHROW_PIC) += heathrow_pic.o
-common-obj-$(CONFIG_GRACKLE_PCI) += grackle_pci.o
-# NewWorld PowerMac
-common-obj-$(CONFIG_UNIN_PCI) += unin_pci.o
-common-obj-$(CONFIG_DEC_PCI) += dec_pci.o
-# PowerPC E500 boards
-common-obj-$(CONFIG_PPCE500_PCI) += ppce500_pci.o
 
 # MIPS devices
 common-obj-$(CONFIG_PIIX4) += piix4.o
diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs
index 462146b..193c5e9 100644
--- a/hw/ppc/Makefile.objs
+++ b/hw/ppc/Makefile.objs
@@ -1,32 +1,54 @@
-# shared objects
-obj-y = ppc.o ppc_booke.o
 # PREP target
 obj-y += mc146818rtc.o
 obj-y += ppc_prep.o
+
+# Xilinx PPC peripherals
+obj-y += xilinx_ethlite.o
+
+obj-y := $(addprefix ../,$(obj-y))
+
+# shared objects
+obj-y = ppc.o ppc_booke.o
+
 # IBM pSeries (sPAPR)
 obj-$(CONFIG_PSERIES) += spapr.o spapr_hcall.o spapr_rtas.o spapr_vio.o
 obj-$(CONFIG_PSERIES) += xics.o spapr_vty.o spapr_llan.o spapr_vscsi.o
-obj-$(CONFIG_PSERIES) += spapr_pci.o pci/pci-hotplug.o spapr_iommu.o
+obj-$(CONFIG_PSERIES) += spapr_pci.o ../pci/pci-hotplug.o spapr_iommu.o
 obj-$(CONFIG_PSERIES) += spapr_events.o spapr_nvram.o
+
 # PowerPC 4xx boards
 obj-y += ppc4xx_devs.o ppc4xx_pci.o ppc405_uc.o ppc405_boards.o
 obj-y += ppc440_bamboo.o
+
 # PowerPC E500 boards
 obj-$(CONFIG_FDT) += mpc8544_guts.o ppce500_spin.o
+obj-$(CONFIG_PPCE500_PCI) += ppce500_pci.o
+
 # PowerPC 440 Xilinx ML507 reference board.
 obj-y += virtex_ml507.o
+
 # PowerPC OpenPIC
 obj-y += openpic.o
-obj-$(CONFIG_FDT) += ../device_tree.o
 
-# Xilinx PPC peripherals
-obj-y += xilinx_ethlite.o
-
-obj-y := $(addprefix ../,$(obj-y))
+# PowerMac hardware
+obj-$(CONFIG_MACIO) += macio.o
+obj-$(CONFIG_CUDA) += cuda.o
+obj-$(CONFIG_ADB) += adb.o
+obj-$(CONFIG_MAC_NVRAM) += mac_nvram.o
+obj-$(CONFIG_MAC_DBDMA) += mac_dbdma.o
+obj-$(CONFIG_UNIN_PCI) += unin_pci.o
+obj-$(CONFIG_DEC_PCI) += dec_pci.o
 
 # OldWorld PowerMac
+obj-$(CONFIG_HEATHROW_PIC) += heathrow_pic.o
+obj-$(CONFIG_GRACKLE_PCI) += grackle_pci.o
 obj-y += mac_oldworld.o
+
 # NewWorld PowerMac
 obj-y += mac_newworld.o
+
 # e500
 obj-$(CONFIG_FDT) += e500.o mpc8544ds.o e500plat.o
+
+# Device tree support
+obj-$(CONFIG_FDT) += ../../device_tree.o
diff --git a/hw/adb.c b/hw/ppc/adb.c
similarity index 99%
rename from hw/adb.c
rename to hw/ppc/adb.c
index 6cf5465..b2a55d6 100644
--- a/hw/adb.c
+++ b/hw/ppc/adb.c
@@ -21,7 +21,7 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
+#include "hw/hw.h"
 #include "adb.h"
 #include "ui/console.h"
 
diff --git a/hw/adb.h b/hw/ppc/adb.h
similarity index 99%
rename from hw/adb.h
rename to hw/ppc/adb.h
index 721f1ac..bdfccd4 100644
--- a/hw/adb.h
+++ b/hw/ppc/adb.h
@@ -26,7 +26,7 @@
 #if !defined(__ADB_H__)
 #define __ADB_H__
 
-#include "qdev.h"
+#include "hw/qdev.h"
 
 #define MAX_ADB_DEVICES 16
 
diff --git a/hw/cuda.c b/hw/ppc/cuda.c
similarity index 99%
rename from hw/cuda.c
rename to hw/ppc/cuda.c
index b36c535..4c289f5 100644
--- a/hw/cuda.c
+++ b/hw/ppc/cuda.c
@@ -22,8 +22,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "ppc/mac.h"
+#include "hw/hw.h"
+#include "mac.h"
 #include "adb.h"
 #include "qemu/timer.h"
 #include "sysemu/sysemu.h"
diff --git a/hw/dec_pci.c b/hw/ppc/dec_pci.c
similarity index 97%
rename from hw/dec_pci.c
rename to hw/ppc/dec_pci.c
index ee3f4ca..ae1fd27 100644
--- a/hw/dec_pci.c
+++ b/hw/ppc/dec_pci.c
@@ -24,11 +24,11 @@
  */
 
 #include "dec_pci.h"
-#include "sysbus.h"
-#include "pci/pci.h"
-#include "pci/pci_host.h"
-#include "pci/pci_bridge.h"
-#include "pci/pci_bus.h"
+#include "hw/sysbus.h"
+#include "hw/pci/pci.h"
+#include "hw/pci/pci_host.h"
+#include "hw/pci/pci_bridge.h"
+#include "hw/pci/pci_bus.h"
 
 /* debug DEC */
 //#define DEBUG_DEC
diff --git a/hw/dec_pci.h b/hw/ppc/dec_pci.h
similarity index 100%
rename from hw/dec_pci.h
rename to hw/ppc/dec_pci.h
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index b7474c0..241bde4 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -28,14 +28,14 @@
 #include "sysemu/kvm.h"
 #include "kvm_ppc.h"
 #include "sysemu/device_tree.h"
-#include "hw/openpic.h"
-#include "hw/ppc.h"
+#include "openpic.h"
+#include "ppc.h"
 #include "hw/loader.h"
 #include "elf.h"
 #include "hw/sysbus.h"
 #include "exec/address-spaces.h"
 #include "qemu/host-utils.h"
-#include "hw/ppce500_pci.h"
+#include "ppce500_pci.h"
 
 #define BINARY_DEVICE_TREE_FILE    "mpc8544ds.dtb"
 #define UIMAGE_LOAD_BASE           0
diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c
index 25ac4b1..477c3df 100644
--- a/hw/ppc/e500plat.c
+++ b/hw/ppc/e500plat.c
@@ -12,10 +12,10 @@
 #include "config.h"
 #include "qemu-common.h"
 #include "e500.h"
-#include "../boards.h"
+#include "hw/boards.h"
 #include "sysemu/device_tree.h"
 #include "hw/pci/pci.h"
-#include "hw/openpic.h"
+#include "openpic.h"
 
 static void e500plat_fixup_devtree(PPCE500Params *params, void *fdt)
 {
diff --git a/hw/grackle_pci.c b/hw/ppc/grackle_pci.c
similarity index 98%
rename from hw/grackle_pci.c
rename to hw/ppc/grackle_pci.c
index 95639d5..0a8c320 100644
--- a/hw/grackle_pci.c
+++ b/hw/ppc/grackle_pci.c
@@ -23,9 +23,9 @@
  * THE SOFTWARE.
  */
 
-#include "pci/pci_host.h"
-#include "ppc/mac.h"
-#include "pci/pci.h"
+#include "hw/pci/pci_host.h"
+#include "hw/pci/pci.h"
+#include "mac.h"
 
 /* debug Grackle */
 //#define DEBUG_GRACKLE
diff --git a/hw/heathrow_pic.c b/hw/ppc/heathrow_pic.c
similarity index 99%
rename from hw/heathrow_pic.c
rename to hw/ppc/heathrow_pic.c
index c0a71c3..8b3635e 100644
--- a/hw/heathrow_pic.c
+++ b/hw/ppc/heathrow_pic.c
@@ -22,8 +22,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "ppc/mac.h"
+#include "hw/hw.h"
+#include "mac.h"
 
 /* debug PIC */
 //#define DEBUG_PIC
diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h
index b17107b..8b40d95 100644
--- a/hw/ppc/mac.h
+++ b/hw/ppc/mac.h
@@ -28,7 +28,7 @@
 #include "exec/memory.h"
 #include "hw/sysbus.h"
 #include "hw/ide/internal.h"
-#include "hw/adb.h"
+#include "hw/ppc/adb.h"
 
 /* SMP is not enabled, for now */
 #define MAX_CPUS 1
diff --git a/hw/mac_dbdma.c b/hw/ppc/mac_dbdma.c
similarity index 99%
rename from hw/mac_dbdma.c
rename to hw/ppc/mac_dbdma.c
index b894ab2..5a304d7 100644
--- a/hw/mac_dbdma.c
+++ b/hw/ppc/mac_dbdma.c
@@ -36,8 +36,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "isa.h"
+#include "hw/hw.h"
+#include "hw/isa.h"
 #include "mac_dbdma.h"
 #include "qemu/main-loop.h"
 
diff --git a/hw/mac_dbdma.h b/hw/ppc/mac_dbdma.h
similarity index 100%
rename from hw/mac_dbdma.h
rename to hw/ppc/mac_dbdma.h
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index 6de810b..2e13e27 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -47,10 +47,10 @@
  *
  */
 #include "hw/hw.h"
-#include "hw/ppc.h"
-#include "hw/ppc/mac.h"
-#include "hw/adb.h"
-#include "hw/mac_dbdma.h"
+#include "ppc.h"
+#include "mac.h"
+#include "adb.h"
+#include "mac_dbdma.h"
 #include "hw/nvram.h"
 #include "hw/pci/pci.h"
 #include "net/net.h"
@@ -58,7 +58,7 @@
 #include "hw/boards.h"
 #include "hw/fw_cfg.h"
 #include "hw/escc.h"
-#include "hw/openpic.h"
+#include "openpic.h"
 #include "hw/ide.h"
 #include "hw/loader.h"
 #include "elf.h"
diff --git a/hw/mac_nvram.c b/hw/ppc/mac_nvram.c
similarity index 98%
rename from hw/mac_nvram.c
rename to hw/ppc/mac_nvram.c
index 25121fa..e8a7255 100644
--- a/hw/mac_nvram.c
+++ b/hw/ppc/mac_nvram.c
@@ -22,10 +22,10 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "firmware_abi.h"
+#include "hw/hw.h"
+#include "hw/firmware_abi.h"
 #include "sysemu/sysemu.h"
-#include "ppc/mac.h"
+#include "mac.h"
 
 /* debug NVR */
 //#define DEBUG_NVR
diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c
index 9ed303a..d436141 100644
--- a/hw/ppc/mac_oldworld.c
+++ b/hw/ppc/mac_oldworld.c
@@ -24,9 +24,9 @@
  * THE SOFTWARE.
  */
 #include "hw/hw.h"
-#include "hw/ppc.h"
+#include "ppc.h"
 #include "mac.h"
-#include "hw/adb.h"
+#include "adb.h"
 #include "hw/nvram.h"
 #include "sysemu/sysemu.h"
 #include "net/net.h"
diff --git a/hw/macio.c b/hw/ppc/macio.c
similarity index 99%
rename from hw/macio.c
rename to hw/ppc/macio.c
index 74bdcd1..f9cb52f 100644
--- a/hw/macio.c
+++ b/hw/ppc/macio.c
@@ -22,11 +22,11 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "ppc/mac.h"
-#include "pci/pci.h"
+#include "hw/hw.h"
+#include "mac.h"
+#include "hw/pci/pci.h"
 #include "mac_dbdma.h"
-#include "escc.h"
+#include "hw/escc.h"
 
 #define TYPE_MACIO "macio"
 #define MACIO(obj) OBJECT_CHECK(MacIOState, (obj), TYPE_MACIO)
diff --git a/hw/mpc8544_guts.c b/hw/ppc/mpc8544_guts.c
similarity index 98%
rename from hw/mpc8544_guts.c
rename to hw/ppc/mpc8544_guts.c
index 728723c..193beab 100644
--- a/hw/mpc8544_guts.c
+++ b/hw/ppc/mpc8544_guts.c
@@ -17,9 +17,9 @@
  *
  */
 
-#include "hw.h"
+#include "hw/hw.h"
 #include "sysemu/sysemu.h"
-#include "sysbus.h"
+#include "hw/sysbus.h"
 
 #define MPC8544_GUTS_MMIO_SIZE        0x1000
 #define MPC8544_GUTS_RSTCR_RESET      0x02
diff --git a/hw/ppc/mpc8544ds.c b/hw/ppc/mpc8544ds.c
index e25c70b..fcf57e5 100644
--- a/hw/ppc/mpc8544ds.c
+++ b/hw/ppc/mpc8544ds.c
@@ -12,9 +12,9 @@
 #include "config.h"
 #include "qemu-common.h"
 #include "e500.h"
-#include "../boards.h"
+#include "hw/boards.h"
 #include "sysemu/device_tree.h"
-#include "hw/openpic.h"
+#include "openpic.h"
 
 static void mpc8544ds_fixup_devtree(PPCE500Params *params, void *fdt)
 {
diff --git a/hw/openpic.c b/hw/ppc/openpic.c
similarity index 99%
rename from hw/openpic.c
rename to hw/ppc/openpic.c
index 20a479c..f1b2880 100644
--- a/hw/openpic.c
+++ b/hw/ppc/openpic.c
@@ -33,12 +33,12 @@
  * Serial interrupts, as implemented in Raven chipset are not supported yet.
  *
  */
-#include "hw.h"
-#include "ppc/mac.h"
-#include "pci/pci.h"
+#include "hw/hw.h"
+#include "mac.h"
+#include "hw/pci/pci.h"
 #include "openpic.h"
-#include "sysbus.h"
-#include "pci/msi.h"
+#include "hw/sysbus.h"
+#include "hw/pci/msi.h"
 #include "qemu/bitops.h"
 #include "ppc.h"
 
diff --git a/hw/openpic.h b/hw/ppc/openpic.h
similarity index 100%
rename from hw/openpic.h
rename to hw/ppc/openpic.h
diff --git a/hw/ppc-viosrp.h b/hw/ppc/ppc-viosrp.h
similarity index 100%
rename from hw/ppc-viosrp.h
rename to hw/ppc/ppc-viosrp.h
diff --git a/hw/ppc.c b/hw/ppc/ppc.c
similarity index 99%
rename from hw/ppc.c
rename to hw/ppc/ppc.c
index c52e22f..b984c3f 100644
--- a/hw/ppc.c
+++ b/hw/ppc/ppc.c
@@ -21,13 +21,13 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "ppc.h"
+#include "hw/hw.h"
+#include "hw/ppc/ppc.h"
 #include "qemu/timer.h"
 #include "sysemu/sysemu.h"
-#include "nvram.h"
+#include "hw/nvram.h"
 #include "qemu/log.h"
-#include "loader.h"
+#include "hw/loader.h"
 #include "sysemu/kvm.h"
 #include "kvm_ppc.h"
 
diff --git a/hw/ppc.h b/hw/ppc/ppc.h
similarity index 100%
rename from hw/ppc.h
rename to hw/ppc/ppc.h
diff --git a/hw/ppc405.h b/hw/ppc/ppc405.h
similarity index 100%
rename from hw/ppc405.h
rename to hw/ppc/ppc405.h
diff --git a/hw/ppc405_boards.c b/hw/ppc/ppc405_boards.c
similarity index 99%
rename from hw/ppc405_boards.c
rename to hw/ppc/ppc405_boards.c
index cf371db..bda9dcd 100644
--- a/hw/ppc405_boards.c
+++ b/hw/ppc/ppc405_boards.c
@@ -21,16 +21,16 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
+#include "hw/hw.h"
 #include "ppc.h"
 #include "ppc405.h"
-#include "nvram.h"
-#include "flash.h"
+#include "hw/nvram.h"
+#include "hw/flash.h"
 #include "sysemu/sysemu.h"
 #include "block/block.h"
-#include "boards.h"
+#include "hw/boards.h"
 #include "qemu/log.h"
-#include "loader.h"
+#include "hw/loader.h"
 #include "sysemu/blockdev.h"
 #include "exec/address-spaces.h"
 
diff --git a/hw/ppc405_uc.c b/hw/ppc/ppc405_uc.c
similarity index 99%
rename from hw/ppc405_uc.c
rename to hw/ppc/ppc405_uc.c
index c96d103..9eadab0 100644
--- a/hw/ppc405_uc.c
+++ b/hw/ppc/ppc405_uc.c
@@ -21,10 +21,10 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
+#include "hw/hw.h"
 #include "ppc.h"
 #include "ppc405.h"
-#include "serial.h"
+#include "hw/serial.h"
 #include "qemu/timer.h"
 #include "sysemu/sysemu.h"
 #include "qemu/log.h"
diff --git a/hw/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c
similarity index 98%
rename from hw/ppc440_bamboo.c
rename to hw/ppc/ppc440_bamboo.c
index 73b5ac7..6ef8821 100644
--- a/hw/ppc440_bamboo.c
+++ b/hw/ppc/ppc440_bamboo.c
@@ -14,20 +14,20 @@
 #include "config.h"
 #include "qemu-common.h"
 #include "net/net.h"
-#include "hw.h"
-#include "pci/pci.h"
-#include "boards.h"
+#include "hw/hw.h"
+#include "hw/pci/pci.h"
+#include "hw/boards.h"
 #include "sysemu/kvm.h"
 #include "kvm_ppc.h"
 #include "sysemu/device_tree.h"
-#include "loader.h"
+#include "hw/loader.h"
 #include "elf.h"
 #include "exec/address-spaces.h"
-#include "serial.h"
+#include "hw/serial.h"
 #include "ppc.h"
 #include "ppc405.h"
 #include "sysemu/sysemu.h"
-#include "sysbus.h"
+#include "hw/sysbus.h"
 
 #define BINARY_DEVICE_TREE_FILE "bamboo.dtb"
 
diff --git a/hw/ppc4xx.h b/hw/ppc/ppc4xx.h
similarity index 99%
rename from hw/ppc4xx.h
rename to hw/ppc/ppc4xx.h
index 59dba9e..91d84ba 100644
--- a/hw/ppc4xx.h
+++ b/hw/ppc/ppc4xx.h
@@ -25,7 +25,7 @@
 #if !defined(PPC_4XX_H)
 #define PPC_4XX_H
 
-#include "pci/pci.h"
+#include "hw/pci/pci.h"
 
 /* PowerPC 4xx core initialization */
 PowerPCCPU *ppc4xx_init(const char *cpu_model,
diff --git a/hw/ppc4xx_devs.c b/hw/ppc/ppc4xx_devs.c
similarity index 99%
rename from hw/ppc4xx_devs.c
rename to hw/ppc/ppc4xx_devs.c
index 5e491bc..b78a2de 100644
--- a/hw/ppc4xx_devs.c
+++ b/hw/ppc/ppc4xx_devs.c
@@ -21,7 +21,7 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
+#include "hw/hw.h"
 #include "ppc.h"
 #include "ppc4xx.h"
 #include "qemu/log.h"
diff --git a/hw/ppc4xx_pci.c b/hw/ppc/ppc4xx_pci.c
similarity index 99%
rename from hw/ppc4xx_pci.c
rename to hw/ppc/ppc4xx_pci.c
index ba2d669..8bc984e 100644
--- a/hw/ppc4xx_pci.c
+++ b/hw/ppc/ppc4xx_pci.c
@@ -19,11 +19,11 @@
 /* This file implements emulation of the 32-bit PCI controller found in some
  * 4xx SoCs, such as the 440EP. */
 
-#include "hw.h"
+#include "hw/hw.h"
 #include "ppc.h"
 #include "ppc4xx.h"
-#include "pci/pci.h"
-#include "pci/pci_host.h"
+#include "hw/pci/pci.h"
+#include "hw/pci/pci_host.h"
 #include "exec/address-spaces.h"
 
 #undef DEBUG
diff --git a/hw/ppc_booke.c b/hw/ppc/ppc_booke.c
similarity index 99%
rename from hw/ppc_booke.c
rename to hw/ppc/ppc_booke.c
index 25a4e91..c096d07 100644
--- a/hw/ppc_booke.c
+++ b/hw/ppc/ppc_booke.c
@@ -21,13 +21,13 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
+#include "hw/hw.h"
 #include "ppc.h"
 #include "qemu/timer.h"
 #include "sysemu/sysemu.h"
-#include "nvram.h"
+#include "hw/nvram.h"
 #include "qemu/log.h"
-#include "loader.h"
+#include "hw/loader.h"
 
 
 /* Timer Control Register */
diff --git a/hw/ppc_prep.c b/hw/ppc/ppc_prep.c
similarity index 100%
rename from hw/ppc_prep.c
rename to hw/ppc/ppc_prep.c
diff --git a/hw/ppce500_pci.c b/hw/ppc/ppce500_pci.c
similarity index 99%
rename from hw/ppce500_pci.c
rename to hw/ppc/ppce500_pci.c
index 1e1ade3..3b71840 100644
--- a/hw/ppce500_pci.c
+++ b/hw/ppc/ppce500_pci.c
@@ -14,10 +14,10 @@
  * (at your option) any later version.
  */
 
-#include "hw.h"
-#include "hw/ppc/e500-ccsr.h"
-#include "pci/pci.h"
-#include "pci/pci_host.h"
+#include "hw/hw.h"
+#include "e500-ccsr.h"
+#include "hw/pci/pci.h"
+#include "hw/pci/pci_host.h"
 #include "qemu/bswap.h"
 #include "ppce500_pci.h"
 
diff --git a/hw/ppce500_pci.h b/hw/ppc/ppce500_pci.h
similarity index 100%
rename from hw/ppce500_pci.h
rename to hw/ppc/ppce500_pci.h
diff --git a/hw/ppce500_spin.c b/hw/ppc/ppce500_spin.c
similarity index 99%
rename from hw/ppce500_spin.c
rename to hw/ppc/ppce500_spin.c
index 7e90fb9..9cfb819 100644
--- a/hw/ppce500_spin.c
+++ b/hw/ppc/ppce500_spin.c
@@ -27,9 +27,9 @@
  *
  */
 
-#include "hw.h"
+#include "hw/hw.h"
 #include "sysemu/sysemu.h"
-#include "sysbus.h"
+#include "hw/sysbus.h"
 #include "sysemu/kvm.h"
 
 #define MAX_CPUS 32
diff --git a/hw/spapr.c b/hw/ppc/spapr.c
similarity index 99%
rename from hw/spapr.c
rename to hw/ppc/spapr.c
index e88a27a..b5e041e 100644
--- a/hw/spapr.c
+++ b/hw/ppc/spapr.c
@@ -25,7 +25,7 @@
  *
  */
 #include "sysemu/sysemu.h"
-#include "hw.h"
+#include "hw/hw.h"
 #include "elf.h"
 #include "net/net.h"
 #include "sysemu/blockdev.h"
@@ -34,18 +34,18 @@
 #include "kvm_ppc.h"
 
 #include "hw/boards.h"
-#include "hw/ppc.h"
+#include "ppc.h"
 #include "hw/loader.h"
 
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
-#include "hw/spapr_pci.h"
-#include "hw/xics.h"
+#include "spapr.h"
+#include "spapr_vio.h"
+#include "spapr_pci.h"
+#include "xics.h"
 #include "hw/pci/msi.h"
 
 #include "sysemu/kvm.h"
 #include "kvm_ppc.h"
-#include "pci/pci.h"
+#include "hw/pci/pci.h"
 
 #include "exec/address-spaces.h"
 #include "hw/usb.h"
diff --git a/hw/spapr.h b/hw/ppc/spapr.h
similarity index 99%
rename from hw/spapr.h
rename to hw/ppc/spapr.h
index 3a1f69f..864bee9 100644
--- a/hw/spapr.h
+++ b/hw/ppc/spapr.h
@@ -2,7 +2,7 @@
 #define __HW_SPAPR_H__
 
 #include "sysemu/dma.h"
-#include "hw/xics.h"
+#include "hw/ppc/xics.h"
 
 struct VIOsPAPRBus;
 struct sPAPRPHBState;
diff --git a/hw/spapr_events.c b/hw/ppc/spapr_events.c
similarity index 99%
rename from hw/spapr_events.c
rename to hw/ppc/spapr_events.c
index ce78f09..571e2cf 100644
--- a/hw/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -30,8 +30,8 @@
 #include "hw/qdev.h"
 #include "sysemu/device_tree.h"
 
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
+#include "spapr.h"
+#include "spapr_vio.h"
 
 #include <libfdt.h>
 
diff --git a/hw/spapr_hcall.c b/hw/ppc/spapr_hcall.c
similarity index 99%
rename from hw/spapr_hcall.c
rename to hw/ppc/spapr_hcall.c
index 2889742..9dbfa62 100644
--- a/hw/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -2,7 +2,7 @@
 #include "cpu.h"
 #include "sysemu/sysemu.h"
 #include "helper_regs.h"
-#include "hw/spapr.h"
+#include "spapr.h"
 
 #define HPTES_PER_GROUP 8
 
diff --git a/hw/spapr_iommu.c b/hw/ppc/spapr_iommu.c
similarity index 99%
rename from hw/spapr_iommu.c
rename to hw/ppc/spapr_iommu.c
index d8a098c..a23931e 100644
--- a/hw/spapr_iommu.c
+++ b/hw/ppc/spapr_iommu.c
@@ -16,14 +16,14 @@
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
-#include "hw.h"
+#include "hw/hw.h"
 #include "sysemu/kvm.h"
-#include "qdev.h"
+#include "hw/qdev.h"
 #include "kvm_ppc.h"
 #include "sysemu/dma.h"
 #include "exec/address-spaces.h"
 
-#include "hw/spapr.h"
+#include "spapr.h"
 
 #include <libfdt.h>
 
diff --git a/hw/spapr_llan.c b/hw/ppc/spapr_llan.c
similarity index 99%
rename from hw/spapr_llan.c
rename to hw/ppc/spapr_llan.c
index db34b48..ce5d9ee 100644
--- a/hw/spapr_llan.c
+++ b/hw/ppc/spapr_llan.c
@@ -24,11 +24,11 @@
  * THE SOFTWARE.
  *
  */
-#include "hw.h"
+#include "hw/hw.h"
 #include "net/net.h"
 #include "hw/qdev.h"
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
+#include "spapr.h"
+#include "spapr_vio.h"
 
 #include <libfdt.h>
 
diff --git a/hw/spapr_nvram.c b/hw/ppc/spapr_nvram.c
similarity index 99%
rename from hw/spapr_nvram.c
rename to hw/ppc/spapr_nvram.c
index 680cdba..29dabb5 100644
--- a/hw/spapr_nvram.c
+++ b/hw/ppc/spapr_nvram.c
@@ -26,8 +26,8 @@
 
 #include "sysemu/device_tree.h"
 #include "hw/sysbus.h"
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
+#include "spapr.h"
+#include "spapr_vio.h"
 
 typedef struct sPAPRNVRAM {
     VIOsPAPRDevice sdev;
diff --git a/hw/spapr_pci.c b/hw/ppc/spapr_pci.c
similarity index 99%
rename from hw/spapr_pci.c
rename to hw/ppc/spapr_pci.c
index 4eacbcf..0034290 100644
--- a/hw/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -22,13 +22,13 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "pci/pci.h"
-#include "pci/msi.h"
-#include "pci/msix.h"
-#include "pci/pci_host.h"
-#include "hw/spapr.h"
-#include "hw/spapr_pci.h"
+#include "hw/hw.h"
+#include "hw/pci/pci.h"
+#include "hw/pci/msi.h"
+#include "hw/pci/msix.h"
+#include "hw/pci/pci_host.h"
+#include "spapr.h"
+#include "spapr_pci.h"
 #include "exec/address-spaces.h"
 #include <libfdt.h>
 #include "trace.h"
diff --git a/hw/spapr_pci.h b/hw/ppc/spapr_pci.h
similarity index 99%
rename from hw/spapr_pci.h
rename to hw/ppc/spapr_pci.h
index 8bb3c62..f32a04b 100644
--- a/hw/spapr_pci.h
+++ b/hw/ppc/spapr_pci.h
@@ -25,7 +25,7 @@
 
 #include "hw/pci/pci.h"
 #include "hw/pci/pci_host.h"
-#include "hw/xics.h"
+#include "hw/ppc/xics.h"
 
 #define SPAPR_MSIX_MAX_DEVS 32
 
diff --git a/hw/spapr_rtas.c b/hw/ppc/spapr_rtas.c
similarity index 99%
rename from hw/spapr_rtas.c
rename to hw/ppc/spapr_rtas.c
index 5ec787f..a1da864 100644
--- a/hw/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -30,8 +30,8 @@
 #include "hw/qdev.h"
 #include "sysemu/device_tree.h"
 
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
+#include "spapr.h"
+#include "spapr_vio.h"
 
 #include <libfdt.h>
 
diff --git a/hw/spapr_vio.c b/hw/ppc/spapr_vio.c
similarity index 99%
rename from hw/spapr_vio.c
rename to hw/ppc/spapr_vio.c
index 34c9ca6..7e2cbe5 100644
--- a/hw/spapr_vio.c
+++ b/hw/ppc/spapr_vio.c
@@ -19,20 +19,20 @@
  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "hw.h"
+#include "hw/hw.h"
 #include "sysemu/sysemu.h"
-#include "boards.h"
+#include "hw/boards.h"
 #include "monitor/monitor.h"
-#include "loader.h"
+#include "hw/loader.h"
 #include "elf.h"
 #include "hw/sysbus.h"
 #include "sysemu/kvm.h"
 #include "sysemu/device_tree.h"
 #include "kvm_ppc.h"
 
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
-#include "hw/xics.h"
+#include "spapr.h"
+#include "spapr_vio.h"
+#include "xics.h"
 
 #ifdef CONFIG_FDT
 #include <libfdt.h>
diff --git a/hw/spapr_vio.h b/hw/ppc/spapr_vio.h
similarity index 100%
rename from hw/spapr_vio.h
rename to hw/ppc/spapr_vio.h
diff --git a/hw/spapr_vscsi.c b/hw/ppc/spapr_vscsi.c
similarity index 99%
rename from hw/spapr_vscsi.c
rename to hw/ppc/spapr_vscsi.c
index 7fc0e13..68cd072 100644
--- a/hw/spapr_vscsi.c
+++ b/hw/ppc/spapr_vscsi.c
@@ -31,14 +31,14 @@
  *  - Add indirect descriptors support
  *  - Maybe do autosense (PAPR seems to mandate it, linux doesn't care)
  */
-#include "hw.h"
-#include "scsi.h"
-#include "scsi-defs.h"
+#include "hw/hw.h"
+#include "hw/scsi.h"
+#include "hw/scsi-defs.h"
 #include "srp.h"
 #include "hw/qdev.h"
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
-#include "hw/ppc-viosrp.h"
+#include "spapr.h"
+#include "spapr_vio.h"
+#include "ppc-viosrp.h"
 
 #include <libfdt.h>
 
diff --git a/hw/spapr_vty.c b/hw/ppc/spapr_vty.c
similarity index 98%
rename from hw/spapr_vty.c
rename to hw/ppc/spapr_vty.c
index 5c63eaa..9dffa5e 100644
--- a/hw/spapr_vty.c
+++ b/hw/ppc/spapr_vty.c
@@ -1,7 +1,7 @@
-#include "qdev.h"
+#include "hw/qdev.h"
 #include "char/char.h"
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
+#include "spapr.h"
+#include "spapr_vio.h"
 
 #define VTERM_BUFSIZE   16
 
diff --git a/hw/srp.h b/hw/ppc/srp.h
similarity index 100%
rename from hw/srp.h
rename to hw/ppc/srp.h
diff --git a/hw/unin_pci.c b/hw/ppc/unin_pci.c
similarity index 99%
rename from hw/unin_pci.c
rename to hw/ppc/unin_pci.c
index f1c3c20..f5a0597 100644
--- a/hw/unin_pci.c
+++ b/hw/ppc/unin_pci.c
@@ -21,10 +21,10 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include "hw.h"
-#include "ppc/mac.h"
-#include "pci/pci.h"
-#include "pci/pci_host.h"
+#include "hw/hw.h"
+#include "mac.h"
+#include "hw/pci/pci.h"
+#include "hw/pci/pci_host.h"
 
 /* debug UniNorth */
 //#define DEBUG_UNIN
diff --git a/hw/virtex_ml507.c b/hw/ppc/virtex_ml507.c
similarity index 97%
rename from hw/virtex_ml507.c
rename to hw/ppc/virtex_ml507.c
index 8c4e8e4..6551eb1 100644
--- a/hw/virtex_ml507.c
+++ b/hw/ppc/virtex_ml507.c
@@ -22,15 +22,15 @@
  * THE SOFTWARE.
  */
 
-#include "sysbus.h"
-#include "hw.h"
-#include "serial.h"
-#include "flash.h"
+#include "hw/sysbus.h"
+#include "hw/hw.h"
+#include "hw/serial.h"
+#include "hw/flash.h"
 #include "sysemu/sysemu.h"
-#include "devices.h"
-#include "boards.h"
+#include "hw/devices.h"
+#include "hw/boards.h"
 #include "sysemu/device_tree.h"
-#include "loader.h"
+#include "hw/loader.h"
 #include "elf.h"
 #include "qemu/log.h"
 #include "exec/address-spaces.h"
@@ -40,7 +40,7 @@
 #include "ppc405.h"
 
 #include "sysemu/blockdev.h"
-#include "xilinx.h"
+#include "hw/xilinx.h"
 
 #define EPAPR_MAGIC    (0x45504150)
 #define FLASH_SIZE     (16 * 1024 * 1024)
diff --git a/hw/xics.c b/hw/ppc/xics.c
similarity index 99%
rename from hw/xics.c
rename to hw/ppc/xics.c
index 9ef0d61..b6aec77 100644
--- a/hw/xics.c
+++ b/hw/ppc/xics.c
@@ -25,10 +25,10 @@
  *
  */
 
-#include "hw.h"
+#include "hw/hw.h"
 #include "trace.h"
-#include "hw/spapr.h"
-#include "hw/xics.h"
+#include "spapr.h"
+#include "xics.h"
 
 /*
  * ICP: Presentation layer
diff --git a/hw/xics.h b/hw/ppc/xics.h
similarity index 100%
rename from hw/xics.h
rename to hw/ppc/xics.h
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 2f4f068..4506af1 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -31,11 +31,11 @@
 #include "sysemu/cpus.h"
 #include "sysemu/device_tree.h"
 #include "hw/sysbus.h"
-#include "hw/spapr.h"
+#include "hw/ppc/spapr.h"
 
 #include "hw/sysbus.h"
-#include "hw/spapr.h"
-#include "hw/spapr_vio.h"
+#include "hw/ppc/spapr.h"
+#include "hw/ppc/spapr_vio.h"
 
 //#define DEBUG_KVM
 
