diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 09d2bbcf247575f0a15f2031db4fe0cfbe15aebf..333de53d6aee879e7d31aed42f89f73081b3e655 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -2224,7 +2224,7 @@ class LUQueryNodes(NoHooksLU):
     "name", "pinst_cnt", "sinst_cnt",
     "pinst_list", "sinst_list",
     "pip", "sip", "tags",
-    "serial_no",
+    "serial_no", "ctime", "mtime",
     "master_candidate",
     "master",
     "offline",
@@ -2348,6 +2348,10 @@ class LUQueryNodes(NoHooksLU):
           val = list(node.GetTags())
         elif field == "serial_no":
           val = node.serial_no
+        elif field == "ctime":
+          val = node.ctime
+        elif field == "mtime":
+          val = node.mtime
         elif field == "master_candidate":
           val = node.master_candidate
         elif field == "master":
@@ -3042,6 +3046,8 @@ class LUQueryClusterInfo(NoHooksLU):
       "master_netdev": cluster.master_netdev,
       "volume_group_name": cluster.volume_group_name,
       "file_storage_dir": cluster.file_storage_dir,
+      "ctime": cluster.ctime,
+      "mtime": cluster.mtime,
       }
 
     return result
@@ -3919,7 +3925,9 @@ class LUQueryInstances(NoHooksLU):
                                     r"(nic)\.(bridge)/([0-9]+)",
                                     r"(nic)\.(macs|ips|modes|links|bridges)",
                                     r"(disk|nic)\.(count)",
-                                    "serial_no", "hypervisor", "hvparams",] +
+                                    "serial_no", "hypervisor", "hvparams",
+                                    "ctime", "mtime",
+                                    ] +
                                   ["hv/%s" % name
                                    for name in constants.HVS_PARAMETERS] +
                                   ["be/%s" % name
@@ -4104,6 +4112,10 @@ class LUQueryInstances(NoHooksLU):
           val = list(instance.GetTags())
         elif field == "serial_no":
           val = instance.serial_no
+        elif field == "ctime":
+          val = instance.ctime
+        elif field == "mtime":
+          val = instance.mtime
         elif field == "network_port":
           val = instance.network_port
         elif field == "hypervisor":
@@ -6734,6 +6746,9 @@ class LUQueryInstanceData(NoHooksLU):
         "hv_actual": cluster.FillHV(instance),
         "be_instance": instance.beparams,
         "be_actual": cluster.FillBE(instance),
+        "serial_no": instance.serial_no,
+        "mtime": instance.mtime,
+        "ctime": instance.ctime,
         }
 
       result[instance.name] = idict
diff --git a/man/gnt-instance.sgml b/man/gnt-instance.sgml
index 7b907d0f451ccf6ca549cf7d81f659704e5fda8b..17a8073748c8ab5e81ce3863cac5dc22ece18d75 100644
--- a/man/gnt-instance.sgml
+++ b/man/gnt-instance.sgml
@@ -986,6 +986,34 @@ instance5: 11225
                 to track modifications</simpara>
               </listitem>
             </varlistentry>
+          <varlistentry>
+            <term>ctime</term>
+            <listitem>
+              <para>
+                the creation time of the instance; note that this
+                field contains spaces and as such it's harder to parse
+              </para>
+              <para>
+                if this attribute is not present (e.g. when upgrading
+                from older versions), then "N/A" will be shown instead
+              </para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>mtime</term>
+            <listitem>
+              <para>
+                the last modification time of the instance; note that
+                this field contains spaces and as such it's harder to
+                parse
+              </para>
+              <para>
+                if this attribute is not present (e.g. when upgrading
+                from older versions), then "N/A" will be shown instead
+              </para>
+            </listitem>
+          </varlistentry>
+
             <varlistentry>
               <term>network_port</term>
               <listitem>
diff --git a/man/gnt-node.sgml b/man/gnt-node.sgml
index 840d31ef27bb56d24d0ad1a5163be1741a6336c4..d60810e3c3127f6dab5ce73037683019bb782a37 100644
--- a/man/gnt-node.sgml
+++ b/man/gnt-node.sgml
@@ -379,12 +379,38 @@
           <varlistentry>
             <term>serial_no</term>
             <listitem>
-              <simpara>the so called 'serial number' of the instance;
+              <simpara>the so called 'serial number' of the node;
               this is a numeric field that is incremented each time
