diff --git a/Makefile.objs b/Makefile.objs
index bd9534d..0c20ade 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -5,9 +5,7 @@ universal-obj-y += qemu-log.o
 
 #######################################################################
 # QObject
-qobject-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o
-qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o
-qobject-obj-y += qerror.o error.o qemu-error.o
+qobject-obj-y = qobject/ error.o qemu-error.o
 
 universal-obj-y += $(qobject-obj-y)
 
@@ -224,6 +222,7 @@ vl.o: QEMU_CFLAGS+=$(SDL_CFLAGS)
 QEMU_CFLAGS+=$(GLIB_CFLAGS)
 
 nested-vars += \
+	qobject-obj-y \
 	qga-obj-y \
 	qom-obj-y \
 	qapi-obj-y \
diff --git a/balloon.c b/balloon.c
index e02ab1c..211b93d 100644
--- a/balloon.c
+++ b/balloon.c
@@ -30,7 +30,7 @@
 #include "balloon.h"
 #include "trace.h"
 #include "qmp-commands.h"
-#include "qjson.h"
+#include "qobject/qjson.h"
 
 static QEMUBalloonEvent *balloon_event_fn;
 static QEMUBalloonStatus *balloon_stat_fn;
diff --git a/block.c b/block.c
index 56426a9..7a67859 100644
--- a/block.c
+++ b/block.c
@@ -28,7 +28,7 @@
 #include "block_int.h"
 #include "blockjob.h"
 #include "module.h"
-#include "qjson.h"
+#include "qobject/qjson.h"
 #include "sysemu.h"
 #include "notify.h"
 #include "qemu-coroutine.h"
diff --git a/block.h b/block.h
index aa608a8..c41554b 100644
--- a/block.h
+++ b/block.h
@@ -5,7 +5,7 @@
 #include "qemu-common.h"
 #include "qemu-option.h"
 #include "qemu-coroutine.h"
-#include "qobject.h"
+#include "qobject/qobject.h"
 #include "qapi-types.h"
 
 /* block.c */
diff --git a/block/qcow2.c b/block/qcow2.c
index c1ff31f..6e069c9 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -28,7 +28,7 @@
 #include "aes.h"
 #include "block/qcow2.h"
 #include "qemu-error.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "trace.h"
 
 /*
diff --git a/block/qed.c b/block/qed.c
index 6c182ca..9f7a3f2 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -15,7 +15,7 @@
 #include "qemu-timer.h"
 #include "trace.h"
 #include "qed.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "migration.h"
 
 static void qed_aio_cancel(BlockDriverAIOCB *blockacb)
diff --git a/block_int.h b/block_int.h
index cedabbd..cdf5ff1 100644
--- a/block_int.h
+++ b/block_int.h
@@ -30,7 +30,7 @@
 #include "qemu-coroutine.h"
 #include "qemu-timer.h"
 #include "qapi-types.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "monitor.h"
 
 #define BLOCK_FLAG_ENCRYPT          1
diff --git a/blockdev-nbd.c b/blockdev-nbd.c
index 8031813..35cd485 100644
--- a/blockdev-nbd.c
+++ b/blockdev-nbd.c
@@ -12,7 +12,7 @@
 #include "blockdev.h"
 #include "hw/block-common.h"
 #include "monitor.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "sysemu.h"
 #include "qmp-commands.h"
 #include "trace.h"
diff --git a/blockdev.c b/blockdev.c
index 99828ad..9d8d892 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -11,10 +11,10 @@
 #include "hw/block-common.h"
 #include "blockjob.h"
 #include "monitor.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "qemu-option.h"
 #include "qemu-config.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "sysemu.h"
 #include "block_int.h"
 #include "qmp-commands.h"
diff --git a/blockjob.c b/blockjob.c
index f55f55a..1d9e91f 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -30,7 +30,7 @@
 #include "block.h"
 #include "blockjob.h"
 #include "block_int.h"
-#include "qjson.h"
+#include "qobject/qjson.h"
 #include "qemu-coroutine.h"
 #include "qmp-commands.h"
 #include "qemu-timer.h"
diff --git a/dump-stub.c b/dump-stub.c
index 56d4564..aa2e8da 100644
--- a/dump-stub.c
+++ b/dump-stub.c
@@ -13,7 +13,7 @@
 
 #include "qemu-common.h"
 #include "dump.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "qmp-commands.h"
 
 /* we need this function in hmp.c */
diff --git a/error.c b/error.c
index cd600af..160fef1 100644
--- a/error.c
+++ b/error.c
@@ -12,10 +12,10 @@
 
 #include "qemu-common.h"
 #include "qapi/error.h"
