diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c
index 6feaded2ad..79d7659da3 100644
--- a/src/bhyve/bhyve_capabilities.c
+++ b/src/bhyve/bhyve_capabilities.c
@@ -75,7 +75,7 @@ virBhyveDomainCapsFill(virDomainCapsPtr caps,
                        unsigned int bhyvecaps,
                        virDomainCapsStringValuesPtr firmwares)
 {
-    caps->disk.supported = true;
+    caps->disk.supported = VIR_TRISTATE_BOOL_YES;
     VIR_DOMAIN_CAPS_ENUM_SET(caps->disk.diskDevice,
                              VIR_DOMAIN_DISK_DEVICE_DISK,
                              VIR_DOMAIN_DISK_DEVICE_CDROM);
@@ -84,10 +84,10 @@ virBhyveDomainCapsFill(virDomainCapsPtr caps,
                              VIR_DOMAIN_DISK_BUS_SATA,
                              VIR_DOMAIN_DISK_BUS_VIRTIO);
 
-    caps->os.supported = true;
+    caps->os.supported = VIR_TRISTATE_BOOL_YES;
 
     if (bhyvecaps & BHYVE_CAP_LPC_BOOTROM) {
-        caps->os.loader.supported = true;
+        caps->os.loader.supported = VIR_TRISTATE_BOOL_YES;
         VIR_DOMAIN_CAPS_ENUM_SET(caps->os.loader.type,
                                  VIR_DOMAIN_LOADER_TYPE_PFLASH);
         VIR_DOMAIN_CAPS_ENUM_SET(caps->os.loader.readonly,
@@ -99,8 +99,8 @@ virBhyveDomainCapsFill(virDomainCapsPtr caps,
 
 
     if (bhyvecaps & BHYVE_CAP_FBUF) {
-        caps->graphics.supported = true;
-        caps->video.supported = true;
+        caps->graphics.supported = VIR_TRISTATE_BOOL_YES;
+        caps->video.supported = VIR_TRISTATE_BOOL_YES;
         VIR_DOMAIN_CAPS_ENUM_SET(caps->graphics.type, VIR_DOMAIN_GRAPHICS_TYPE_VNC);
         VIR_DOMAIN_CAPS_ENUM_SET(caps->video.modelType, VIR_DOMAIN_VIDEO_TYPE_GOP);
     }
diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index 4539281ff5..6ae18515b6 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -371,9 +371,9 @@ virDomainCapsStringValuesFormat(virBufferPtr buf,
 #define FORMAT_PROLOGUE(item) \
     do { \
         virBufferAsprintf(buf, "<" #item " supported='%s'%s\n", \
-                          item->supported ? "yes" : "no", \
-                          item->supported ? ">" : "/>"); \
-        if (!item->supported) \
+                (item->supported == VIR_TRISTATE_BOOL_YES) ? "yes" : "no", \
+                (item->supported == VIR_TRISTATE_BOOL_YES) ? ">" : "/>"); \
+        if (item->supported != VIR_TRISTATE_BOOL_YES) \
             return; \
         virBufferAdjustIndent(buf, 2); \
     } while (0)
@@ -387,7 +387,7 @@ virDomainCapsStringValuesFormat(virBufferPtr buf,
 #define FORMAT_SINGLE(name, supported) \
     do { \
         virBufferAsprintf(&buf, "<%s supported='%s'/>\n", name, \
-                          supported ? "yes" : "no"); \
+                (supported == VIR_TRISTATE_BOOL_YES) ? "yes" : "no"); \
     } while (0)
 
 #define ENUM_PROCESS(master, capsEnum, valToStr) \
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
index 15e065359b..1ebdb01716 100644
--- a/src/conf/domain_capabilities.h
+++ b/src/conf/domain_capabilities.h
@@ -46,7 +46,7 @@ struct _virDomainCapsStringValues {
 typedef struct _virDomainCapsLoader virDomainCapsLoader;
 typedef virDomainCapsLoader *virDomainCapsLoaderPtr;
 struct _virDomainCapsLoader {
-    bool supported;
+    virTristateBool supported;
     virDomainCapsStringValues values;   /* Info about values for the element */
     virDomainCapsEnum type;     /* Info about virDomainLoader */
     virDomainCapsEnum readonly; /* Info about readonly:virTristateBool */
@@ -55,14 +55,14 @@ struct _virDomainCapsLoader {
 typedef struct _virDomainCapsOS virDomainCapsOS;
 typedef virDomainCapsOS *virDomainCapsOSPtr;
 struct _virDomainCapsOS {
-    bool supported;
+    virTristateBool supported;
     virDomainCapsLoader loader;     /* Info about virDomainLoaderDef */
 };
 
 typedef struct _virDomainCapsDeviceDisk virDomainCapsDeviceDisk;
 typedef virDomainCapsDeviceDisk *virDomainCapsDeviceDiskPtr;
 struct _virDomainCapsDeviceDisk {
-    bool supported;
+    virTristateBool supported;
     virDomainCapsEnum diskDevice;   /* Info about virDomainDiskDevice enum values */
     virDomainCapsEnum bus;          /* Info about virDomainDiskBus enum values */
     /* add new fields here */
@@ -71,21 +71,21 @@ struct _virDomainCapsDeviceDisk {
 typedef struct _virDomainCapsDeviceGraphics virDomainCapsDeviceGraphics;
 typedef virDomainCapsDeviceGraphics *virDomainCapsDeviceGraphicsPtr;
 struct _virDomainCapsDeviceGraphics {
-    bool supported;
+    virTristateBool supported;
     virDomainCapsEnum type;   /* virDomainGraphicsType */
 };
 
 typedef struct _virDomainCapsDeviceVideo virDomainCapsDeviceVideo;
 typedef virDomainCapsDeviceVideo *virDomainCapsDeviceVideoPtr;
 struct _virDomainCapsDeviceVideo {
-    bool supported;
+    virTristateBool supported;
     virDomainCapsEnum modelType;   /* virDomainVideoType */
 };
 
 typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
 typedef virDomainCapsDeviceHostdev *virDomainCapsDeviceHostdevPtr;
 struct _virDomainCapsDeviceHostdev {
-    bool supported;
+    virTristateBool supported;
     virDomainCapsEnum mode;             /* Info about virDomainHostdevMode */
     virDomainCapsEnum startupPolicy;    /* Info about virDomainStartupPolicy */
     virDomainCapsEnum subsysType;       /* Info about virDomainHostdevSubsysType */
@@ -97,7 +97,7 @@ struct _virDomainCapsDeviceHostdev {
 typedef struct _virDomainCapsFeatureGIC virDomainCapsFeatureGIC;
 typedef virDomainCapsFeatureGIC *virDomainCapsFeatureGICPtr;
 struct _virDomainCapsFeatureGIC {
-    bool supported;
+    virTristateBool supported;
     virDomainCapsEnum version; /* Info about virGICVersion */
 };
 
@@ -155,7 +155,7 @@ struct _virDomainCaps {
 
     /* Some machine specific info */
     int maxvcpus;
-    bool iothreads;  /* Whether I/O threads are supported or not. */
+    virTristateBool iothreads;  /* Whether I/O threads are supported or not. */
 
     virDomainCapsOS os;
     virDomainCapsCPU cpu;
@@ -166,8 +166,8 @@ struct _virDomainCaps {
     /* add new domain devices here */
 
     virDomainCapsFeatureGIC gic;
-    bool vmcoreinfo;
-    bool genid;
+    virTristateBool vmcoreinfo;
+    virTristateBool genid;
     virSEVCapabilityPtr sev;
     /* add new domain features here */
 };
diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c
index cc42dc6987..385b08be38 100644
--- a/src/libxl/libxl_capabilities.c
+++ b/src/libxl/libxl_capabilities.c
@@ -603,12 +603,12 @@ libxlMakeDomainOSCaps(const char *machine,
     virDomainCapsLoaderPtr capsLoader = &os->loader;
     size_t i;
 
-    os->supported = true;
+    os->supported = VIR_TRISTATE_BOOL_YES;
 
     if (STREQ(machine, "xenpv") || STREQ(machine, "xenpvh"))
         return 0;
 
-    capsLoader->supported = true;
+    capsLoader->supported = VIR_TRISTATE_BOOL_YES;
     if (VIR_ALLOC_N(capsLoader->values.values, nfirmwares) < 0)
         return -1;
 
@@ -631,7 +631,7 @@ libxlMakeDomainOSCaps(const char *machine,
 static int
 libxlMakeDomainDeviceDiskCaps(virDomainCapsDeviceDiskPtr dev)
 {
-    dev->supported = true;
+    dev->supported = VIR_TRISTATE_BOOL_YES;
 
     VIR_DOMAIN_CAPS_ENUM_SET(dev->diskDevice,
                              VIR_DOMAIN_DISK_DEVICE_DISK,
@@ -648,7 +648,7 @@ libxlMakeDomainDeviceDiskCaps(virDomainCapsDeviceDiskPtr dev)
 static int
 libxlMakeDomainDeviceGraphicsCaps(virDomainCapsDeviceGraphicsPtr dev)
 {
-    dev->supported = true;
+    dev->supported = VIR_TRISTATE_BOOL_YES;
 
     VIR_DOMAIN_CAPS_ENUM_SET(dev->type,
                              VIR_DOMAIN_GRAPHICS_TYPE_SDL,
@@ -661,7 +661,7 @@ libxlMakeDomainDeviceGraphicsCaps(virDomainCapsDeviceGraphicsPtr dev)
 static int
 libxlMakeDomainDeviceVideoCaps(virDomainCapsDeviceVideoPtr dev)
 {
-    dev->supported = true;
+    dev->supported = VIR_TRISTATE_BOOL_YES;
 
     VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType,
                              VIR_DOMAIN_VIDEO_TYPE_VGA,
@@ -683,7 +683,7 @@ bool libxlCapsHasPVUSB(void)
 static int
 libxlMakeDomainDeviceHostdevCaps(virDomainCapsDeviceHostdevPtr dev)
 {
-    dev->supported = true;
+    dev->supported = VIR_TRISTATE_BOOL_YES;
     /* VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES is for containers only */
     VIR_DOMAIN_CAPS_ENUM_SET(dev->mode,
                              VIR_DOMAIN_HOSTDEV_MODE_SUBSYS);
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 9d9c8096ba..ea75177f39 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -5119,7 +5119,7 @@ virQEMUCapsFillDomainLoaderCaps(virDomainCapsLoaderPtr capsLoader,
 {
     size_t i;
 
-    capsLoader->supported = true;
+    capsLoader->supported = VIR_TRISTATE_BOOL_YES;
 
     if (VIR_ALLOC_N(capsLoader->values.values, nfirmwares) < 0)
         return -1;
@@ -5159,7 +5159,7 @@ virQEMUCapsFillDomainOSCaps(virDomainCapsOSPtr os,
 {
     virDomainCapsLoaderPtr capsLoader = &os->loader;
 
-    os->supported = true;
+    os->supported = VIR_TRISTATE_BOOL_YES;
     if (virQEMUCapsFillDomainLoaderCaps(capsLoader, firmwares, nfirmwares) < 0)
         return -1;
     return 0;
@@ -5212,7 +5212,8 @@ static int
 virQEMUCapsFillDomainIOThreadCaps(virQEMUCapsPtr qemuCaps,
                                   virDomainCapsPtr domCaps)
 {
-    domCaps->iothreads = virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD);
+    domCaps->iothreads = virTristateBoolFromBool(
+            virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD));
 
     return 0;
 }
@@ -5223,7 +5224,7 @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
                                     const char *machine,
                                     virDomainCapsDeviceDiskPtr disk)
 {
-    disk->supported = true;
+    disk->supported = VIR_TRISTATE_BOOL_YES;
     /* QEMU supports all of these */
     VIR_DOMAIN_CAPS_ENUM_SET(disk->diskDevice,
                              VIR_DOMAIN_DISK_DEVICE_DISK,
@@ -5258,7 +5259,7 @@ static int
 virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps,
                                         virDomainCapsDeviceGraphicsPtr dev)
 {
-    dev->supported = true;
+    dev->supported = VIR_TRISTATE_BOOL_YES;
 
     VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SDL);
     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC))
@@ -5274,7 +5275,7 @@ static int
 virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps,
                                      virDomainCapsDeviceVideoPtr dev)
 {
-    dev->supported = true;
+    dev->supported = VIR_TRISTATE_BOOL_YES;
 
     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA))
         VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_VGA);
@@ -5298,7 +5299,7 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
     bool supportsPassthroughKVM = qemuHostdevHostSupportsPassthroughLegacy();
     bool supportsPassthroughVFIO = qemuHostdevHostSupportsPassthroughVFIO();
 
-    hostdev->supported = true;
+    hostdev->supported = VIR_TRISTATE_BOOL_YES;
     /* VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES is for containers only */
     VIR_DOMAIN_CAPS_ENUM_SET(hostdev->mode,
                              VIR_DOMAIN_HOSTDEV_MODE_SUBSYS);
@@ -5413,7 +5414,7 @@ virQEMUCapsFillDomainFeatureGICCaps(virQEMUCapsPtr qemuCaps,
                                            version))
             continue;
 
-        gic->supported = true;
+        gic->supported = VIR_TRISTATE_BOOL_YES;
         VIR_DOMAIN_CAPS_ENUM_SET(gic->version,
                                  version);
     }
@@ -5484,10 +5485,11 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps,
         domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
     }
 
-    domCaps->vmcoreinfo = virQEMUCapsGet(qemuCaps,
-                                         QEMU_CAPS_DEVICE_VMCOREINFO);
+    domCaps->vmcoreinfo = virTristateBoolFromBool(
+            virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMCOREINFO));
 
-    domCaps->genid = virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID);
+    domCaps->genid = virTristateBoolFromBool(
+            virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID));
 
     if (virQEMUCapsFillDomainOSCaps(os, firmwares, nfirmwares) < 0 ||
         virQEMUCapsFillDomainCPUCaps(caps, qemuCaps, domCaps) < 0 ||