-              the instance is modified, and it can be used to detect
+              the node is modified, and it can be used to detect
               modifications</simpara>
             </listitem>
           </varlistentry>
+          <varlistentry>
+            <term>ctime</term>
+            <listitem>
+              <para>
+                the creation time of the node; note that this field
+                contains spaces and as such it's harder to parse
+              </para>
+              <para>
+                if this attribute is not present (e.g. when upgrading
+                from older versions), then "N/A" will be shown instead
+              </para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>mtime</term>
+            <listitem>
+              <para>
+                the last modification time of the node; note that this
+                field contains spaces and as such it's harder to parse
+              </para>
+              <para>
+                if this attribute is not present (e.g. when upgrading
+                from older versions), then "N/A" will be shown instead
+              </para>
+            </listitem>
+          </varlistentry>
           <varlistentry>
             <term>ctotal</term>
             <listitem>
diff --git a/scripts/gnt-cluster b/scripts/gnt-cluster
index b2594fc4c05b10cb2493d141b56099b29990c1f6..0ac37fc5ad5dd55623ce330a8d31b6453c394b18 100755
--- a/scripts/gnt-cluster
+++ b/scripts/gnt-cluster
@@ -221,6 +221,9 @@ def ShowClusterConfig(opts, args):
 
   ToStdout("Cluster name: %s", result["name"])
 
+  ToStdout("Creation time: %s", utils.FormatTime(result["ctime"]))
+  ToStdout("Modification time: %s", utils.FormatTime(result["mtime"]))
+
   ToStdout("Master node: %s", result["master"])
 
   ToStdout("Architecture (this node): %s (%s)",
diff --git a/scripts/gnt-instance b/scripts/gnt-instance
index f89e49754c782249c417712b563966069da1034c..aeb6189228c0ba42cc77e7f6122f160ea3e05cfa 100755
--- a/scripts/gnt-instance
+++ b/scripts/gnt-instance
@@ -27,6 +27,7 @@ import sys
 import os
 import itertools
 import simplejson
+import time
 from optparse import make_option
 from cStringIO import StringIO
 
@@ -226,6 +227,7 @@ def ListInstances(opts, args):
       "nic.count": "NICs", "nic.ips": "NIC_IPs",
       "nic.modes": "NIC_modes", "nic.links": "NIC_links",
       "nic.bridges": "NIC_bridges", "nic.macs": "NIC_MACs",
+      "ctime": "CTime", "mtime": "MTime",
       }
   else:
     headers = None
@@ -260,6 +262,8 @@ def ListInstances(opts, args):
       elif field == "sda_size" or field == "sdb_size":
         if val is None:
           val = "N/A"
+      elif field == "ctime" or field == "mtime":
+        val = utils.FormatTime(val)
       elif field in list_type_fields:
         val = ",".join(str(item) for item in val)
       elif val is None:
@@ -1169,6 +1173,9 @@ def ShowInstanceConfig(opts, args):
   for instance_name in result:
     instance = result[instance_name]
     buf.write("Instance name: %s\n" % instance["name"])
+    buf.write("Serial number: %s\n" % instance["serial_no"])
+    buf.write("Creation time: %s\n" % utils.FormatTime(instance["ctime"]))
+    buf.write("Modification time: %s\n" % utils.FormatTime(instance["mtime"]))
     buf.write("State: configured to be %s" % instance["config_state"])
     if not opts.static:
       buf.write(", actual state is %s" % instance["run_state"])
diff --git a/scripts/gnt-node b/scripts/gnt-node
index 6b0302c3057303d8632c7dbd06cb4e059ad3dd7e..29c9a1e05706605a702ac3dc3cfdef4506e7cb9c 100755
--- a/scripts/gnt-node
+++ b/scripts/gnt-node
@@ -57,6 +57,7 @@ _LIST_HEADERS = {
   "master": "IsMaster",
   "offline": "Offline", "drained": "Drained",
   "role": "Role",
+  "ctime": "CTime", "mtime": "MTime",
   }
 
 #: User-facing storage unit types
@@ -175,6 +176,8 @@ def ListNodes(opts, args):
           val = 'Y'
         else:
           val = 'N'
+      elif field == "ctime" or field == "mtime":
+        val = utils.FormatTime(val)
       elif val is None:
         val = "?"
       row[idx] = str(val)