-#include "qjson.h"
-#include "qdict.h"
+#include "qobject/qjson.h"
+#include "qobject/qdict.h"
 #include "qapi-types.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 struct Error
 {
diff --git a/hmp.h b/hmp.h
index 71ea384..8ab5bdc 100644
--- a/hmp.h
+++ b/hmp.h
@@ -16,7 +16,7 @@
 
 #include "qemu-common.h"
 #include "qapi-types.h"
-#include "qdict.h"
+#include "qobject/qdict.h"
 
 void hmp_info_name(Monitor *mon);
 void hmp_info_version(Monitor *mon);
diff --git a/hw/ivshmem.c b/hw/ivshmem.c
index 0c62d43..b4fdf49 100644
--- a/hw/ivshmem.c
+++ b/hw/ivshmem.c
@@ -22,7 +22,7 @@
 #include "msix.h"
 #include "kvm.h"
 #include "migration.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "event_notifier.h"
 #include "qemu-char.h"
 
diff --git a/hw/pcie_aer.c b/hw/pcie_aer.c
index b04c164..c516cdc 100644
--- a/hw/pcie_aer.c
+++ b/hw/pcie_aer.c
@@ -19,7 +19,7 @@
  */
 
 #include "sysemu.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "monitor.h"
 #include "pci_bridge.h"
 #include "pcie.h"
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index 877ee09..583d603 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -1,6 +1,6 @@
 #include "net/net.h"
 #include "qdev.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "blockdev.h"
 #include "hw/block-common.h"
 #include "qemu-char.h"
diff --git a/hw/watchdog.c b/hw/watchdog.c
index b52aced..ddd6a9a 100644
--- a/hw/watchdog.c
+++ b/hw/watchdog.c
@@ -23,7 +23,7 @@
 #include "qemu-option.h"
 #include "qemu-config.h"
 #include "qemu-queue.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "monitor.h"
 #include "sysemu.h"
 #include "hw/watchdog.h"
diff --git a/include/net/net.h b/include/net/net.h
index 9ff9305..1a0e952 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -3,7 +3,7 @@
 
 #include "qemu-queue.h"
 #include "qemu-common.h"
-#include "qdict.h"
+#include "qobject/qdict.h"
 #include "qemu-option.h"
 #include "net/queue.h"
 #include "vmstate.h"
diff --git a/include/net/slirp.h b/include/net/slirp.h
index 2ca09b6..b6ab8ba 100644
--- a/include/net/slirp.h
+++ b/include/net/slirp.h
@@ -25,7 +25,7 @@
 #define QEMU_NET_SLIRP_H
 
 #include "qemu-common.h"
-#include "qdict.h"
+#include "qobject/qdict.h"
 #include "qemu-option.h"
 #include "qapi-types.h"
 
diff --git a/include/qapi/qmp-core.h b/include/qapi/qmp-core.h
index 2a57a0c..91c524e 100644
--- a/include/qapi/qmp-core.h
+++ b/include/qapi/qmp-core.h
@@ -14,8 +14,8 @@
 #ifndef QMP_CORE_H
 #define QMP_CORE_H
 
-#include "qobject.h"
-#include "qdict.h"
+#include "qobject/qobject.h"
+#include "qobject/qdict.h"
 #include "qapi/error.h"
 
 typedef void (QmpCommandFunc)(QDict *, QObject **, Error **);
diff --git a/include/qapi/qmp-input-visitor.h b/include/qapi/qmp-input-visitor.h
index 9071f9c..8376a3a 100644
--- a/include/qapi/qmp-input-visitor.h
+++ b/include/qapi/qmp-input-visitor.h
@@ -15,7 +15,7 @@
 #define QMP_INPUT_VISITOR_H
 
 #include "qapi/visit-core.h"
-#include "qobject.h"
+#include "qobject/qobject.h"
 
 typedef struct QmpInputVisitor QmpInputVisitor;
 
diff --git a/include/qapi/qmp-output-visitor.h b/include/qapi/qmp-output-visitor.h
index 39cb575..72361d6 100644
--- a/include/qapi/qmp-output-visitor.h
+++ b/include/qapi/qmp-output-visitor.h
@@ -15,7 +15,7 @@
 #define QMP_OUTPUT_VISITOR_H
 
 #include "qapi/visit-core.h"
-#include "qobject.h"
+#include "qobject/qobject.h"
 
 typedef struct QmpOutputVisitor QmpOutputVisitor;
 
diff --git a/qemu-objects.h b/include/qapi/qmp-types.h
similarity index 61%
rename from qemu-objects.h
rename to include/qapi/qmp-types.h
index c53fbaa..ab4555d 100644
--- a/qemu-objects.h
+++ b/include/qapi/qmp-types.h
@@ -13,13 +13,13 @@
 #ifndef QEMU_OBJECTS_H
 #define QEMU_OBJECTS_H
 
-#include "qobject.h"
-#include "qint.h"
-#include "qfloat.h"
-#include "qbool.h"
-#include "qstring.h"
-#include "qdict.h"
-#include "qlist.h"
-#include "qjson.h"
+#include "qobject/qobject.h"
+#include "qobject/qint.h"
+#include "qobject/qfloat.h"
+#include "qobject/qbool.h"
+#include "qobject/qstring.h"
+#include "qobject/qdict.h"
+#include "qobject/qlist.h"
+#include "qobject/qjson.h"
 
 #endif /* QEMU_OBJECTS_H */
diff --git a/include/qapi/types-core.h b/include/qapi/types-core.h
index 0080206..d49f455 100644
--- a/include/qapi/types-core.h
+++ b/include/qapi/types-core.h
@@ -16,6 +16,6 @@
 
 #include "qemu-common.h"
 #include "qapi/error.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 #endif
diff --git a/json-lexer.h b/include/qobject/json-lexer.h
similarity index 94%
rename from json-lexer.h
rename to include/qobject/json-lexer.h
index 10bc0a7..e7cbdce 100644
--- a/json-lexer.h
+++ b/include/qobject/json-lexer.h
@@ -14,8 +14,8 @@
 #ifndef QEMU_JSON_LEXER_H
 #define QEMU_JSON_LEXER_H
 
-#include "qstring.h"
-#include "qlist.h"
+#include "qobject/qstring.h"
+#include "qobject/qlist.h"
 
 typedef enum json_token_type {
     JSON_OPERATOR = 100,
diff --git a/json-parser.h b/include/qobject/json-parser.h
similarity index 94%
rename from json-parser.h
rename to include/qobject/json-parser.h
index 4e346ac..0ee7372 100644
--- a/json-parser.h
+++ b/include/qobject/json-parser.h
@@ -15,7 +15,7 @@
 #define QEMU_JSON_PARSER_H
 
 #include "qemu-common.h"
-#include "qlist.h"
+#include "qobject/qlist.h"
 #include "qapi/error.h"
 
 QObject *json_parser_parse(QList *tokens, va_list *ap);
diff --git a/json-streamer.h b/include/qobject/json-streamer.h
similarity index 94%
rename from json-streamer.h
rename to include/qobject/json-streamer.h
index f09bc4d..dd2bfe5 100644
--- a/json-streamer.h
+++ b/include/qobject/json-streamer.h
@@ -14,8 +14,8 @@
 #ifndef QEMU_JSON_STREAMER_H
 #define QEMU_JSON_STREAMER_H
 
-#include "qlist.h"
-#include "json-lexer.h"
+#include "qobject/qlist.h"
+#include "qobject/json-lexer.h"
 
 typedef struct JSONMessageParser
 {
diff --git a/qbool.h b/include/qobject/qbool.h
similarity index 94%
rename from qbool.h
rename to include/qobject/qbool.h
index fe66fcd..689e4b3 100644
--- a/qbool.h
+++ b/include/qobject/qbool.h
@@ -15,7 +15,7 @@
 #define QBOOL_H
 
 #include <stdint.h>
-#include "qobject.h"
+#include "qobject/qobject.h"
 
 typedef struct QBool {
     QObject_HEAD;
diff --git a/qdict.h b/include/qobject/qdict.h
similarity index 97%
rename from qdict.h
rename to include/qobject/qdict.h
index 929d8d2..c3dc2db 100644
--- a/qdict.h
+++ b/include/qobject/qdict.h
@@ -13,8 +13,8 @@
 #ifndef QDICT_H
 #define QDICT_H
 
-#include "qobject.h"
-#include "qlist.h"
+#include "qobject/qobject.h"
+#include "qobject/qlist.h"
 #include "qemu-queue.h"
 #include <stdint.h>
 
diff --git a/qerror.h b/include/qobject/qerror.h
similarity index 99%
rename from qerror.h
rename to include/qobject/qerror.h
index cfdabba..26c5fca 100644
--- a/qerror.h
+++ b/include/qobject/qerror.h
@@ -12,8 +12,8 @@
 #ifndef QERROR_H
 #define QERROR_H
 
-#include "qdict.h"
-#include "qstring.h"
+#include "qobject/qdict.h"
+#include "qobject/qstring.h"
 #include "qemu-error.h"
 #include "qapi/error.h"
 #include "qapi-types.h"
diff --git a/qfloat.h b/include/qobject/qfloat.h
similarity index 94%
rename from qfloat.h
rename to include/qobject/qfloat.h
index 9d67876..72d4d15 100644
--- a/qfloat.h
+++ b/include/qobject/qfloat.h
@@ -15,7 +15,7 @@
 #define QFLOAT_H
 
 #include <stdint.h>
-#include "qobject.h"
+#include "qobject/qobject.h"
 
 typedef struct QFloat {
     QObject_HEAD;
diff --git a/qint.h b/include/qobject/qint.h
similarity index 94%
rename from qint.h
rename to include/qobject/qint.h
index 6b1a15c..b348928 100644
--- a/qint.h
+++ b/include/qobject/qint.h
@@ -14,7 +14,7 @@
 #define QINT_H
 
 #include <stdint.h>
-#include "qobject.h"
+#include "qobject/qobject.h"
 
 typedef struct QInt {
     QObject_HEAD;
diff --git a/qjson.h b/include/qobject/qjson.h
similarity index 92%
rename from qjson.h
rename to include/qobject/qjson.h
index 1190d8a..03faf50 100644
--- a/qjson.h
+++ b/include/qobject/qjson.h
@@ -16,8 +16,8 @@
 
 #include <stdarg.h>
 #include "compiler.h"
-#include "qobject.h"
-#include "qstring.h"
+#include "qobject/qobject.h"
+#include "qobject/qstring.h"
 
 QObject *qobject_from_json(const char *string) GCC_FMT_ATTR(1, 0);
 QObject *qobject_from_jsonf(const char *string, ...) GCC_FMT_ATTR(1, 2);
diff --git a/qlist.h b/include/qobject/qlist.h
similarity index 98%
rename from qlist.h
rename to include/qobject/qlist.h
index ae776f9..3f94780 100644
--- a/qlist.h
+++ b/include/qobject/qlist.h
@@ -13,7 +13,7 @@
 #ifndef QLIST_H
 #define QLIST_H
 
-#include "qobject.h"
+#include "qobject/qobject.h"
 #include "qemu-queue.h"
 #include "qemu-common.h"
 #include "qemu-queue.h"
diff --git a/qobject.h b/include/qobject/qobject.h
similarity index 100%
rename from qobject.h
rename to include/qobject/qobject.h
diff --git a/qstring.h b/include/qobject/qstring.h
similarity index 96%
rename from qstring.h
rename to include/qobject/qstring.h
index 84ccd96..6c3f7b3 100644
--- a/qstring.h
+++ b/include/qobject/qstring.h
@@ -14,7 +14,7 @@
 #define QSTRING_H
 
 #include <stdint.h>
-#include "qobject.h"
+#include "qobject/qobject.h"
 
 typedef struct QString {
     QObject_HEAD;
diff --git a/include/ui/console.h b/include/ui/console.h
index b9a8a65..7b5aacd 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -1,7 +1,7 @@
 #ifndef CONSOLE_H
 #define CONSOLE_H
 
-#include "qdict.h"
+#include "qobject/qdict.h"
 #include "notify.h"
 #include "monitor.h"
 #include "trace.h"
diff --git a/migration.h b/migration.h
index 86e4118..1d18c21 100644
--- a/migration.h
+++ b/migration.h
@@ -14,7 +14,7 @@
 #ifndef QEMU_MIGRATION_H
 #define QEMU_MIGRATION_H
 
-#include "qdict.h"
+#include "qobject/qdict.h"
 #include "qemu-common.h"
 #include "notify.h"
 #include "qapi/error.h"
diff --git a/monitor.c b/monitor.c
index 874c3ee..9a29d10 100644
--- a/monitor.c
+++ b/monitor.c
@@ -47,14 +47,14 @@
 #include "migration.h"
 #include "kvm.h"
 #include "acl.h"
-#include "qint.h"
-#include "qfloat.h"
-#include "qlist.h"
-#include "qbool.h"
-#include "qstring.h"
-#include "qjson.h"
-#include "json-streamer.h"
-#include "json-parser.h"
+#include "qobject/qint.h"
+#include "qobject/qfloat.h"
+#include "qobject/qlist.h"
+#include "qobject/qbool.h"
+#include "qobject/qstring.h"
+#include "qobject/qjson.h"
+#include "qobject/json-streamer.h"
+#include "qobject/json-parser.h"
 #include "osdep.h"
 #include "cpu.h"
 #include "trace.h"
diff --git a/monitor.h b/monitor.h
index 76c59f7..4823837 100644
--- a/monitor.h
+++ b/monitor.h
@@ -2,8 +2,8 @@
 #define MONITOR_H
 
 #include "qemu-common.h"
-#include "qerror.h"
-#include "qdict.h"
+#include "qobject/qerror.h"
+#include "qobject/qdict.h"
 #include "block.h"
 #include "readline.h"
 
diff --git a/qapi/qapi-dealloc-visitor.c b/qapi/qapi-dealloc-visitor.c
index d6ae4a8..1674783 100644
--- a/qapi/qapi-dealloc-visitor.c
+++ b/qapi/qapi-dealloc-visitor.c
@@ -14,7 +14,7 @@
 #include "qapi/dealloc-visitor.h"
 #include "qemu-queue.h"
 #include "qemu-common.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 
 typedef struct StackEntry
 {
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 6b29e64..bb50c39 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -11,12 +11,12 @@
  *
  */
 
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "qapi/qmp-core.h"
-#include "json-parser.h"
+#include "qobject/json-parser.h"
 #include "qapi-types.h"
 #include "qapi/error.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 static QDict *qmp_dispatch_check_obj(const QObject *request, Error **errp)
 {
diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c
index 9878ef6..a4d92a6 100644
--- a/qapi/qmp-input-visitor.c
+++ b/qapi/qmp-input-visitor.c
@@ -15,8 +15,8 @@
 #include "qapi/visit-impl.h"
 #include "qemu-queue.h"
 #include "qemu-common.h"
-#include "qemu-objects.h"
-#include "qerror.h"
+#include "qapi/qmp-types.h"
+#include "qobject/qerror.h"
 
 #define QIV_STACK_SIZE 1024
 
diff --git a/qapi/qmp-output-visitor.c b/qapi/qmp-output-visitor.c
index 3a056ef..21192b5 100644
--- a/qapi/qmp-output-visitor.c
+++ b/qapi/qmp-output-visitor.c
@@ -15,8 +15,8 @@
 #include "qapi/visit-impl.h"
 #include "qemu-queue.h"
 #include "qemu-common.h"
-#include "qemu-objects.h"
-#include "qerror.h"
+#include "qapi/qmp-types.h"
+#include "qobject/qerror.h"
 
 typedef struct QStackEntry
 {
diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c
index eaf6b11..f1e71de 100644
--- a/qapi/string-input-visitor.c
+++ b/qapi/string-input-visitor.c
@@ -13,7 +13,7 @@
 #include "qemu-common.h"
 #include "qapi/string-input-visitor.h"
 #include "qapi/visit-impl.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 struct StringInputVisitor
 {
diff --git a/qapi/string-output-visitor.c b/qapi/string-output-visitor.c
index 507ebf7..9930153 100644
--- a/qapi/string-output-visitor.c
+++ b/qapi/string-output-visitor.c
@@ -13,7 +13,7 @@
 #include "qemu-common.h"
 #include "qapi/string-output-visitor.h"
 #include "qapi/visit-impl.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 struct StringOutputVisitor
 {
diff --git a/qemu-char.h b/qemu-char.h
index 486644b..5d3f36c 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -5,8 +5,8 @@
 #include "qemu-queue.h"
 #include "qemu-option.h"
 #include "qemu-config.h"
-#include "qobject.h"
-#include "qstring.h"
+#include "qobject/qobject.h"
+#include "qobject/qstring.h"
 #include "main-loop.h"
 
 /* character device */
diff --git a/qemu-img.c b/qemu-img.c
index f17f187..1449708 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -23,7 +23,7 @@
  */
 #include "qapi-visit.h"
 #include "qapi/qmp-output-visitor.h"
-#include "qjson.h"
+#include "qobject/qjson.h"
 #include "qemu-common.h"
 #include "qemu-option.h"
 #include "qemu-error.h"
diff --git a/qemu-option.c b/qemu-option.c
index 734b13c..235c734 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -28,9 +28,9 @@
 
 #include "qemu-common.h"
 #include "qemu-error.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "qapi/error.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "qemu-option-internal.h"
 
 /*
diff --git a/qemu-option.h b/qemu-option.h
index 53eca74..a068cfb 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -29,7 +29,7 @@
 #include <stdint.h>
 #include "qemu-queue.h"
 #include "qapi/error.h"
-#include "qdict.h"
+#include "qobject/qdict.h"
 
 enum QEMUOptionParType {
     OPT_FLAG,
diff --git a/qemu_socket.h b/qemu_socket.h
index c10d732..1f7eea1 100644
--- a/qemu_socket.h
+++ b/qemu_socket.h
@@ -28,7 +28,7 @@ int inet_aton(const char *cp, struct in_addr *ia);
 
 #include "qemu-option.h"
 #include "qapi/error.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 /* misc helpers */
 int qemu_socket(int domain, int type, int protocol);
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index 726930a..4381182 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -17,7 +17,7 @@
 #include <sys/wait.h>
 #include "qga/guest-agent-core.h"
 #include "qga-qmp-commands.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "qemu-queue.h"
 #include "host-utils.h"
 
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 5bd8fb2..5596171 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -16,7 +16,7 @@
 #include <powrprof.h>
 #include "qga/guest-agent-core.h"
 #include "qga-qmp-commands.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 #ifndef SHTDN_REASON_FLAG_PLANNED
 #define SHTDN_REASON_FLAG_PLANNED 0x80000000
diff --git a/qga/commands.c b/qga/commands.c
index 46b0b08..b5703e1 100644
--- a/qga/commands.c
+++ b/qga/commands.c
@@ -13,7 +13,7 @@
 #include <glib.h>
 #include "qga/guest-agent-core.h"
 #include "qga-qmp-commands.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 
 /* Note: in some situations, like with the fsfreeze, logging may be
  * temporarilly disabled. if it is necessary that a command be able
diff --git a/qga/main.c b/qga/main.c
index 9b59a52..67fce71 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -20,14 +20,14 @@
 #include <sys/wait.h>
 #include <sys/stat.h>
 #endif
-#include "json-streamer.h"
-#include "json-parser.h"
-#include "qint.h"
-#include "qjson.h"
+#include "qobject/json-streamer.h"
+#include "qobject/json-parser.h"
+#include "qobject/qint.h"
+#include "qobject/qjson.h"
 #include "qga/guest-agent-core.h"
 #include "module.h"
 #include "signal.h"
-#include "qerror.h"
+#include "qobject/qerror.h"
 #include "qapi/qmp-core.h"
 #include "qga/channel.h"
 #ifdef _WIN32
diff --git a/qobject/Makefile.objs b/qobject/Makefile.objs
new file mode 100644
index 0000000..c603aa9
--- /dev/null
+++ b/qobject/Makefile.objs
@@ -0,0 +1,4 @@
+qobject-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o
+qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o
+qobject-obj-y += qerror.o
+
diff --git a/json-lexer.c b/qobject/json-lexer.c
similarity index 98%
rename from json-lexer.c
rename to qobject/json-lexer.c
index 3cd3285..e96ddc2 100644
--- a/json-lexer.c
+++ b/qobject/json-lexer.c
@@ -11,12 +11,12 @@
  *
  */
 
-#include "qstring.h"
-#include "qlist.h"
-#include "qdict.h"
-#include "qint.h"
+#include "qobject/qstring.h"
+#include "qobject/qlist.h"
+#include "qobject/qdict.h"
+#include "qobject/qint.h"
 #include "qemu-common.h"
-#include "json-lexer.h"
+#include "qobject/json-lexer.h"
 
 #define MAX_TOKEN_SIZE (64ULL << 20)
 
diff --git a/json-parser.c b/qobject/json-parser.c
similarity index 98%
rename from json-parser.c
rename to qobject/json-parser.c
index 457291b..544d79f 100644
--- a/json-parser.c
+++ b/qobject/json-parser.c
@@ -14,15 +14,15 @@
 #include <stdarg.h>
 
 #include "qemu-common.h"
-#include "qstring.h"
-#include "qint.h"
-#include "qdict.h"
-#include "qlist.h"
-#include "qfloat.h"
-#include "qbool.h"
-#include "json-parser.h"
-#include "json-lexer.h"
-#include "qerror.h"
+#include "qobject/qstring.h"
+#include "qobject/qint.h"
+#include "qobject/qdict.h"
+#include "qobject/qlist.h"
+#include "qobject/qfloat.h"
+#include "qobject/qbool.h"
+#include "qobject/json-parser.h"
+#include "qobject/json-lexer.h"
+#include "qobject/qerror.h"
 
 typedef struct JSONParserContext
 {
diff --git a/json-streamer.c b/qobject/json-streamer.c
similarity index 95%
rename from json-streamer.c
rename to qobject/json-streamer.c
index c255c78..f0797b6 100644
--- a/json-streamer.c
+++ b/qobject/json-streamer.c
@@ -11,12 +11,12 @@
  *
  */
 
-#include "qlist.h"
-#include "qint.h"
-#include "qdict.h"
+#include "qobject/qlist.h"
+#include "qobject/qint.h"
+#include "qobject/qdict.h"
 #include "qemu-common.h"
-#include "json-lexer.h"
-#include "json-streamer.h"
+#include "qobject/json-lexer.h"
+#include "qobject/json-streamer.h"
 
 #define MAX_TOKEN_SIZE (64ULL << 20)
 #define MAX_NESTING (1ULL << 10)
diff --git a/qbool.c b/qobject/qbool.c
similarity index 95%
rename from qbool.c
rename to qobject/qbool.c
index 590cd71..01c26e7 100644
--- a/qbool.c
+++ b/qobject/qbool.c
@@ -11,8 +11,8 @@
  *
  */
 
-#include "qbool.h"
-#include "qobject.h"
+#include "qobject/qbool.h"
+#include "qobject/qobject.h"
 #include "qemu-common.h"
 
 static void qbool_destroy_obj(QObject *obj);
diff --git a/qdict.c b/qobject/qdict.c
similarity index 98%
rename from qdict.c
rename to qobject/qdict.c
index 4bf308b..97a9972 100644
--- a/qdict.c
+++ b/qobject/qdict.c
@@ -10,12 +10,12 @@
  * See the COPYING.LIB file in the top-level directory.
  */
 
-#include "qint.h"
-#include "qfloat.h"
-#include "qdict.h"
-#include "qbool.h"
-#include "qstring.h"
-#include "qobject.h"
+#include "qobject/qint.h"
+#include "qobject/qfloat.h"
+#include "qobject/qdict.h"
+#include "qobject/qbool.h"
+#include "qobject/qstring.h"
+#include "qobject/qobject.h"
 #include "qemu-queue.h"
 #include "qemu-common.h"
 
diff --git a/qerror.c b/qobject/qerror.c
similarity index 98%
rename from qerror.c
rename to qobject/qerror.c
index 0818504..4462cfb 100644
--- a/qerror.c
+++ b/qobject/qerror.c
@@ -11,8 +11,8 @@
  */
 
 #include "monitor.h"
-#include "qjson.h"
-#include "qerror.h"
+#include "qobject/qjson.h"
+#include "qobject/qerror.h"
 #include "qemu-common.h"
 
 static void qerror_destroy_obj(QObject *obj);
diff --git a/qfloat.c b/qobject/qfloat.c
similarity index 95%
rename from qfloat.c
rename to qobject/qfloat.c
index 98338f3..8b3cb81 100644
--- a/qfloat.c
+++ b/qobject/qfloat.c
@@ -11,8 +11,8 @@
  *
  */
 
-#include "qfloat.h"
-#include "qobject.h"
+#include "qobject/qfloat.h"
+#include "qobject/qobject.h"
 #include "qemu-common.h"
 
 static void qfloat_destroy_obj(QObject *obj);
diff --git a/qint.c b/qobject/qint.c
similarity index 95%
rename from qint.c
rename to qobject/qint.c
index ee51804..26d30b4 100644
--- a/qint.c
+++ b/qobject/qint.c
@@ -10,8 +10,8 @@
  * See the COPYING.LIB file in the top-level directory.
  */
 
-#include "qint.h"
-#include "qobject.h"
+#include "qobject/qint.h"
+#include "qobject/qobject.h"
 #include "qemu-common.h"
 
 static void qint_destroy_obj(QObject *obj);
diff --git a/qjson.c b/qobject/qjson.c
similarity index 96%
rename from qjson.c
rename to qobject/qjson.c
index f9c8e77..a3a6375 100644
--- a/qjson.c
+++ b/qobject/qjson.c
@@ -11,15 +11,15 @@
  *
  */
 
-#include "json-lexer.h"
-#include "json-parser.h"
-#include "json-streamer.h"
-#include "qjson.h"
-#include "qint.h"
-#include "qlist.h"
-#include "qbool.h"
-#include "qfloat.h"
-#include "qdict.h"
+#include "qobject/json-lexer.h"
+#include "qobject/json-parser.h"
+#include "qobject/json-streamer.h"
+#include "qobject/qjson.h"
+#include "qobject/qint.h"
+#include "qobject/qlist.h"
+#include "qobject/qbool.h"
+#include "qobject/qfloat.h"
+#include "qobject/qdict.h"
 
 typedef struct JSONParsingState
 {
diff --git a/qlist.c b/qobject/qlist.c
similarity index 98%
rename from qlist.c
rename to qobject/qlist.c
index b48ec5b..7300076 100644
--- a/qlist.c
+++ b/qobject/qlist.c
@@ -10,8 +10,8 @@
  * See the COPYING.LIB file in the top-level directory.
  */
 
-#include "qlist.h"
-#include "qobject.h"
+#include "qobject/qlist.h"
+#include "qobject/qobject.h"
 #include "qemu-queue.h"
 #include "qemu-common.h"
 
diff --git a/qstring.c b/qobject/qstring.c
similarity index 98%
rename from qstring.c
rename to qobject/qstring.c
index b7e12e4..990046a 100644
--- a/qstring.c
+++ b/qobject/qstring.c
@@ -10,8 +10,8 @@
  * See the COPYING.LIB file in the top-level directory.
  */
 
-#include "qobject.h"
-#include "qstring.h"
+#include "qobject/qobject.h"
+#include "qobject/qstring.h"
 #include "qemu-common.h"
 
 static void qstring_destroy_obj(QObject *obj);
diff --git a/qom/object.c b/qom/object.c
index d195890..72f34af 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -19,10 +19,10 @@
 /* TODO: replace QObject with a simpler visitor to avoid a dependency
  * of the QOM core on QObject?  */
 #include "qemu/qom-qobject.h"
-#include "qobject.h"
-#include "qbool.h"
-#include "qint.h"
-#include "qstring.h"
+#include "qobject/qobject.h"
+#include "qobject/qbool.h"
+#include "qobject/qint.h"
+#include "qobject/qstring.h"
 
 #define MAX_INTERFACES 32
 
diff --git a/scripts/qapi-commands.py b/scripts/qapi-commands.py
index 4d0847a..60adaa4 100644
--- a/scripts/qapi-commands.py
+++ b/scripts/qapi-commands.py
@@ -342,7 +342,7 @@ def gen_command_decl_prologue(header, guard, prefix=""):
 #define %(guard)s
 
 #include "%(prefix)sqapi-types.h"
-#include "qdict.h"
+#include "qobject/qdict.h"
 #include "qapi/error.h"
 
 ''',
@@ -366,7 +366,7 @@ def gen_command_def_prologue(prefix="", proxy=False):
  *
  */
 
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "qapi/qmp-core.h"
 #include "qapi/visit-core.h"
 #include "qapi/qmp-output-visitor.h"
diff --git a/tests/check-qdict.c b/tests/check-qdict.c
index fc0d276..f26f4de 100644
--- a/tests/check-qdict.c
+++ b/tests/check-qdict.c
@@ -11,9 +11,9 @@
  */
 #include <glib.h>
 
-#include "qint.h"
-#include "qdict.h"
-#include "qstring.h"
+#include "qobject/qint.h"
+#include "qobject/qdict.h"
+#include "qobject/qstring.h"
 #include "qemu-common.h"
 
 /*
diff --git a/tests/check-qfloat.c b/tests/check-qfloat.c
index cdc66ea..e3e2ec5 100644
--- a/tests/check-qfloat.c
+++ b/tests/check-qfloat.c
@@ -12,7 +12,7 @@
  */
 #include <glib.h>
 
-#include "qfloat.h"
+#include "qobject/qfloat.h"
 #include "qemu-common.h"
 
 /*
diff --git a/tests/check-qint.c b/tests/check-qint.c
index 5a27119..57d740e 100644
--- a/tests/check-qint.c
+++ b/tests/check-qint.c
@@ -11,7 +11,7 @@
  */
 #include <glib.h>
 
-#include "qint.h"
+#include "qobject/qint.h"
 #include "qemu-common.h"
 
 /*
diff --git a/tests/check-qjson.c b/tests/check-qjson.c
index 3b896f5..b3d556c 100644
--- a/tests/check-qjson.c
+++ b/tests/check-qjson.c
@@ -10,13 +10,13 @@
  */
 #include <glib.h>
 
-#include "qstring.h"
-#include "qint.h"
-#include "qdict.h"
-#include "qlist.h"
-#include "qfloat.h"
-#include "qbool.h"
-#include "qjson.h"
+#include "qobject/qstring.h"
+#include "qobject/qint.h"
+#include "qobject/qdict.h"
+#include "qobject/qlist.h"
+#include "qobject/qfloat.h"
+#include "qobject/qbool.h"
+#include "qobject/qjson.h"
 
 #include "qemu-common.h"
 
diff --git a/tests/check-qlist.c b/tests/check-qlist.c
index 501ba26..b3eda14 100644
--- a/tests/check-qlist.c
+++ b/tests/check-qlist.c
@@ -11,8 +11,8 @@
  */
 #include <glib.h>
 
-#include "qint.h"
-#include "qlist.h"
+#include "qobject/qint.h"
+#include "qobject/qlist.h"
 
 /*
  * Public Interface test-cases
diff --git a/tests/check-qstring.c b/tests/check-qstring.c
index addad6c..5eee33c 100644
--- a/tests/check-qstring.c
+++ b/tests/check-qstring.c
@@ -11,7 +11,7 @@
  */
 #include <glib.h>
 
-#include "qstring.h"
+#include "qobject/qstring.h"
 #include "qemu-common.h"
 
 /*
diff --git a/tests/test-qmp-commands.c b/tests/test-qmp-commands.c
index dc3c507..2a68cba 100644
--- a/tests/test-qmp-commands.c
+++ b/tests/test-qmp-commands.c
@@ -1,5 +1,5 @@
 #include <glib.h>
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "test-qmp-commands.h"
 #include "qapi/qmp-core.h"
 #include "module.h"
diff --git a/tests/test-qmp-input-strict.c b/tests/test-qmp-input-strict.c
index f6df8cb..076e5e1 100644
--- a/tests/test-qmp-input-strict.c
+++ b/tests/test-qmp-input-strict.c
@@ -17,7 +17,7 @@
 #include "qapi/qmp-input-visitor.h"
 #include "test-qapi-types.h"
 #include "test-qapi-visit.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 
 typedef struct TestInputVisitorData {
     QObject *obj;
diff --git a/tests/test-qmp-input-visitor.c b/tests/test-qmp-input-visitor.c
index 8f5a509..23b753f 100644
--- a/tests/test-qmp-input-visitor.c
+++ b/tests/test-qmp-input-visitor.c
@@ -16,7 +16,7 @@
 #include "qapi/qmp-input-visitor.h"
 #include "test-qapi-types.h"
 #include "test-qapi-visit.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 
 typedef struct TestInputVisitorData {
     QObject *obj;
diff --git a/tests/test-qmp-output-visitor.c b/tests/test-qmp-output-visitor.c
index 24a6359..eb99add 100644
--- a/tests/test-qmp-output-visitor.c
+++ b/tests/test-qmp-output-visitor.c
@@ -15,7 +15,7 @@
 #include "qapi/qmp-output-visitor.h"
 #include "test-qapi-types.h"
 #include "test-qapi-visit.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 
 typedef struct TestOutputVisitorData {
     QmpOutputVisitor *qov;
diff --git a/tests/test-string-input-visitor.c b/tests/test-string-input-visitor.c
index 5370e32..16a358a 100644
--- a/tests/test-string-input-visitor.c
+++ b/tests/test-string-input-visitor.c
@@ -16,7 +16,7 @@
 #include "qapi/string-input-visitor.h"
 #include "test-qapi-types.h"
 #include "test-qapi-visit.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 
 typedef struct TestInputVisitorData {
     StringInputVisitor *siv;
diff --git a/tests/test-string-output-visitor.c b/tests/test-string-output-visitor.c
index 608f14a..0096872 100644
--- a/tests/test-string-output-visitor.c
+++ b/tests/test-string-output-visitor.c
@@ -15,7 +15,7 @@
 #include "qapi/string-output-visitor.h"
 #include "test-qapi-types.h"
 #include "test-qapi-visit.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 
 typedef struct TestOutputVisitorData {
     StringOutputVisitor *sov;
diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serialization.c
index b8ad16f..5e5a959 100644
--- a/tests/test-visitor-serialization.c
+++ b/tests/test-visitor-serialization.c
@@ -16,7 +16,7 @@
 #include <float.h>
 #include "test-qapi-types.h"
 #include "test-qapi-visit.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "qapi/qmp-input-visitor.h"
 #include "qapi/qmp-output-visitor.h"
 #include "qapi/string-input-visitor.h"
diff --git a/ui/spice-core.c b/ui/spice-core.c
index 27e9ba1..83a93fd 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -29,10 +29,10 @@
 #include "qemu-x509.h"
 #include "qemu_socket.h"
 #include "qmp-commands.h"
-#include "qint.h"
-#include "qbool.h"
-#include "qstring.h"
-#include "qjson.h"
+#include "qobject/qint.h"
+#include "qobject/qbool.h"
+#include "qobject/qstring.h"
+#include "qobject/qjson.h"
 #include "notify.h"
 #include "migration.h"
 #include "monitor.h"
diff --git a/ui/vnc-enc-tight.c b/ui/vnc-enc-tight.c
index 5d492ab..2a6d90e 100644
--- a/ui/vnc-enc-tight.c
+++ b/ui/vnc-enc-tight.c
@@ -45,7 +45,7 @@
 #endif
 
 #include "bswap.h"
-#include "qint.h"
+#include "qobject/qint.h"
 #include "vnc.h"
 #include "vnc-enc-tight.h"
 #include "vnc-palette.h"
diff --git a/ui/vnc-palette.h b/ui/vnc-palette.h
index 3260885..ecf44ad 100644
--- a/ui/vnc-palette.h
+++ b/ui/vnc-palette.h
@@ -29,7 +29,7 @@
 #ifndef VNC_PALETTE_H
 #define VNC_PALETTE_H
 
-#include "qlist.h"
+#include "qobject/qlist.h"
 #include "qemu-queue.h"
 #include <stdint.h>
 
diff --git a/ui/vnc.c b/ui/vnc.c
index d0ffcc5..9f7bd70 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -30,7 +30,7 @@
 #include "qemu_socket.h"
 #include "qemu-timer.h"
 #include "acl.h"
-#include "qemu-objects.h"
+#include "qapi/qmp-types.h"
 #include "qmp-commands.h"
 #include "osdep.h"
 
diff --git a/vl.c b/vl.c
index ab21a93..04fa990 100644
--- a/vl.c
+++ b/vl.c
@@ -143,7 +143,7 @@ int main(int argc, char **argv)
 #include "audio/audio.h"
 #include "migration.h"
 #include "kvm.h"
-#include "qjson.h"
+#include "qobject/qjson.h"
 #include "qemu-option.h"
 #include "qemu-config.h"
 #include "qemu-options.h"
