diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 1789d200660b9d6f2ad3e9fb8baa3a532603bd59..cf028bcd54e916f8bc249fd706118af2965da3f7 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -1271,7 +1271,7 @@ class LUQueryNodes(NoHooksLU):
 
     _CheckOutputFields(static=["name", "pinst_cnt", "sinst_cnt",
                                "pinst_list", "sinst_list",
-                               "pip", "sip"],
+                               "pip", "sip", "tags"],
                        dynamic=self.dynamic_fields,
                        selected=self.op.output_fields)
 
@@ -1342,6 +1342,8 @@ class LUQueryNodes(NoHooksLU):
           val = node.primary_ip
         elif field == "sip":
           val = node.secondary_ip
+        elif field == "tags":
+          val = list(node.GetTags())
         elif field in self.dynamic_fields:
           val = live_data[node.name].get(field, None)
         else:
@@ -2488,7 +2490,7 @@ class LUQueryInstances(NoHooksLU):
     _CheckOutputFields(static=["name", "os", "pnode", "snodes",
                                "admin_state", "admin_ram",
                                "disk_template", "ip", "mac", "bridge",
-                               "sda_size", "sdb_size", "vcpus"],
+                               "sda_size", "sdb_size", "vcpus", "tags"],
                        dynamic=self.dynamic_fields,
                        selected=self.op.output_fields)
 
@@ -2581,6 +2583,8 @@ class LUQueryInstances(NoHooksLU):
             val = disk.size
         elif field == "vcpus":
           val = instance.vcpus
+        elif field == "tags":
+          val = list(instance.GetTags())
         else:
           raise errors.ParameterError(field)
         iout.append(val)
diff --git a/man/gnt-instance.sgml b/man/gnt-instance.sgml
index d1f8a94444391608927b271578e9fcf0202aa4ad..0095fbf9a3071b3ffa9b06ac7ad50387cf093d8b 100644
--- a/man/gnt-instance.sgml
+++ b/man/gnt-instance.sgml
@@ -575,6 +575,13 @@
                 instance</simpara>
               </listitem>
             </varlistentry>
+            <varlistentry>
+              <term>tags</term>
+              <listitem>
+                <simpara>comma-separated list of the instances's
+                tags</simpara>
+              </listitem>
+            </varlistentry>
           </variablelist>
         </para>
 
diff --git a/man/gnt-node.sgml b/man/gnt-node.sgml
index cae8a8f4b71d6ffb63d9f322cdf8da9ef09425a8..65b8d81f55343b09f9df5ce2fccb15c8bee8e601 100644
--- a/man/gnt-node.sgml
+++ b/man/gnt-node.sgml
@@ -326,6 +326,13 @@
               changes in this value)</simpara>
             </listitem>
           </varlistentry>
+          <varlistentry>
+            <term>tags</term>
+            <listitem>
+              <simpara>comma-separated list of the node's
+              tags</simpara>
+            </listitem>
+          </varlistentry>
         </variablelist>
       </para>
 
diff --git a/scripts/gnt-instance b/scripts/gnt-instance
index 497a528a7943a07e5ec0d8871f58384944cab637..06caf943f0c906a96cc73f4495581743759db3f9 100755
--- a/scripts/gnt-instance
+++ b/scripts/gnt-instance
@@ -188,7 +188,7 @@ def ListInstances(opts, args):
       "ip": "IP Address", "mac": "MAC Address",
       "bridge": "Bridge", "vcpus": "VCPUs",
       "sda_size": "Disk/0", "sdb_size": "Disk/1",
-      "status": "Status",
+      "status": "Status", "tags": "Tags",
       }
   else:
     headers = None
@@ -200,6 +200,7 @@ def ListInstances(opts, args):
 
   numfields = ["admin_ram", "oper_ram", "sda_size", "sdb_size", "vcpus"]
 
+  list_type_fields = ("tags",)
   # change raw values to nicer strings
   for row in output:
     for idx, field in enumerate(selected_fields):
@@ -224,6 +225,8 @@ def ListInstances(opts, args):
       elif field == "sda_size" or field == "sdb_size":
         if val is None:
           val = "N/A"
+      elif field in list_type_fields:
+        val = ",".join(val)
       row[idx] = str(val)
 
   data = GenerateTable(separator=opts.separator, headers=headers,
diff --git a/scripts/gnt-node b/scripts/gnt-node
index 3c2189a948c1eedeacaa2fd2acd139c14a20e34f..6b310964d3b33feef1d5627feb527c13e965795a 100755
--- a/scripts/gnt-node
+++ b/scripts/gnt-node
@@ -70,6 +70,7 @@ def ListNodes(opts, args):
       "mtotal": "MTotal", "mnode": "MNode", "mfree": "MFree",
       "bootid": "BootID",
       "ctotal": "CTotal",
+      "tags": "Tags",
       }
   else:
     headers = None
@@ -84,13 +85,12 @@ def ListNodes(opts, args):
                "pinst_cnt", "sinst_cnt",
                "ctotal"]
 
+  list_type_fields = ("pinst_list", "sinst_list", "tags")
   # change raw values to nicer strings
   for row in output:
     for idx, field in enumerate(selected_fields):
       val = row[idx]
-      if field == "pinst_list":
-        val = ",".join(val)
-      elif field == "sinst_list":
+      if field in list_type_fields:
         val = ",".join(val)
       elif val is None:
         val = "?"