diff --git a/lib/backend.py b/lib/backend.py
index 1184a56b6298520764c44d70d6c79c9bba3402e5..77addb2e9583107336ee57427b7dd85b37218f00 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -375,16 +375,17 @@ def StartMasterDaemons(no_voting):
 
 @RunLocalHooks(constants.FAKE_OP_MASTER_TURNDOWN, "master-ip-turndown",
                _BuildMasterIpHookEnv)
-def DeactivateMasterIp():
+def DeactivateMasterIp(master_ip, master_netmask, master_netdev):
   """Deactivate the master IP on this node.
 
+  @param master_ip: the master IP
+  @param master_netmask: the master IP netmask
+  @param master_netdev: the master network device
+
   """
   # TODO: log and report back to the caller the error failures; we
   # need to decide in which case we fail the RPC for this
 
-  # GetMasterInfo will raise an exception if not able to return data
-  master_netdev, master_ip, _, _, master_netmask = GetMasterInfo()
-
   result = utils.RunCmd([constants.IP_COMMAND_PATH, "address", "del",
                          "%s/%s" % (master_ip, master_netmask),
                          "dev", master_netdev])
diff --git a/lib/bootstrap.py b/lib/bootstrap.py
index 4f00b9813fe4c9554229b0f8242a63398e25806f..a7c865312b6a24212351cb47cef957cefbb12165 100644
--- a/lib/bootstrap.py
+++ b/lib/bootstrap.py
@@ -567,7 +567,8 @@ def FinalizeClusterDestroy(master):
   modify_ssh_setup = cfg.GetClusterInfo().modify_ssh_setup
   runner = rpc.BootstrapRunner()
 
-  result = runner.call_node_deactivate_master_ip(master)
+  (_, ip, netdev, netmask, _) = cfg.GetMasterNetworkParameters()
+  result = runner.call_node_deactivate_master_ip(master, ip, netmask, netdev)
   msg = result.fail_msg
   if msg:
     logging.warning("Could not disable the master IP: %s", msg)
@@ -706,7 +707,9 @@ def MasterFailover(no_voting=False):
   logging.info("Stopping the master daemon on node %s", old_master)
 
   runner = rpc.BootstrapRunner()
-  result = runner.call_node_deactivate_master_ip(old_master)
+  (_, ip, netdev, netmask, _) = cfg.GetMasterNetworkParameters()
+  result = runner.call_node_deactivate_master_ip(old_master, ip, netmask,
+                                                 netdev)
   msg = result.fail_msg
   if msg:
     logging.warning("Could not disable the master IP: %s", msg)
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 55ff635cdbd8fae1ccbe3c2412031eebcc854edf..d60552be742b38e918e932cd9de15859aa07616b 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -1355,12 +1355,12 @@ class LUClusterDestroy(LogicalUnit):
     """Destroys the cluster.
 
     """
-    master = self.cfg.GetMasterNode()
+    (master, ip, dev, netmask, _) = self.cfg.GetMasterNetworkParameters()
 
     # Run post hooks on master node before it's removed
     _RunPostHook(self, master)
 
-    result = self.rpc.call_node_deactivate_master_ip(master)
+    result = self.rpc.call_node_deactivate_master_ip(master, ip, netmask, dev)
     result.Raise("Could not disable the master role")
 
     return master
@@ -3326,8 +3326,8 @@ class LUClusterRename(LogicalUnit):
     new_ip = self.ip
 
     # shutdown the master IP
-    (master, _, dev, netmask, family) = self.cfg.GetMasterNetworkParameters()
-    result = self.rpc.call_node_deactivate_master_ip(master)
+    (master, ip, dev, netmask, family) = self.cfg.GetMasterNetworkParameters()
+    result = self.rpc.call_node_deactivate_master_ip(master, ip, netmask, dev)
     result.Raise("Could not disable the master role")
 
     try:
@@ -3700,13 +3700,13 @@ class LUClusterSetParams(LogicalUnit):
       helper_os("blacklisted_os", self.op.blacklisted_os, "blacklisted")
 
     if self.op.master_netdev:
-      master = self.cfg.GetMasterNode()
+      (master, ip, dev, netmask, _) = self.cfg.GetMasterNetworkParameters()
       feedback_fn("Shutting down master ip on the current netdev (%s)" %
                   self.cluster.master_netdev)
-      result = self.rpc.call_node_deactivate_master_ip(master)
+      result = self.rpc.call_node_deactivate_master_ip(master, ip, netmask, dev)
       result.Raise("Could not disable the master ip")
       feedback_fn("Changing master_netdev from %s to %s" %
-                  (self.cluster.master_netdev, self.op.master_netdev))
+                  (dev, self.op.master_netdev))
       self.cluster.master_netdev = self.op.master_netdev
 
     if self.op.master_netmask:
@@ -3902,8 +3902,8 @@ class LUClusterDeactivateMasterIp(NoHooksLU):
     """Deactivate the master IP.
 
     """
-    master = self.cfg.GetMasterNode()
-    self.rpc.call_node_deactivate_master_ip(master)
+    (master, ip, dev, netmask, _) = self.cfg.GetMasterNetworkParameters()
+    self.rpc.call_node_deactivate_master_ip(master, ip, netmask, dev)
 
 
 def _WaitForSync(lu, instance, disks=None, oneshot=False):
diff --git a/lib/rpc_defs.py b/lib/rpc_defs.py
index d0bd67f25f4ed5046fbe5c0e3dc3507321ffd218..b4f799e60bbe8f93aa305c8eec5ccf89f496c160 100644
--- a/lib/rpc_defs.py
+++ b/lib/rpc_defs.py
@@ -407,7 +407,11 @@ CALLS = {
       "Activates master IP on a node"),
     ("node_stop_master", SINGLE, TMO_FAST, [], None,
      "Deactivates master IP and stops master daemons on a node"),
-    ("node_deactivate_master_ip", SINGLE, TMO_FAST, [], None,
+    ("node_deactivate_master_ip", SINGLE, TMO_FAST, [
+      ("master_ip", None, "The master IP"),
+      ("master_netmask", None, "The master IP netmask"),
+      ("master_netdev", None, "The master network device"),
+      ], None,
      "Deactivates master IP on a node"),
     ("node_change_master_netmask", SINGLE, TMO_FAST, [
       ("netmask", None, None),
diff --git a/lib/server/noded.py b/lib/server/noded.py
index 34f72d0fbdce0dfd94931e5357485db77502485d..7e1619ead26db1555805385211aa96e3b49ffadf 100644
--- a/lib/server/noded.py
+++ b/lib/server/noded.py
@@ -704,7 +704,7 @@ class NodeHttpServer(http.server.HttpServer):
     """Deactivate the master IP on this node.
 
     """
-    return backend.DeactivateMasterIp()
+    return backend.DeactivateMasterIp(params[0], params[1], params[2])
 
   @staticmethod
   def perspective_node_stop_master(params):