diff --git a/INSTALL b/INSTALL
index 23488484e78540c81ed286effead89c889025d04..e739a4eae98c50c746c36fc23d233a7e966f19fc 100644
--- a/INSTALL
+++ b/INSTALL
@@ -30,6 +30,9 @@ Before installing, please verify that you have the following programs:
 - `pyparsing Python module <http://pyparsing.wikispaces.com/>`_
 - `pyinotify Python module <http://trac.dbzteam.org/pyinotify/>`_
 - `PycURL Python module <http://pycurl.sourceforge.net/>`_
+- `ctypes Python module
+  <http://starship.python.net/crew/theller/ctypes/>`_, if running on
+  python 2.4 (optional, used for node daemon memory locking)
 - `socat <http://www.dest-unreach.org/socat/>`_
 
 These programs are supplied as part of most Linux distributions, so
diff --git a/NEWS b/NEWS
index b6cd1fdb98d422d63bcba20076f246f9ee41ea58..756a8623c0954fc90e7ad201e0af8307ec95d4c8 100644
--- a/NEWS
+++ b/NEWS
@@ -30,6 +30,24 @@ Version 2.2.0 beta 0
   ``EXP_SIZE_FD``
 
 
+Version 2.1.5
+-------------
+
+*(Released Thu, 01 Jul 2010)*
+
+A small bugfix release:
+  - Fix disk adoption: broken by strict --disk option checking in 2.1.4
+  - Fix batch-create: broken in the whole 2.1 series due to a lookup on
+    a non-existing option
+  - Fix instance create: the --force-variant option was ignored
+  - Improve pylint 0.21 compatibility and warnings with Python 2.6
+  - Fix modify node storage with non-FQDN arguments
+  - Fix RAPI client to authenticate under Python 2.6 when used
+    for more than 5 requests needing authentication
+  - Fix gnt-instance modify -t (storage) giving a wrong error message
+    when converting a non-shutdown drbd instance to plain
+
+
 Version 2.1.4
 -------------
 
diff --git a/lib/cli.py b/lib/cli.py
index d084c9c32b49e1809beda296c4aa42eee69ab9c6..c737044cdc987722724d75c2a43dbb2fdbb6f772 100644
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -1810,6 +1810,7 @@ def GenericInstanceCreate(mode, opts, args):
   if mode == constants.INSTANCE_CREATE:
     start = opts.start
     os_type = opts.os
+    force_variant = opts.force_variant
     src_node = None
     src_path = None
     no_install = opts.no_install
@@ -1817,6 +1818,7 @@ def GenericInstanceCreate(mode, opts, args):
   elif mode == constants.INSTANCE_IMPORT:
     start = False
     os_type = None
+    force_variant = False
     src_node = opts.src_node
     src_path = opts.src_dir
     no_install = None
@@ -1842,6 +1844,7 @@ def GenericInstanceCreate(mode, opts, args):
                                 mode=mode,
                                 start=start,
                                 os_type=os_type,
+                                force_variant=force_variant,
                                 src_node=src_node,
                                 src_path=src_path,
                                 no_install=no_install,
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 7f5f3d529754d67df3f51e09ed5a4507edba3d03..4dfe9f99ffc837b63369253dcdd5a5498d32dce5 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -8649,13 +8649,13 @@ class LUSetInstanceParams(LogicalUnit):
                                    " %s to %s" % (instance.disk_template,
                                                   self.op.disk_template),
                                    errors.ECODE_INVAL)
+      _CheckInstanceDown(self, instance, "cannot change disk template")
       if self.op.disk_template in constants.DTS_NET_MIRROR:
         _CheckNodeOnline(self, self.op.remote_node)
         _CheckNodeNotDrained(self, self.op.remote_node)
         disks = [{"size": d.size} for d in instance.disks]
         required = _ComputeDiskSize(self.op.disk_template, disks)
         _CheckNodesFreeDisk(self, [self.op.remote_node], required)
-        _CheckInstanceDown(self, instance, "cannot change disk template")
 
     # hvparams processing
     if self.op.hvparams:
diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index b31f78c5b10300c3779432e0cb8fb53814347522..777423ddb408076d659f467339b4ba5634e0b318 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -355,7 +355,9 @@ def main():
           instance = RunTest(func, pnode, snode)
           RunCommonInstanceTests(instance)
           if qa_config.TestEnabled('instance-convert-disk'):
+            RunTest(qa_instance.TestInstanceShutdown, instance)
             RunTest(qa_instance.TestInstanceConvertDisk, instance, snode)
+            RunTest(qa_instance.TestInstanceStartup, instance)
           RunExportImportTests(instance, pnode)
           RunHardwareFailureTests(instance, pnode, snode)
           RunTest(qa_instance.TestInstanceRemove, instance)
diff --git a/qa/qa-sample.json b/qa/qa-sample.json
index 05f36ec184bdcb8e976a9f57506fb022d3040711..a3c20706a73d0a445b965f7b6a9745a3efdb6062 100644
--- a/qa/qa-sample.json
+++ b/qa/qa-sample.json
@@ -6,9 +6,6 @@
   "os": "debian-etch",
   "mem": "512M",
 
-  "rapi-user": "foobar",
-  "rapi-pass": "barfoo",
-
   "# Lists of disk sizes": null,
   "disk": ["1G", "512M"],
   "disk-growth": ["2G", "768M"],
diff --git a/qa/qa_instance.py b/qa/qa_instance.py
index 1b3b12711a284029a6a253721861846f79a47a6f..6478b9043b8d47d740a6f0bcb3ef0de62714ffc2 100644
--- a/qa/qa_instance.py
+++ b/qa/qa_instance.py
@@ -215,7 +215,8 @@ def TestInstanceConvertDisk(instance, snode):
   cmd = ['gnt-instance', 'modify', '-t', 'plain', instance['name']]
   AssertEqual(StartSSH(master['primary'],
                        utils.ShellQuoteArgs(cmd)).wait(), 0)
-  cmd = ['gnt-instance', 'modify', '-t', 'drbd', '-n', snode, instance['name']]
+  cmd = ['gnt-instance', 'modify', '-t', 'drbd', '-n', snode['primary'],
+         instance['name']]
   AssertEqual(StartSSH(master['primary'],
                        utils.ShellQuoteArgs(cmd)).wait(), 0)
 
diff --git a/scripts/gnt-instance b/scripts/gnt-instance
index 1e3dcf87fab05106b6102b1f230c35cdf24139fa..6e2e84f84834da14f14078ca52021196f377c9b5 100755
--- a/scripts/gnt-instance
+++ b/scripts/gnt-instance
@@ -387,6 +387,7 @@ def BatchCreate(opts, args):
                     "hypervisor": None,
                     "hvparams": {},
                     "file_storage_dir": None,
+                    "force_variant": False,
                     "file_driver": 'loop'}
 
   def _PopulateWithDefaults(spec):
@@ -478,7 +479,7 @@ def BatchCreate(opts, args):
                                   disk_template=specs['template'],
                                   mode=constants.INSTANCE_CREATE,
                                   os_type=specs['os'],
-                                  force_variant=opts.force_variant,
+                                  force_variant=specs["force_variant"],
                                   pnode=specs['primary_node'],
                                   snode=specs['secondary_node'],
                                   nics=tmp_nics,