diff --git a/qa/qa-sample.json b/qa/qa-sample.json
index 2787dfce09cefc5f8eba5fd43445f5b9669eba29..e8372658543abfa7f56267ecfe5e8b0d2c745817 100644
--- a/qa/qa-sample.json
+++ b/qa/qa-sample.json
@@ -27,6 +27,8 @@
   "vg-name": "xenvg",
   "# Cluster-level value of the exclusive-storage flag": null,
   "exclusive-storage": null,
+
+  "# Only enable disk templates that the QA machines can actually use.": null,
   "enabled-disk-templates": [
     "plain",
     "drbd",
diff --git a/qa/qa_cluster.py b/qa/qa_cluster.py
index 24a7fe543c71db7e8d88b307c025adb6a1f78003..210f8bf4751768eccdac9d8d949923ec160bbe1f 100644
--- a/qa/qa_cluster.py
+++ b/qa/qa_cluster.py
@@ -35,6 +35,7 @@ from ganeti import pathutils
 import qa_config
 import qa_utils
 import qa_error
+import qa_instance
 
 from qa_utils import AssertEqual, AssertCommand, GetCommandOutput
 
@@ -392,29 +393,101 @@ def TestClusterModifyDisk():
 
 def TestClusterModifyDiskTemplates():
   """gnt-cluster modify --enabled-disk-templates=..."""
+  enabled_disk_templates = qa_config.GetEnabledDiskTemplates()
   default_disk_template = qa_config.GetDefaultDiskTemplate()
+
+  _TestClusterModifyDiskTemplatesArguments(default_disk_template,
+                                           enabled_disk_templates)
+
+  _RestoreEnabledDiskTemplates()
+  nodes = qa_config.AcquireManyNodes(2)
+
+  instance_template = enabled_disk_templates[0]
+  instance = qa_instance.CreateInstanceByDiskTemplate(nodes, instance_template)
+
+  _TestClusterModifyUnusedDiskTemplate(instance_template)
+  _TestClusterModifyUsedDiskTemplate(instance_template,
+                                     enabled_disk_templates)
+
+  qa_instance.TestInstanceRemove(instance)
+  _RestoreEnabledDiskTemplates()
+
+
+def _RestoreEnabledDiskTemplates():
+  """Sets the list of enabled disk templates back to the list of enabled disk
+     templates from the QA configuration. This can be used to make sure that
+     the tests that modify the list of disk templates do not interfere with
+     other tests.
+
+  """
   AssertCommand(
     ["gnt-cluster", "modify",
-     "--enabled-disk-templates=%s" % default_disk_template],
+     "--enabled-disk-template=%s" %
+       ",".join(qa_config.GetEnabledDiskTemplates())],
     fail=False)
-  AssertCommand(["gnt-cluster", "info"])
+
+
+def _TestClusterModifyDiskTemplatesArguments(default_disk_template,
+                                             enabled_disk_templates):
+  """Tests argument handling of 'gnt-cluster modify' with respect to
+     the parameter '--enabled-disk-templates'. This test is independent
+     of instances.
+
+  """
   AssertCommand(
     ["gnt-cluster", "modify",
      "--enabled-disk-template=%s" %
-       ",".join(qa_config.GetEnabledDiskTemplates())],
+       ",".join(enabled_disk_templates)],
     fail=False)
-  AssertCommand(["gnt-cluster", "info"])
+
   # bogus templates
   AssertCommand(["gnt-cluster", "modify",
                  "--enabled-disk-templates=pinkbunny"],
                 fail=True)
+
   # duplicate entries do no harm
   AssertCommand(
     ["gnt-cluster", "modify",
      "--enabled-disk-templates=%s,%s" %
       (default_disk_template, default_disk_template)],
     fail=False)
-  AssertCommand(["gnt-cluster", "info"])
+
+
+def _TestClusterModifyUsedDiskTemplate(instance_template,
+                                       enabled_disk_templates):
+  """Tests that disk templates that are currently in use by instances cannot
+     be disabled on the cluster.
+
+  """
+  # If the list of enabled disk templates contains only one template
+  # we need to add some other templates, because the list of enabled disk
+  # templates can only be set to a non-empty list.
+  new_disk_templates = list(set(enabled_disk_templates)
+                              - set([instance_template]))
+  if not new_disk_templates:
+    new_disk_templates = list(set(constants.DISK_TEMPLATES)
+                                - set([instance_template]))
+  AssertCommand(
+    ["gnt-cluster", "modify",
+     "--enabled-disk-templates=%s" %
+       ",".join(new_disk_templates)],
+    fail=True)
+
+
+def _TestClusterModifyUnusedDiskTemplate(instance_template):
+  """Tests that unused disk templates can be disabled safely."""
+  all_disk_templates = constants.DISK_TEMPLATES
+  AssertCommand(
+    ["gnt-cluster", "modify",
+     "--enabled-disk-templates=%s" %
+       ",".join(all_disk_templates)],
+    fail=False)
+  new_disk_templates = [instance_template]
+  AssertCommand(
+    ["gnt-cluster", "modify",
+     "--enabled-disk-templates=%s" %
+       ",".join(new_disk_templates)],
+    fail=False)
 
 
 def TestClusterModifyBe():