diff --git a/lib/bootstrap.py b/lib/bootstrap.py
index fda1c2ee64dc0f7b711c2c2c6668fcee637c5762..c936606bb4d6371698e0d3b3d54c7c60e88ba1f5 100644
--- a/lib/bootstrap.py
+++ b/lib/bootstrap.py
@@ -126,7 +126,8 @@ def _InitGanetiServerSetup():
 def InitCluster(cluster_name, mac_prefix, def_bridge,
                 master_netdev, file_storage_dir, candidate_pool_size,
                 secondary_ip=None, vg_name=None, beparams=None, hvparams=None,
-                enabled_hypervisors=None, default_hypervisor=None):
+                enabled_hypervisors=None, default_hypervisor=None,
+                modify_etc_hosts=True):
   """Initialise the cluster.
 
   @type candidate_pool_size: int
@@ -236,7 +237,9 @@ def InitCluster(cluster_name, mac_prefix, def_bridge,
     f.close()
   sshkey = sshline.split(" ")[1]
 
-  utils.AddHostToEtcHosts(hostname.name)
+  if modify_etc_hosts:
+    utils.AddHostToEtcHosts(hostname.name)
+
   _InitSSHSetup()
 
   # init of cluster config file
@@ -258,6 +261,7 @@ def InitCluster(cluster_name, mac_prefix, def_bridge,
     beparams={constants.BEGR_DEFAULT: beparams},
     hvparams=hvparams,
     candidate_pool_size=candidate_pool_size,
+    modify_etc_hosts=opts.modify_etc_hosts,
     )
   master_node_config = objects.Node(name=hostname.name,
                                     primary_ip=hostname.ip,
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index ae2267ad560c75fb0cd57b47bf1ea02eddbbdf32..19196637be928ca6e0e88f118fcc755e362f9e61 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -2378,7 +2378,8 @@ class LUAddNode(LogicalUnit):
                                " new node: %s" % msg)
 
     # Add node to our /etc/hosts, and add key to known_hosts
-    utils.AddHostToEtcHosts(new_node.name)
+    if self.cfg.GetClusterInfo().modify_etc_hosts:
+      utils.AddHostToEtcHosts(new_node.name)
 
     if new_node.secondary_ip != new_node.primary_ip:
       result = self.rpc.call_node_has_ip_address(new_node.name,
diff --git a/lib/objects.py b/lib/objects.py
index 23bb0f9776b96f4bc97212a56610752a2cb54917..13e78dd05548d1d1f4a065009090a0135f586d22 100644
--- a/lib/objects.py
+++ b/lib/objects.py
@@ -752,8 +752,16 @@ class Cluster(TaggableObject):
     "hvparams",
     "beparams",
     "candidate_pool_size",
+    "modify_etc_hosts",
     ]
 
+  def UpgradeConfig(self):
+    """Fill defaults for missing configuration values.
+
+    """
+    if self.modify_etc_hosts is None:
+      self.modify_etc_hosts = True
+
   def ToDict(self):
     """Custom function for cluster.
 
diff --git a/scripts/gnt-cluster b/scripts/gnt-cluster
index e6cb4f70cbf4cfb0745dd928f504d76cde04614e..fff42bb1f858580193b3965c219d92a678309923 100755
--- a/scripts/gnt-cluster
+++ b/scripts/gnt-cluster
@@ -105,6 +105,7 @@ def InitCluster(opts, args):
                         hvparams=hvparams,
                         beparams=beparams,
                         candidate_pool_size=opts.candidate_pool_size,
+                        modify_etc_hosts=opts.modify_etc_hosts,
                         )
   return 0
 
@@ -582,6 +583,10 @@ commands = {
                         help="No support for lvm based instances"
                              " (cluster-wide)",
                         action="store_false", default=True,),
+            make_option("--no-etc-hosts", dest="modify_etc_hosts",
+                        help="Don't modify /etc/hosts"
+                             " (cluster-wide)",
+                        action="store_false", default=True,),
             make_option("--enabled-hypervisors", dest="enabled_hypervisors",
                         help="Comma-separated list of hypervisors",
                         type="string", default=None),