diff --git a/hw/Makefile.objs b/hw/Makefile.objs
index d208a5d..9dc7596 100644
--- a/hw/Makefile.objs
+++ b/hw/Makefile.objs
@@ -34,11 +34,6 @@ ifeq ($(CONFIG_SOFTMMU),y)
 # Per-target files
 # virtio has to be here due to weird dependency between PCI and virtio-net.
 # need to fix this properly
-obj-$(CONFIG_VIRTIO) += dataplane/
-obj-$(CONFIG_VIRTIO) += virtio.o virtio-blk.o virtio-balloon.o virtio-net.o
-obj-$(CONFIG_VIRTIO) += virtio-serial-bus.o virtio-scsi.o
-obj-$(CONFIG_SOFTMMU) += vhost_net.o
-obj-$(CONFIG_VHOST_NET) += vhost.o
 obj-$(CONFIG_VGA) += vga.o
 
 # Inter-VM PCI shared memory & VFIO PCI device assignment
diff --git a/hw/block/Makefile.objs b/hw/block/Makefile.objs
index 5fa5101..4fcbe45 100644
--- a/hw/block/Makefile.objs
+++ b/hw/block/Makefile.objs
@@ -6,3 +6,5 @@ common-obj-$(CONFIG_PFLASH_CFI01) += pflash_cfi01.o
 common-obj-$(CONFIG_PFLASH_CFI02) += pflash_cfi02.o
 common-obj-$(CONFIG_XEN_BACKEND) += xen_disk.o
 common-obj-$(CONFIG_ECC) += ecc.o
+
+obj-$(CONFIG_VIRTIO) += dataplane/ virtio-blk.o
diff --git a/hw/dataplane/Makefile.objs b/hw/block/dataplane/Makefile.objs
similarity index 100%
rename from hw/dataplane/Makefile.objs
rename to hw/block/dataplane/Makefile.objs
diff --git a/hw/dataplane/hostmem.c b/hw/block/dataplane/hostmem.c
similarity index 100%
rename from hw/dataplane/hostmem.c
rename to hw/block/dataplane/hostmem.c
diff --git a/hw/dataplane/hostmem.h b/hw/block/dataplane/hostmem.h
similarity index 100%
rename from hw/dataplane/hostmem.h
rename to hw/block/dataplane/hostmem.h
diff --git a/hw/dataplane/ioq.c b/hw/block/dataplane/ioq.c
similarity index 100%
rename from hw/dataplane/ioq.c
rename to hw/block/dataplane/ioq.c
diff --git a/hw/dataplane/ioq.h b/hw/block/dataplane/ioq.h
similarity index 100%
rename from hw/dataplane/ioq.h
rename to hw/block/dataplane/ioq.h
diff --git a/hw/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c
similarity index 100%
rename from hw/dataplane/virtio-blk.c
rename to hw/block/dataplane/virtio-blk.c
diff --git a/hw/dataplane/virtio-blk.h b/hw/block/dataplane/virtio-blk.h
similarity index 100%
rename from hw/dataplane/virtio-blk.h
rename to hw/block/dataplane/virtio-blk.h
diff --git a/hw/dataplane/vring.c b/hw/block/dataplane/vring.c
similarity index 100%
rename from hw/dataplane/vring.c
rename to hw/block/dataplane/vring.c
diff --git a/hw/dataplane/vring.h b/hw/block/dataplane/vring.h
similarity index 100%
rename from hw/dataplane/vring.h
rename to hw/block/dataplane/vring.h
diff --git a/hw/virtio-blk.c b/hw/block/virtio-blk.c
similarity index 100%
rename from hw/virtio-blk.c
rename to hw/block/virtio-blk.c
diff --git a/hw/char/Makefile.objs b/hw/char/Makefile.objs
index eee23ff..ddfd3ec 100644
--- a/hw/char/Makefile.objs
+++ b/hw/char/Makefile.objs
@@ -8,3 +8,5 @@ common-obj-$(CONFIG_VIRTIO) += virtio-console.o
 common-obj-$(CONFIG_XILINX) += xilinx_uartlite.o
 common-obj-$(CONFIG_XEN_BACKEND) += xen_console.o
 common-obj-$(CONFIG_CADENCE) += cadence_uart.o
+
+obj-$(CONFIG_VIRTIO) += virtio-serial-bus.o
diff --git a/hw/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
similarity index 100%
rename from hw/virtio-serial-bus.c
rename to hw/char/virtio-serial-bus.c
diff --git a/hw/net/Makefile.objs b/hw/net/Makefile.objs
index ad91293..73217d8 100644
--- a/hw/net/Makefile.objs
+++ b/hw/net/Makefile.objs
@@ -20,3 +20,6 @@ common-obj-$(CONFIG_MIPSNET) += mipsnet.o
 common-obj-$(CONFIG_XILINX_AXI) += xilinx_axienet.o
 
 common-obj-$(CONFIG_CADENCE) += cadence_gem.o
+
+obj-$(CONFIG_VIRTIO) += virtio-net.o
+obj-y += vhost_net.o
diff --git a/hw/vhost_net.c b/hw/net/vhost_net.c
similarity index 100%
rename from hw/vhost_net.c
rename to hw/net/vhost_net.c
diff --git a/hw/virtio-net.c b/hw/net/virtio-net.c
similarity index 100%
rename from hw/virtio-net.c
rename to hw/net/virtio-net.c
diff --git a/hw/scsi/Makefile.objs b/hw/scsi/Makefile.objs
index 6a56504..b76b9c3 100644
--- a/hw/scsi/Makefile.objs
+++ b/hw/scsi/Makefile.objs
@@ -4,3 +4,4 @@ common-obj-$(CONFIG_LSI_SCSI_PCI) += lsi53c895a.o
 common-obj-$(CONFIG_MEGASAS_SCSI_PCI) += megasas.o
 common-obj-$(CONFIG_ESP) += esp.o
 common-obj-$(CONFIG_ESP_PCI) += esp-pci.o
+obj-$(CONFIG_VIRTIO) += virtio-scsi.o
diff --git a/hw/virtio-scsi.c b/hw/scsi/virtio-scsi.c
similarity index 100%
rename from hw/virtio-scsi.c
rename to hw/scsi/virtio-scsi.c
diff --git a/hw/virtio/Makefile.objs b/hw/virtio/Makefile.objs
index ed63495..3b47ad0 100644
--- a/hw/virtio/Makefile.objs
+++ b/hw/virtio/Makefile.objs
@@ -2,3 +2,5 @@ common-obj-$(CONFIG_VIRTIO) += virtio-rng.o
 common-obj-$(CONFIG_VIRTIO_PCI) += virtio-pci.o
 common-obj-$(CONFIG_VIRTIO) += virtio-bus.o
 
+obj-$(CONFIG_VIRTIO) += virtio.o virtio-balloon.o 
+obj-$(CONFIG_VHOST_NET) += vhost.o
