diff --git a/src/domain_conf.c b/src/domain_conf.c
index d7c4166..1a07b3f 100644
--- a/src/domain_conf.c
+++ b/src/domain_conf.c
@@ -671,6 +671,8 @@ virDomainDiskDefParseXML(virConnectPtr conn,
                 def->readonly = 1;
             } else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
                 def->shared = 1;
+            } else if (xmlStrEqual(cur->name, BAD_CAST "snapshot")) {
+                def->snapshot = 1;
             }
         }
         cur = cur->next;
@@ -3028,6 +3030,8 @@ virDomainDiskDefFormat(virConnectPtr conn,
         virBufferAddLit(buf, "      <readonly/>\n");
     if (def->shared)
         virBufferAddLit(buf, "      <shareable/>\n");
+    if (def->snapshot)
+        virBufferAddLit(buf, "      <snapshot/>\n");
 
     virBufferAddLit(buf, "    </disk>\n");
 
diff --git a/src/domain_conf.h b/src/domain_conf.h
index a8ab99e..23c0512 100644
--- a/src/domain_conf.h
+++ b/src/domain_conf.h
@@ -105,6 +105,7 @@ struct _virDomainDiskDef {
     int cachemode;
     unsigned int readonly : 1;
     unsigned int shared : 1;
+    unsigned int snapshot : 1;
     int slotnum; /* pci slot number for unattach */
 };
 
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index a57d3ab..644dff9 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -1150,6 +1150,9 @@ int qemudBuildCommandLine(virConnectPtr conn,
             } else if (disk->shared && !disk->readonly) {
                 virBufferAddLit(&opt, ",cache=off");
             }
+            if (disk->snapshot) {
+                virBufferAddLit(&opt, ",snapshot=on");
+            }
 
             if (virBufferError(&opt)) {
                 virReportOOMError(conn);
