diff --git a/lib/config.py b/lib/config.py
index 9256bb958f7ca22e9e0175b705cc9acf49fc6a35..d7a1e9f772843832e8464311b35d2f811f280377 100644
--- a/lib/config.py
+++ b/lib/config.py
@@ -646,6 +646,7 @@ class ConfigWriter:
 
     instance.serial_no = 1
     self._config_data.instances[instance.name] = instance
+    self._config_data.cluster.serial_no += 1
     self._UnlockedReleaseDRBDMinors(instance.name)
     self._WriteConfig()
 
@@ -680,6 +681,7 @@ class ConfigWriter:
     if instance_name not in self._config_data.instances:
       raise errors.ConfigurationError("Unknown instance '%s'" % instance_name)
     del self._config_data.instances[instance_name]
+    self._config_data.cluster.serial_no += 1
     self._WriteConfig()
 
   @locking.ssynchronized(_config_lock)
@@ -1064,10 +1066,13 @@ class ConfigWriter:
 
     """
     fn = "\n".join
+    instance_names = utils.NiceSort(self._UnlockedGetInstanceList())
     node_names = utils.NiceSort(self._UnlockedGetNodeList())
     node_info = [self._UnlockedGetNodeInfo(name) for name in node_names]
 
+    instance_data = fn(instance_names)
     off_data = fn(node.name for node in node_info if node.offline)
+    on_data = fn(node.name for node in node_info if not node.offline)
     mc_data = fn(node.name for node in node_info if node.master_candidate)
     node_data = fn(node_names)
 
@@ -1081,6 +1086,8 @@ class ConfigWriter:
       constants.SS_MASTER_NODE: cluster.master_node,
       constants.SS_NODE_LIST: node_data,
       constants.SS_OFFLINE_NODES: off_data,
+      constants.SS_ONLINE_NODES: on_data,
+      constants.SS_INSTANCE_LIST: instance_data,
       constants.SS_RELEASE_VERSION: constants.RELEASE_VERSION,
       }
 
diff --git a/lib/constants.py b/lib/constants.py
index 1711728fc8f5e1ea7bb8ba517f6446da2d81be4c..367b31c9633cd01e1d7a22360d3189c96a627b03 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -422,6 +422,8 @@ SS_MASTER_NETDEV = "master_netdev"
 SS_MASTER_NODE = "master_node"
 SS_NODE_LIST = "node_list"
 SS_OFFLINE_NODES = "offline_nodes"
+SS_ONLINE_NODES = "online_nodes"
+SS_INSTANCE_LIST = "instance_list"
 SS_RELEASE_VERSION = "release_version"
 
 # cluster wide default parameters
diff --git a/lib/ssconf.py b/lib/ssconf.py
index f575d129f4795140ffbd9dc0fd69a6798a3fd1ba..a8a8968ffcd6048dc66bc70e16c6c8812d69c86e 100644
--- a/lib/ssconf.py
+++ b/lib/ssconf.py
@@ -133,6 +133,8 @@ class SimpleStore(object):
     constants.SS_MASTER_NODE,
     constants.SS_NODE_LIST,
     constants.SS_OFFLINE_NODES,
+    constants.SS_ONLINE_NODES,
+    constants.SS_INSTANCE_LIST,
     constants.SS_RELEASE_VERSION,
     )
   _MAX_SIZE = 131072
@@ -189,7 +191,7 @@ class SimpleStore(object):
       for name, value in values.iteritems():
         if value and not value.endswith("\n"):
           value += "\n"
-        utils.WriteFile(self.KeyToFilename(name), data=value)
+        utils.WriteFile(self.KeyToFilename(name), data=value, mode=0444)
     finally:
       ssconf_lock.Unlock()
 
diff --git a/scripts/gnt-cluster b/scripts/gnt-cluster
index 9cd1f52f1232e38e0abb349e162d6e7495c7e9e9..5c9f2c2cd8a4022d42d85b7ddc565c8cac271844 100755
--- a/scripts/gnt-cluster
+++ b/scripts/gnt-cluster
@@ -187,7 +187,7 @@ def RedistributeConfig(opts, args):
   @return: the desired exit code
 
   """
-  op = opcodes.OpRedistributeConf()
+  op = opcodes.OpRedistributeConfig()
   SubmitOrSend(op, opts)
   return 0