diff --git a/NEWS b/NEWS
index 333a89109f657cbf208aee6f3a6999670e0b00b6..eed6c0ba4af828333ef3e4144bebd8ad4c24f17a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,17 @@
 News
 ====
 
+Version 2.2.0 rc2
+-----------------
+
+*(Released Wed, 22 Sep 2010)*
+
+- Fixed OS_VARIANT variable for OS scripts
+- Fixed cluster tag operations via RAPI
+- Made ``setup-ssh`` exit with non-zero code if an error occurred
+- Disabled RAPI CA checks in watcher
+
+
 Version 2.2.0 rc1
 -----------------
 
diff --git a/configure.ac b/configure.ac
index 4796457477c411f14aa92520d85118089de1c704..eeece85488dbd5634a1af4428065c2c3761a03bd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 m4_define([gnt_version_major], [2])
 m4_define([gnt_version_minor], [2])
 m4_define([gnt_version_revision], [0])
-m4_define([gnt_version_suffix], [~rc1])
+m4_define([gnt_version_suffix], [~rc2])
 m4_define([gnt_version_full],
           m4_format([%d.%d.%d%s],
                     gnt_version_major, gnt_version_minor,
diff --git a/lib/cli.py b/lib/cli.py
index e2d57024b60439b5b3f7cfecbce4a240c749f915..e339c4f98af0ac0109e37b81cd7099cf422461e1 100644
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -391,7 +391,7 @@ def AddTags(opts, args):
   if not args:
     raise errors.OpPrereqError("No tags to be added")
   op = opcodes.OpAddTags(kind=kind, name=name, tags=args)
-  SubmitOpCode(op)
+  SubmitOpCode(op, opts=opts)
 
 
 def RemoveTags(opts, args):
@@ -408,7 +408,7 @@ def RemoveTags(opts, args):
   if not args:
     raise errors.OpPrereqError("No tags to be removed")
   op = opcodes.OpDelTags(kind=kind, name=name, tags=args)
-  SubmitOpCode(op)
+  SubmitOpCode(op, opts=opts)
 
 
 def check_unit(option, opt, value): # pylint: disable-msg=W0613
diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py
index 4091761372f90062f800494d3d40ec9ec3299e53..d2ac24c5ecf8830ad088984c7347ed14ff258e18 100644
--- a/lib/hypervisor/hv_kvm.py
+++ b/lib/hypervisor/hv_kvm.py
@@ -924,10 +924,6 @@ class KVMHypervisor(hv_base.BaseHypervisor):
     if not alive:
       raise errors.HypervisorError("Instance not running, cannot migrate")
 
-    if not netutils.TcpPing(target, port, live_port_needed=True):
-      raise errors.HypervisorError("Remote host %s not listening on port"
-                                   " %s, cannot migrate" % (target, port))
-
     if not live:
       self._CallMonitorCommand(instance_name, 'stop')
 
diff --git a/lib/utils.py b/lib/utils.py
index 9c43a388f8bd551d8d33d1c004bd38b3d3ef3fa2..13c49766aab940db13320ca6bf5d92078e081453 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -90,6 +90,9 @@ _VALID_SERVICE_NAME_RE = re.compile("^[-_.a-zA-Z0-9]{1,128}$")
 _MCL_CURRENT = 1
 _MCL_FUTURE = 2
 
+#: MAC checker regexp
+_MAC_CHECK = re.compile("^([0-9a-f]{2}:){5}[0-9a-f]{2}$", re.I)
+
 
 class RunResult(object):
   """Holds the result of running external programs.
@@ -2004,8 +2007,7 @@ def NormalizeAndValidateMac(mac):
   @raise errors.OpPrereqError: If the MAC isn't valid
 
   """
-  mac_check = re.compile("^([0-9a-f]{2}(:|$)){6}$", re.I)
-  if not mac_check.match(mac):
+  if not _MAC_CHECK.match(mac):
     raise errors.OpPrereqError("Invalid MAC address specified: %s" %
                                mac, errors.ECODE_INVAL)
 
diff --git a/man/ganeti.sgml b/man/ganeti.sgml
index abec403943b41e9d3636f19e0a628d9ede848c72..80b5a922a3624b3da55977351392bc09b5aff877 100644
--- a/man/ganeti.sgml
+++ b/man/ganeti.sgml
@@ -193,7 +193,7 @@
           <varlistentry>
             <term>canceling</term>
             <listitem>
-              <para>The jos is waiting for locks, but is has been
+              <para>The job is waiting for locks, but is has been
               marked for cancellation. It will not transition to
               <emphasis>running</emphasis>, but to
               <emphasis>canceled</emphasis>.
diff --git a/scripts/gnt-instance b/scripts/gnt-instance
index 3c7e0663e9cf8cd4269b4a12dce738d55ae50d97..bbe570ce2842451779f6ed8a47b03481c8311e6b 100755
--- a/scripts/gnt-instance
+++ b/scripts/gnt-instance
@@ -1538,8 +1538,6 @@ commands = {
 
 #: dictionary with aliases for commands
 aliases = {
-  'activate_block_devs': 'activate-disks',
-  'replace_disks': 'replace-disks',
   'start': 'startup',
   'stop': 'shutdown',
   }
diff --git a/scripts/gnt-os b/scripts/gnt-os
index 6d0591bbf95299a8182ccb9698dd4197d675394d..9b30f2d4566313efd62d3bfa1e4954b6003c4e22 100755
--- a/scripts/gnt-os
+++ b/scripts/gnt-os
@@ -136,6 +136,7 @@ def _OsStatus(status, diagnose):
   else:
     return "invalid - %s" % diagnose
 
+
 def DiagnoseOS(opts, args):
   """Analyse all OSes on this cluster.