diff --git a/Makefile b/Makefile
index 88dfa82..a1e9fe0 100644
--- a/Makefile
+++ b/Makefile
@@ -203,7 +203,7 @@ $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
 QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
 $(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
 
-qemu-ga$(EXESUF): $(qga-obj-y) $(trace-obj-y) $(qapi-obj-y) $(qobject-obj-y) $(version-obj-y) libqemuutil.a libqemustub.a
+qemu-ga$(EXESUF): $(qga-obj-y) $(trace-obj-y) $(qapi-obj-y) $(version-obj-y) libqemuutil.a libqemustub.a
 	$(call LINK, $^)
 
 clean:
diff --git a/Makefile.objs b/Makefile.objs
index 32289b2..0ba9b20 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -1,6 +1,7 @@
 #######################################################################
-# Stub library, linked in tools
+# Common libraries for tools and emulators
 stub-obj-y = stubs/
+util-obj-y = util/ qobject/
 
 #######################################################################
 # Target-independent parts used in system and user emulation
@@ -8,24 +9,12 @@ universal-obj-y =
 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
-
-universal-obj-y += $(qobject-obj-y)
-
-#######################################################################
 # QOM
 qom-obj-y = qom/
 
 universal-obj-y += $(qom-obj-y)
 
 #######################################################################
-# util-obj-y is code depending on the OS (win32 vs posix)
-util-obj-y += util/
-
-#######################################################################
 # coroutines
 coroutine-obj-y = qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
 coroutine-obj-y += qemu-coroutine-sleep.o
@@ -45,7 +34,7 @@ coroutine-obj-$(CONFIG_WIN32) += coroutine-win32.o
 
 block-obj-y = async.o thread-pool.o
 block-obj-y += nbd.o block.o blockjob.o
-block-obj-y += $(coroutine-obj-y) $(qobject-obj-y) $(version-obj-y)
+block-obj-y += $(coroutine-obj-y) $(version-obj-y)
 block-obj-y += main-loop.o iohandler.o qemu-timer.o
 block-obj-$(CONFIG_POSIX) += aio-posix.o
 block-obj-$(CONFIG_WIN32) += aio-win32.o
diff --git a/qobject/Makefile.objs b/qobject/Makefile.objs
new file mode 100644
index 0000000..c9ff59c
--- /dev/null
+++ b/qobject/Makefile.objs
@@ -0,0 +1,3 @@
+util-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o
+util-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o
+util-obj-y += qerror.o
diff --git a/json-lexer.c b/qobject/json-lexer.c
similarity index 100%
rename from json-lexer.c
rename to qobject/json-lexer.c
diff --git a/json-parser.c b/qobject/json-parser.c
similarity index 100%
rename from json-parser.c
rename to qobject/json-parser.c
diff --git a/json-streamer.c b/qobject/json-streamer.c
similarity index 100%
rename from json-streamer.c
rename to qobject/json-streamer.c
diff --git a/qbool.c b/qobject/qbool.c
similarity index 100%
rename from qbool.c
rename to qobject/qbool.c
diff --git a/qdict.c b/qobject/qdict.c
similarity index 100%
rename from qdict.c
rename to qobject/qdict.c
diff --git a/qerror.c b/qobject/qerror.c
similarity index 100%
rename from qerror.c
rename to qobject/qerror.c
diff --git a/qfloat.c b/qobject/qfloat.c
similarity index 100%
rename from qfloat.c
rename to qobject/qfloat.c
diff --git a/qint.c b/qobject/qint.c
similarity index 100%
rename from qint.c
rename to qobject/qint.c
diff --git a/qjson.c b/qobject/qjson.c
similarity index 100%
rename from qjson.c
rename to qobject/qjson.c
diff --git a/qlist.c b/qobject/qlist.c
similarity index 100%
rename from qlist.c
rename to qobject/qlist.c
diff --git a/qstring.c b/qobject/qstring.c
similarity index 100%
rename from qstring.c
rename to qobject/qstring.c
diff --git a/tests/Makefile b/tests/Makefile
index cf0c0a3..23718de 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -38,17 +38,17 @@ test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \
 	tests/test-qmp-input-visitor.o tests/test-qmp-input-strict.o \
 	tests/test-qmp-commands.o tests/test-visitor-serialization.o
 
-test-qapi-obj-y =  $(qobject-obj-y) $(qapi-obj-y)
+test-qapi-obj-y =  $(qapi-obj-y)
 test-qapi-obj-y += tests/test-qapi-visit.o tests/test-qapi-types.o
 
 $(test-obj-y): QEMU_INCLUDES += -Itests
 
-tests/check-qint$(EXESUF): tests/check-qint.o qint.o
-tests/check-qstring$(EXESUF): tests/check-qstring.o qstring.o
-tests/check-qdict$(EXESUF): tests/check-qdict.o qdict.o qfloat.o qint.o qstring.o qbool.o qlist.o
-tests/check-qlist$(EXESUF): tests/check-qlist.o qlist.o qint.o
-tests/check-qfloat$(EXESUF): tests/check-qfloat.o qfloat.o
-tests/check-qjson$(EXESUF): tests/check-qjson.o $(qobject-obj-y) libqemuutil.a libqemustub.a
+tests/check-qint$(EXESUF): tests/check-qint.o libqemuutil.a
+tests/check-qstring$(EXESUF): tests/check-qstring.o libqemuutil.a
+tests/check-qdict$(EXESUF): tests/check-qdict.o libqemuutil.a
+tests/check-qlist$(EXESUF): tests/check-qlist.o libqemuutil.a
+tests/check-qfloat$(EXESUF): tests/check-qfloat.o libqemuutil.a
+tests/check-qjson$(EXESUF): tests/check-qjson.o libqemuutil.a libqemustub.a
 tests/test-coroutine$(EXESUF): tests/test-coroutine.o $(block-obj-y) libqemuutil.a libqemustub.a
 tests/test-aio$(EXESUF): tests/test-aio.o $(block-obj-y) libqemuutil.a libqemustub.a
 tests/test-thread-pool$(EXESUF): tests/test-thread-pool.o $(block-obj-y) libqemuutil.a libqemustub.a
