diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index bfba52135b..497c65f460 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1055,9 +1055,15 @@ virStoragePoolSourceFormat(virBufferPtr buf,
     if ((options->flags & VIR_STORAGE_POOL_SOURCE_DEVICE) &&
         src->ndevice) {
         for (i = 0; i < src->ndevice; i++) {
+            virBufferEscapeString(buf, "<device path='%s'",
+                                  src->devices[i].path);
+            if (src->devices[i].part_separator !=
+                VIR_TRISTATE_SWITCH_ABSENT) {
+                virBufferAsprintf(buf, " part_separator='%s'",
+                                  virTristateBoolTypeToString(src->devices[i].part_separator));
+            }
             if (src->devices[i].nfreeExtent) {
-                virBufferEscapeString(buf, "<device path='%s'>\n",
-                                      src->devices[i].path);
+                virBufferAddLit(buf, ">\n");
                 virBufferAdjustIndent(buf, 2);
                 for (j = 0; j < src->devices[i].nfreeExtent; j++) {
                     virBufferAsprintf(buf, "<freeExtent start='%llu' end='%llu'/>\n",
@@ -1067,13 +1073,6 @@ virStoragePoolSourceFormat(virBufferPtr buf,
                 virBufferAdjustIndent(buf, -2);
                 virBufferAddLit(buf, "</device>\n");
             } else {
-                virBufferEscapeString(buf, "<device path='%s'",
-                                      src->devices[i].path);
-                if (src->devices[i].part_separator !=
-                    VIR_TRISTATE_SWITCH_ABSENT) {
-                    virBufferAsprintf(buf, " part_separator='%s'",
-                                      virTristateBoolTypeToString(src->devices[i].part_separator));
-                }
                 virBufferAddLit(buf, "/>\n");
             }
         }